获取处理器架构的API调用

作为我的应用程序的一部分,我正在使用NDK并且想知道是否值得将x86和mips二进制文件与标准ARM二进制文件一起捆绑。

我认为最好的方法是跟踪我的用户实际拥有的内容,是否有API调用以获取处理器架构,以便将其传回我的Google分析实例?

谢谢

Solutions Collecting From Web of "获取处理器架构的API调用"

实际上,您可以在不需要reflection的情况下获得架构:

String arch = System.getProperty("os.arch"); 

从我的测试中它返回了armv71i686

编辑:

在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"); 

您可以使用Build类:

import android.os.Build;

然后阅读:

Build.CPU_ABI

您可以使用adb命令

adb shell getprop ro.product.cpu.abi adb shell getprop ro.product.cpu.abi2

并参考[site]: 如何在Android棒棒糖中以编程方式知道应用程序的进程是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)); 

您要查找的值是

ro.product.cpu.abi

ro.product.cpu.abi2

这些可以使用内部api SystemProperties.get获得所以你必须在SystemProperties上使用Reflection。

如果你不太热衷于reflection,你可以使用函数getSystemProperty。 在这里查看

试试这个命令:

 adb shell getprop ro.product.cpu.abi 

它告诉cpu是ARM还是Intel,64或86_64

我的代码看起来像这样

 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; } 

termux-app使用不同的方法并有一个解释:

 private static String determineTermuxArchName() { // Note that we cannot use System.getProperty("os.arch") since that may give eg "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 eg 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)); } 

来自: https : //github.com/termux/termux-app/blob/master/app/src/main/java/com/termux/app/TermuxInstaller.java