文章目录

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,为了追求性能和用户体验,放弃了少部分设备