如何获取应用程序的当前ABI?

时间:2016-09-14 23:04:41

标签: android android-ndk

看来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会自动重新排序列表吗?问候。

2 个答案:

答案 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返回设备的全局首选项顺序。它的顺序或内容都不受正在运行的应用程序的影响。