简单理解
arm 架构注重的是续航能力
x86 架构注重的是性能
在目前大部分的移动设备(智能手机,平板等)和大部分的移动终端(超市消费时候刷卡的 pos 机,ATM 等)都是 arm 架构的 cpu,为什么?最重要的原因就是因为续航能力。
而大部分的台式机和笔记本电脑,则是使用 x86 架构的 CPU(Intel 的 CPU),因为这些设备更需要的是高性能的运转和高效的运算,而对续航能力不做过高要求。
Android系统目前支持的不同CPU架构
Android系统目前支持以下七种不同的CPU架构:
- ARMv5
- ARMv7 (从2010年起)
- x86 (从2011年起)
- MIPS (从2012年起)
- ARMv8
- MIPS64
- x86_64 (从2014年起)
在Android系统上,每一个CPU架构对应一个ABI:
- armeabi
- armeabi-v7a
- x86
- mips
- arm64-v8a
- mips64
- x86_64
ABI是什么?
ABI是Application Binary Interface的缩写,常表示两个程序模块之间的接口,且其中一个模块常为机器码级别的library或操作系统。它定义了函数库的调用、应用的二进制文件(尤其是.so)如何运行在相应的系统平台上等细节。
应用安装到设备时,只有该设备的CPU架构支持的最优so库才会被安装。
如:x86架构的设备支持x86、armeabi-v7a和armeabi等ABI。但优先级从高到低依次为x86、armeabi-v7a、armeabi。系统会根据此顺序寻找首个可用的最优的so库,找到则结束。
- x86设备包含ARM模拟层,能够很好地运行ARM类型的so库,但并不保证100%不发生Crash。
- 64位设备(arm64-v8a, x86_64, mips64)能够运行32位的so库。但是以32位模式运行时,会丢失专为64位优化过的性能特征(ART, WebView, Media, etc.)。
ABI比较:
mips/mips64:极少用于手机,出发点是高性能,主要用于路由器、猫。
x86/x86_64:x86架构的手机的市场占有率很低,约为1%左右。而且x86架构都包含ARM模拟层,兼容ARM类型的ABI。注意,模拟器为x86架构。
arm64-v8a:64位ARM架构。可用32位模式运行armeabi-v7a和armeabi。(所谓的ARMv8架构,就是在MIPS64架构上增加了ARMv7架构中已经拥有的的TrustZone技术、虚拟化技术及NEON advanced SIMD技术等特性,研发成的)
armeabi-v7a:主流版本AMRv7,2011年15月以后的生产的大部分Android设备都使用它。
armeabi:老版本ARMv5,不支持硬件辅助浮点运算,支持所有的 ARM* 设备。。
NDK兼容性
- NDK平台不是向后兼容(兼容过去的版本)的,而是向前兼容(兼容未来的版本)的。
- NDK编译的版本应该尽量使用较低的版本。
Android中的so库
- so库的名称可任意,如dog
- so库的文件名必须以lib开头。如libdog.so,其中lib是必要前缀,dog才是这个库的名称。