看来Build.CPU_ABI
已被弃用,而不是Build.SUPPORTED_ABIS.
但是,如何查找我的应用当前正在使用的ABI?
例如,我的平板电脑首先支持x86,然后支持armeabi-v7a。但是,打包的本机库位于lib/armeabi-v7a
目录中。 apk中没有lib/x86
目录。如果我根本没有本机库,设备将使用x86 ABI。但是,鉴于本机库存在且仅为armeabi-v7a类型,该应用程序必须回归到armeabi-v7a ABI。
那么我如何以编程方式确定我的应用当前正在运行哪个ABI? Build.SUPPORTED_ABIS
会自动重新排序列表吗?问候。
答案 0 :(得分:2)
在java中使用它
System.getProperty("os.arch")
或在c ++中
char arch_info[11] = "";
// checking if CPU is of ARM family or not
if (android_getCpuFamily() == ANDROID_CPU_FAMILY_ARM) {
strcpy(arch_info, "ARM");
// checking if CPU is ARM v7 or not
uint64_t cpuFeatures = android_getCpuFeatures();
if ((cpuFeatures & ANDROID_CPU_ARM_FEATURE_ARMv7) != 0) {
strcat(arch_info, " v7");
// checking if CPU is ARM v7 Neon
if((cpuFeatures & ANDROID_CPU_ARM_FEATURE_NEON) != 0) {
strcat(arch_info, "-neon");
}
}
}
答案 1 :(得分:1)
以下内容没有记录,因此您可能不想依赖它,但是我已经在运行API级别25的arm64-v8a设备上进行了验证。
尽管Build.CPU_ABI
被弃用,但仍会精确返回您所要求的:正在运行的应用程序的ABI。
另一方面,Build.SUPPORTED_ABIS
返回设备的全局首选项顺序。它的顺序或内容都不受正在运行的应用程序的影响。