私のアプリの一部としてNDKを使用しており、x86とmipsのバイナリを標準のARM=バイナリと一緒にバンドルする価値があるかどうか疑問に思っていました。
ユーザーが実際に持っているものを追跡するのが最善の方法だと考えましたが、これをGoogleアナリティクスインスタンスに返すことができるようにプロセッサアーキテクチャを取得するAPI呼び出しはありますか?
ありがとう
実際には、反射をまったく必要とせずにアーキテクチャを取得できます。
String Arch = System.getProperty("os.Arch");
私のテストでは、armv71
およびi686
。
編集:
MIPSアーキテクチャでは、「mips」または「mips64」を返します
64ビットARM/Intelでは、それぞれ「Arch64」または「x86_64」を返します。
Android SDK、Build
クラスを見てください。
/** The name of the instruction set (CPU type + ABI convention) of native code. */
public static final String CPU_ABI = getString("ro.product.cpu.abi");
/** The name of the second instruction set (CPU type + ABI convention) of native code. */
public static final String CPU_ABI2 = getString("ro.product.cpu.abi2");
Adbコマンドを使用できます
adbシェルgetprop ro.product.cpu.abi adbシェルgetprop ro.product.cpu.abi2
[サイト]を参照してください: Android lollipopでアプリのプロセスがプログラムで32ビットまたは64ビットであることを知る方法
Lollipop APIを探している場合
import Android.os.Build;
Log.i(TAG, "CPU_ABI : " + Build.CPU_ABI);
Log.i(TAG, "CPU_ABI2 : " + Build.CPU_ABI2);
Log.i(TAG, "OS.Arch : " + System.getProperty("os.Arch"));
Log.i(TAG, "SUPPORTED_ABIS : " + Arrays.toString(Build.SUPPORTED_ABIS));
Log.i(TAG, "SUPPORTED_32_BIT_ABIS : " + Arrays.toString(Build.SUPPORTED_32_BIT_ABIS));
Log.i(TAG, "SUPPORTED_64_BIT_ABIS : " + Arrays.toString(Build.SUPPORTED_64_BIT_ABIS));
このコマンドを試してください:
adb Shell getprop ro.product.cpu.abi
CPUがARMまたはIntel、64または86_64であるかどうかを示します
探している値は
ro.product.cpu.abi
そして
ro.product.cpu.abi2
これらは、内部API SystemProperties.getを使用して取得できます。そのため、SystemPropertiesでReflectionを使用する必要があります。
リフレクションにあまり熱心でなければ、関数getSystemPropertyを使用できます。それを確認してください こちら
termux-app
は異なるアプローチを使用し、説明があります。
private static String determineTermuxArchName() {
// Note that we cannot use System.getProperty("os.Arch") since that may give e.g. "aarch64"
// while a 64-bit runtime may not be installed (like on the Samsung Galaxy S5 Neo).
// Instead we search through the supported abi:s on the device, see:
// http://developer.Android.com/ndk/guides/abis.html
// Note that we search for abi:s in preferred order (the ordering of the
// Build.SUPPORTED_ABIS list) to avoid e.g. installing arm on an x86 system where arm
// emulation is available.
for (String androidArch : Build.SUPPORTED_ABIS) {
switch (androidArch) {
case "arm64-v8a": return "aarch64";
case "armeabi-v7a": return "arm";
case "x86_64": return "x86_64";
case "x86": return "i686";
}
}
throw new RuntimeException("Unable to determine Arch from Build.SUPPORTED_ABIS = " +
Arrays.toString(Build.SUPPORTED_ABIS));
}
私のコードはこんな感じ
private String cpuinfo()
{
String Arch = System.getProperty("os.Arch");
String arc = Arch.substring(0, 3).toUpperCase();
String rarc="";
if (arc.equals("ARM")) {
rarc= "This is ARM";
}else if (arc.equals("MIP")){
rarc= "This is MIPS";
}else if (arc.equals("X86")){
rarc= "This is X86";
}
return rarc;
}