あなたは何か環境が必要です。
ネイティブ共有ライブラリ(.so
)にアクセスせずに、アクセス許可の問題、APIの違いなど。DLLImport
externsは最適なオプションではありません。
OSファイルが存在すると、サンドボックス化のために厄介なことがありますので、File.Exists
は避けてください。
しかし、Androidには、すべてのユーザー(ルート以外のユーザー)が使用できるcmdのgetprop
があります。常にシェルのパスにあり、実行してAndroid上の値を返します。安いが、それは動作します...
public static class AndroidTest
{
static bool? isAndroid;
public static bool Check()
{
if (isAndroid != null) return (bool)isAndroid;
using (var process = new System.Diagnostics.Process())
{
process.StartInfo.FileName = "getprop";
process.StartInfo.Arguments = "ro.build.user";
process.StartInfo.RedirectStandardOutput = true;
process.StartInfo.UseShellExecute = false;
process.StartInfo.CreateNoWindow = true;
try
{
process.Start();
var output = process.StandardOutput.ReadToEnd();
isAndroid = string.IsNullOrEmpty(output) ? (bool?)false : (bool?)true;
}
catch
{
isAndroid = false;
}
return (bool)isAndroid;
}
}
}
注:もちろん誰かがgetprop
CMDおよびその戻り値これをだますために、またはその他の環境のチェックをだますことができますが、あなたは、Androidのネイティブへのアクセス権を持っていない限り、 APIを使用して100%可搬性を維持したいという欲求がある場合、私はそれを回避する方法は見当たりません。