目前android支持如下7中CPU架构:
-
armeabi 第5代 ARM v5TE,使用软件浮点运算,兼容所有ARM设备,通用性强,速度慢(只支持armeabi) -
armeabi-v7a 第7代 ARM v7,使用硬件浮点运算,具有高级扩展功能(支持 armeabi 和 armeabi-v7a,目前大部分手机都是这个架构) -
arm64-v8a 第8代,64位,包含AArch32、AArch64两个执行状态对应32、64bit(支持 armeabi-v7a、armeabi 和 arm64-v8a) -
x86 intel 32位,一般用于平板(支持 armeabi(性能有所损耗) 和 x86) -
x86_64 intel 64位,一般用于平板(支持 x86 和 x86_64) -
mips 基本没见过(支持 mips) -
mips64 基本没见过(支持 mips 和 mips_64)
现状
目前手机市场上,x86 / x86_64/armeabi/mips / mips6 的架构,基本可以不不考虑了,它们的占有量应很少很少了,arm64-v8a作为最新一代架构,应该是目前的主流,armeabi-v7a只存在少部分老旧手机。
问题:只适配了armeabi-v7a,那如果APP装在其他架构的手机上,如arm64-v8a上,会蹦吗? 答:不会,但是反过来会。
所以,我们项目中该如何适配呢? 因为armeabi-v7a和arm64-v8a会向下兼容:
- 只适配armeabi的APP可以跑在armeabi,x86,x86_64,armewabi-v7a,arm64-v8上
- 只适配armeabi-v7a可以运行在armeabi-v7a和arm64-v8a
- 只适配arm64-v8a 可以运行在arm64-v8a上
方案一:只适配armeabi 优点:基本上适配了全部CPU架构(除了淘汰的mips和mips_64) 缺点:性能低,相当于在绝大多数手机上都是需要辅助ABI或动态转码来兼容
方案二:只适配 armeabi-v7a 同理方案一,只是又筛掉了一部分老旧设备,在性能和兼容二者中比较平衡
方案三: 只适配 arm64-v8 优点: 性能最佳 缺点:只能运行在arm64-v8上,要放弃部分老旧设备用户
现在的大厂APP适配中,这三种都有,大部分是前2种方案。
如何让性能与适配兼得?
splits {
abi {
reset()
enable enableSeparateBuildPerCPUArchitecture
universalApk false
include "armeabi-v7a", "x86", "arm64-v8a", "x86_64"
}
}
在项目中这样适配,然后会打出多个不同的包。 Google Play 支持上传多个APK,但是,国内的应用商店目前还不支持,以后应该也会支持。
参考资料
https://blog.csdn.net/u012400885/article/details/52923765
|