如何在android中获得ABI(应用程序二进制接口)

Cuo*_*han 18 android abi

这可能是一个重复的问题,但我无法找到它.我想知道我们如何使用代码获得手机的ABI.我知道gradle文件中可能有不同的接口.但问题是如何才能准确获取某个设备的ABI,以便我可以使用SuperSU手动将其复制到system/lib /文件夹.谢谢.

android.productFlavors {
        // for detailed abiFilter descriptions, refer to "Supported ABIs" @
        // https://developer.android.com/ndk/guides/abis.html#sa
        create("arm") {
            ndk.abiFilters.add("armeabi")
        }
        create("arm7") {
            ndk.abiFilters.add("armeabi-v7a")
        }
        create("arm8") {
            ndk.abiFilters.add("arm64-v8a")
        }
        create("x86") {
            ndk.abiFilters.add("x86")
        }
        create("x86-64") {
            ndk.abiFilters.add("x86_64")
        }
        create("mips") {
            ndk.abiFilters.add("mips")
        }
        create("mips-64") {
            ndk.abiFilters.add("mips64")
        }
        // To include all cpu architectures, leaves abiFilters empty
        create("all")
    }
Run Code Online (Sandbox Code Playgroud)

小智 26

有两种方法可以做到这一点.一个已被弃用但仍然有效,而另一个则要求手机运行Android 5.0或更高版本.

贬值的方式

如果您想支持所有当前的手机,您可以使用:

import android.os.Build;
String ABI = Build.CPU_ABI;
Run Code Online (Sandbox Code Playgroud)

更新的方式

更新的方法实际上将提供所有支持的ABI的列表,第一个索引是最受欢迎的ABI(API参考):

import android.os.Build;
String ABI = Build.SUPPORTED_ABIS[0];
Run Code Online (Sandbox Code Playgroud)

两种方式都已经过测试,可以在Android 5.1.1上运行,它们将返回以下内容之一:

  • armeabi
  • armeabi-V7A
  • armeabi-V7A硬
  • arm64-V8A
  • 86
  • x86_64的
  • MIPS
  • MIPS64

未来的ABI应该列在这里:https://developer.android.com/ndk/guides/abis.html#sa


ish*_*007 13

在这里查看:

在此输入图像描述

不在那里?

通过ADB shell:

adb shell getprop ro.product.cpu.abi
Run Code Online (Sandbox Code Playgroud)

虽然Java代码:

import android.os.Build;
Log.d("myabi", Build.SUPPORTED_ABIS[0]);
Run Code Online (Sandbox Code Playgroud)


Joh*_*145 7

TLDR:这是 bandoncontortion 解决方案的组合版本,适用于所有 Android 版本:

public String getAbi() {
    if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) {
        // on newer Android versions, we'll return only the most important Abi version
        return Build.SUPPORTED_ABIS[0];
    }
    else {
        // on pre-Lollip versions, we got only one Abi
        return Build.CPU_ABI;
    }
}
Run Code Online (Sandbox Code Playgroud)