Android的abi一度曾有7个平台:armeabi、armeabi-v7a、arm64-v8a、x86、x86_64、mips、mips_64,其中arm64-v8a、x86_64、mips_64为64位CPU指令集架构,其余的为32位CPU指令集架构,这里先给出结论:armeabi-v7a和arm64-v8a。
1、armeabi是比较旧的了,2011年以后生产的机子基本上都是armeabi-v7a
2、mips和mips_64,说真的,小编还没真不知道哪款设备的CPU是用的这个,况且现在谷歌NDK 以前支持 ARMv5 (armeabi) 以及 32 位和 64 位 MIPS,但 NDK r17 已不再支持。
3、x86、x86_64好像是Intel处理器的,PC端Intel处理器很牛逼,但在移动端是Arm的天下了,机子也不多,前几年的联想、LG好像出过几款,现在都停产了。
4、armeabi-v7a可以兼容x86、mips运行的,带来的就是性能上的损耗。
5、现在的手机基本上都是64位了,且谷歌市场要求APP需要支持64位。
6、小编特意去微信官网下载APP来看了一下,竟发现微信有个通用版,还有个64位版本,估计是因为包太大了,区分开来,通用版的只有armeabi-v7a一种,而64位的只有arm64-v8a一种,如下图:


我在谷歌官网也找到如下:

为实现最佳性能,应直接针对主要 ABI 进行编译。例如,基于 ARMv5TE 的典型设备只会定义主 ABI:armeabi。相反,基于 ARMv7 的典型设备将主 ABI 定义为 armeabi-v7a,并将辅助 ABI 定义为 armeabi,因为它可以运行为每个 ABI 生成的应用原生二进制文件。

64 位设备也支持其 32 位变体。以 arm64-v8a 设备为例,该设备也可以运行 armeabi 和 armeabi-v7a 代码。但请注意,如果应用以 arm64-v8a 为目标,而非依赖于运行 armeabi-v7a 版应用的设备,则应用在 64 位设备上的性能要好得多。

许多基于 x86 的设备也可运行 armeabi-v7a 和 armeabi NDK 二进制文件。对于这些设备,主 ABI 将是 x86,辅助 ABI 是 armeabi-v7a。

总结一下在项目中的表现就是:如果项目只包含了 armeabi(之前微信的app就是只有这种,现在改成armeabi-v7a),那么在所有Android设备都可以运行; 如果项目只包含了 armeabi-v7a,除armeabi架构的设备外都可以运行; 如果项目只包含了 x86,那么armeabi架构和armeabi-v7a的Android设备是无法运行的; 如果同时包含了 armeabi, armeabi-v7a和x86,所有设备都可以运行,程序在运行的时候去加载不同平台对应的so,这是较为完美的一种解决方案,同时也会导致包变大,但是现在的x86手机很少。

综上所述:我们APP只需要armeabi-v7a和arm64-v8a这两个平台的兼容就行。

参考文献:
https://blog.csdn.net/Insomniaaaaaaa/article/details/50972565?locationNum=8
https://developer.android.com/ndk/guides/abis.html

更多相关文章

  1. Linux下添加Android设备
  2. Android(安卓)四大组件理解.
  3. 11.3、Libgdx的音频之播放PCM音频
  4. 获取Android设备的唯一识别码UUID
  5. Android测试(五)CTS测试
  6. Android省电开发 浅析
  7. Android中的自定义注解(反射实现-运行时注解)
  8. Android注册设备管理器(获取超级管理员权限)
  9. 入门: 在Windows上搭建Flutter开发环境

随机推荐

  1. 解决TextView设置跑马灯但却没有效果
  2. Android之Activity生命周期总结(一)
  3. Android中onMesure研究(2)
  4. Android APK包文件解析
  5. Android开发工程师 技能要求
  6. 【android】android 开发错误点滴积累5月
  7. Android(安卓)SlidingDrawer 抽屉效果的
  8. android 7种网络连接方式--IT蓝豹
  9. 如何去掉android 控件默认选中时的背景橘
  10. Roboletric+Retrofit2单元测试