文章目录
Android目前支持以下7种ABIs
mips, mips64, X86, X86–64, arm64-v8a, armeabi, armeabi-v7a
abifilters 为我们提供了选择适配指定CPU架构的能力,只需要在app下的 build.gradle添加如下配置:
android {
defaultConfig {
ndk {
abiFilters 'arm64-v8a', 'x86_64'
}
}
}
大厂如何适配的
默认情况下,为了使APP有更好的兼容性,我们使用 Android Studio 或者命令打包时,会默认支持所有的架构,但相应的APK size 会疯狂的增大,那么大厂是如何适配的?
微信适配的是arm64-v8a
(微信应该是最近才适配到arm64-v8a
,以前是armeabi
),支付宝和手Q适配的是armwabi
,淘宝适配的是armwabi-v7a
。各个APP适配的平台不太一样,但是他们有一个共同点,那就是它们只指定了一个平台
各种cpu架构市场占有率
Android 7种CPU架构在当前市场的占有率:
-
arm64-v8a
: 目前主流版本 -
armeabi-v7a
: 一些老旧的手机 -
x86
/x86_64
:x86
架构的手机都会包含由 Intel 提供的称为 Houdini 的指令集动态转码工具,实现对 arm .so 的兼容,再考虑x86
1% 以下的市场占有率,x86 相关的两个 .so 也是可以忽略的 -
armeabi
/mips
/mips64
: NDK 以前支持 ARMv5 (armeabi) 以及 32 位和 64 位 MIPS,但 NDK r17 已不再支持,极少用于手机可以忽。
目前手机市场上,x86 / x86_64/armeabi/mips / mips6
的架构,基本可以不不考虑了,它们的占有量应很少很少了,arm64-v8a
作为最新一代架构,应该是目前的主流,armeabi-v7a
只存在少部分老旧手机
适配方案
我们项目中该如何适配呢?
- 只适配
armeabi
的APP可以跑在armeabi
,x86
,x86_64
,armwabi-v7a
,arm64-v8
上 - 只适配
armwabi-v7a
可以运行在armwabi-v7a
和arm64-v8a
- 只适配
arm64-v8a
可以运行在arm64-v8a
上
所以给出如下几个方案:
方案一:只适配armeabi
优点:基本上适配了全部CPU架构(除了淘汰的mips和mips_64)
缺点:性能低,相当于在绝大多数手机上都是需要辅助ABI或动态转码来兼容
方案二:只适配 armwabi-v7a
同理方案一,只是又筛掉了一部分老旧设备,在性能和兼容二者中比较平衡
方案三: 只适配 arm64-v8
优点: 性能最佳
缺点: 只能运行在arm64-v8上,要放弃部分老旧设备用户
这三种方案都是可以的,现在的大厂APP适配中,这三种都有,大部分是前2种方案。具体选哪一种就看自己的考量了,以性能换兼容就arm64-v8
,以兼容换性能armeabi
,二者稍微平衡一点的就armwabi-v7a
。
目前来说,大多数的大厂APP用的都是armeabi
或armwabi-v7a
,只有像微信这种牛逼的APP,为了追求性能和用户体验,放弃了少部分设备