作者:手机用户2502891303_279 | 来源:互联网 | 2023-09-07 08:23
本文只做一个简单的学习总结。答案是不会的。所以全面适配arm64-v8是迟早的事,因此新项目建议提前适配arm64-v8。注意事项需要注意的是,虽然ABI加载So会向下兼容。那
前言日常开发中经常使用第三个库。 基本的语音、视频等需要添加so库。
so库的体积一般非常大,不知道随便添加会导致apk的体积急剧增加。
本文只做一个简单的学习总结。 强烈建议您阅读文章:
为什么大型制造商的APP,如微信、支付宝(Alipay )等只适合armeabi-v7a/armeabi?
CPU体系结构的Android目前支持七种类型的应用程序二进制接口(abis ) :
mips、mips64、X86、x8664、ARM64-v8a、ARMeabi、ARMeabi-v7a CPU体系结构是ARM64-v8a第8代arm,64位的当前主流版本与arm兼容的so库的1%以下的mips64/mipsNDK r17很少用于移动电话,x86_64/X86 :可以忽略体系结构的移动电话包括英特尔提供的称为Hootel的移动电话
怎么选择? 看看大型制造商的APP如何选择so库:
Appcpu微信arm64-v8a支付宝(Alipay ) armeabiQQarmeabi手机淘宝armeabi-v7a有趣的是,这四种APP都只适应一种Cpu架构。
上面的这些APP只支持一种CPU体系结构。 例如,仅支持armeabi-v7a。 如果arm64-v8a等其他体系结构的手机上有APP,会崩溃吗?
答案是否定的。 由于armeabi-v7a和arm64-v8a向后兼容,因此仅支持armeabi的APP在armeabi、x86、x86_64、armewabi-v7a和arm64-v8中仅支持armeabi-v7a 我明白。
匹配方案综合上述市场占有和大型工厂的匹配方案来看,只要适合arm体系结构即可。 即,armeabi、armewabi-v7a、arm64-v8这三种选择。
1 .仅适用于方案armeabi的好处:基本上适用于所有CPU架构。 缺点(不包括已废除的mips和mips_64 ) :低性能等同于大多数移动电话需要辅助ABI或动态转码来兼容。 方案2 )与仅适用于方案armeabi-v7a相同的方案,但仅筛掉了一部分旧的,在性能和兼容性之间取得平衡3 .方案:仅适合于arm64-v8的优点:性能放弃部分旧设备用户的Google Play,从2019年8月开始,将APP与arm64-v8a匹配,并逐渐淘汰32位armeabi-v7a
因此,全面符合arm64-v8是迟早的事,因此建议在新项目中尽早符合arm64-v8。
我们要不放弃旧设备用户,也要保证性能,只能牺牲apk的体积。
ndk { abiFilters 'armeabi ',' arm64-v8a' }可以使用abiFilters指定app命中哪个Cpu体系结构的so库。 如果不指定,将被忽略。
注意事项是,ABI负载So向后兼容。 但是,如果您的APP同时存在两种体系结构,如:'armeabi '和' arm64-v8a '。 不同Cpu体系结构的手机只需加载相应的SO库,就不再向后兼容。 例如,a.so存在于armeabi中,而不存在于arm64-v8a中。 那么,arm64-v8a手机加载a.so库时会崩溃。 因此,必须同时将每个So库添加到每个架构中。 armeabi-v7a和armeabi都适用于32位CPU体系结构,因此理论上对于他们的So库是完全相同的。 也就是说,如果项目仅支持armeabi体系结构,但第三方框架仅提供armeabi-v7a库,则可以直接使用它。 但是,arm64-v8a为64位,因此无法通用。 一些无人维护的第三方库可能年久失修,没有arm64-v8a体系结构的So库。 此时,考虑是否符合arm64-v8a体系结构,或者是否使用其他库来代替。 后记性能兼容性是否兼容? 除了适合所有的CPU体系结构之外,还不能兼顾性能和兼容性吗? 其实谷歌早就想好了。
您可以轻松实现avisplet、分包和实现,并在gradle中添加以下配置:
安卓{ . splits {//configuresmultipleapksbasedonabi.ABI {//enablesbuildingmultipleapksperabi.enable true/by defi souse reset (andincludetospecifythatweonly//wantapksforx 86 andx 86 _ 64.//resetsthelistofabisthadleshouldcreateapksfforx specifiesalistofabisthatgradleshouldcreateapksfor.include ' x86 '、' x86_64 '、' arm64-v8a '、' armeabi ', ' arme ABI-v7a '//specifiesthatwedonotwanttoalsogenerateauniversalapkthatincludesallabis.universalapkfalse }是各自的CPU
这样,在确保性能的同时,xbdhs可以完美兼容,而无需添加APK的大小。 因为可以在所有体系结构中单独创建包,所以一举获得了很多好处。
Google Play支持在多个不同平台上上传APK,并且可以根据CPU体系结构下载不同的软件包。
但是,很遗憾,国内的APP应用商店目前不支持! 所以请看23333
见3https://MP.weixin.QQ.com/s/jnzpgarfqt5ul K9 thwmagg