前言
首先:ARM是神马?
答:ARM是我们设备的CPU架构。
其次:arm64-v8a、armeabi-v7a、armeabi是神马?
答:在Android 系统上,每一个CPU架构对应一个ABI。他们就是我们的ABI类型
最后:ABI是神马?
答:应用程序二进制接口(Application Binary Interface)定义了二进制文件(尤其是.so文件)如何运行在相应的系统平台上,从使用的指令集,内存对齐到可用的系统函数库。
补充:查询手机cpu命令行
答: adb shell getprop ro.product.cpu.abi
正题
armeabi-v7a: ARM v7架构之前的主流版本,现在也很多。
arm64-v8a: 64位支持,目前主流的版本。
ABI是如何工作的
一个Android设备可以支持多种ABI,设备主ABI和辅助ABI。
以arm64-v8a为主ABI的设备,辅助ABI为armeabi-v7a和armeabi。
以armeabi-v7a为主ABI的设备,辅助ABI为armeabi。
ABI具体适配流程
对于一个cpu是arm64-v8a架构的手机,它运行app时,进入jnilibs去读取库文件时,先看有没有arm64-v8a文件夹,如果没有该文件夹,去找armeabi-v7a文件夹,如果没有,再去找armeabi文件夹,如果连这个文件夹也没有,就抛出异常。
如果有arm64-v8a文件夹,那么就去找特定名称的.so文件,注意:如果没有找到想要的.so文件,不会再往下(armeabi-v7a文件夹)找了,而是直接抛出异常。
项目中该如何适配
问题:只适配了armeabi-v7a,那如果APP装在其他架构的手机上,如arm64-v8a上,会蹦吗?
答: 不会,但是反过来会。 因为armeabi-v7a和arm64-v8a会向下兼容:
只适配armeabi的APP可以跑在armeabi,x86,x86_64,armeabi-v7a,arm64-v8上
只适配armeabi-v7a可以运行在armeabi-v7a和arm64-v8a
只适配arm64-v8a 可以运行在arm64-v8a上
适配方案有哪些?
1、只适配armeabi 优点:基本上适配了全部CPU架构(除了淘汰的mips和mips_64) 缺点:性能低,相当于在绝大多数手机上都是需要辅助ABI或动态转码来兼容。
2、只适配 armeabi-v7a 同理方案一,只是又筛掉了一部分老旧设备,在性能和兼容二者中比较平衡。
3、只适配 arm64-v8 优点: 性能最佳 缺点: 只能运行在arm64-v8上,要放弃部分老旧设备用户。
这三种方案都是可以的,现在的大厂APP适配中,这三种都有,大部分是前2种方案。具体选哪一种就看自己的考量了,以性能换兼容就arm64-v8,以兼容换性能armeabi,二者稍微平衡一点的就armeabi-v7a。
打包配置
split分包
这个命令可以按照各种规则去分包,比如按照abi,屏幕密度(即ldpi,hdpi等)分包。
splits {
abi {
enable true
reset()
include 'x86','armabi'
exclude 'armeabi', 'armeabi-v7a', "arm64-v8a"
universalApk true
}
}
ndk{abiFilters:}过滤
这个指令可以配置只打包你配置的so库,没有配置的就不打包,很灵活。 第三方aar文件,如果这个sdk对abi的支持比较全,可能会包含armeabi、armeabi-v7a、x86、arm64-v8a、x86_64五种abi,而你应用的其它so只支持armeabi、armeabi-v7a、x86三种,直接引用sdk的aar,会自动编译出支持5种abi的包。但是应用的其它so缺少对其它两种abi的支持,那么如果应用运行于arm64-v8a、x86_64为首选abi的设备上时,就会crash了,所以我们需要在我们的app中配置 abiFilter 配置,来避免一些未知的错误文章来源:https://www.toymoban.com/news/detail-473570.html
//过滤x86的so库
ndk {
abiFilters 'armeabi', 'armeabi-v7a', 'arm64-v8a'
}
这样配置会将armeabi,armeabi-v71,arm64-v8a这3个包下的so库都打包到一个apk,而不像splits会每一个包打一个apk.文章来源地址https://www.toymoban.com/news/detail-473570.html
到了这里,关于Android中arm64-v8a、armeabi-v7a、armeabi是什么?的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!