这可能是一个重复的问题,但我无法找到它.我想知道我们如何使用代码获得手机的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上运行,它们将返回以下内容之一:
未来的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)
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)
| 归档时间: |
|
| 查看次数: |
12529 次 |
| 最近记录: |