Android ndk中abiFilters详解

Android 分为ndk { abiFilters "armeabi-v7a", "x86", 'arm64-v8a', 'x86_64' }
微信适配的是arm64-v8a(微信应该是最近才适配到arm64-v8a,以前是armeabi),
支付宝和手Q适配的是armeabi,
淘宝适配的是armeabi-v7a。

这里就可以回答前面的两个问题了。
Q1: 只适配了armeabi-v7a,那如果APP装在其他架构的手机上,如arm64-v8a上,会蹦吗?
A: 不会,但是反过来会。
因为armeabi-v7a和arm64-v8a会向下兼容:

只适配armeabi的APP可以跑在armeabi,x86,x86_64,armeabi-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种方案。具体选哪一种就看自己的考量了,以性能换兼容就arm64-v8,以兼容换性能armeabi,二者稍微平衡一点的就armeabi-v7a。google play支持上传多个apk
目前来说,大多数的大厂APP用的都是armeabi或armeabi-v7a,只有像微信这种牛逼的APP,为了追求性能和用户体验,放弃了少部分设备,这也说得通吧,毕竟微信也不在乎苍蝇那点肉。

参考:https://juejin.cn/post/6844904148589084680
参考:https://blog.csdn.net/yearningseeker/article/details/118554430

你可能感兴趣的:(Android ndk中abiFilters详解)