Android 的ARM架构和X86架构

ARM 106浏览


简单理解

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才是这个库的名称。