Android的.so文件,32位处理器与64位处理器

一、ABI 是什么
ABI 是 Application Binary Interface 的缩写。

不同 Android 手机使用不同的 CPU,因此支持不同的指令集。CPU 与指令集的每种组合都有其自己的应用二进制界面(或 ABI)。 ABI 可以非常精确地定义应用的机器代码在运行时如何与系统交互。 您必须为应用要使用的每个 CPU 架构指定 ABI。

典型的 ABI 包含以下信息:

机器代码应使用的 CPU 指令集。
运行时内存存储和加载的字节顺序。
可执行二进制文件(例如程序和共享库)的格式,以及它们支持的内容类型。
用于解析内容与系统之间数据的各种约定。这些约定包括对齐限制,以及系统如何使用堆栈和在调用函数时注册。
运行时可用于机器代码的函数符号列表 - 通常来自非常具体的库集。
在 gardle 中可以通过 abiFilters 来指定我们需要的 ABI:

abiFilters "armeabi", "armeabi-v7a" , "arm64-v8a", "x86", "x86_64", "mips", "mips64"

  1. armeabiv-v7a: 第7代及以上的 ARM 处理器。2011年15月以后的生产的大部分Android设备都使用它.
  2. arm64-v8a: 第8代、64位ARM处理器,很少设备,三星 Galaxy S6是其中之一。
  3. armeabi: 第5代、第6代的ARM处理器,早期的手机用的比较多。
  4. x86: 平板、模拟器用得比较多。
  5. x86_64: 64位的平板。

 

支持的 ABI

每个 ABI 支持一个或多个指令集。表 1 概述了每个 ABI 支持的指令集。Android系统目前支持以下七种不同的CPU架构:ARMv5,ARMv7 (从2010年起),x86 (从2011年起),MIPS (从2012年起),ARMv8,MIPS64和x86_64 (从2014年起),每一种都关联着一个相应的ABI。

  • 很多设备都支持多于一种的ABI。
  • 当一个应用安装在设备上,只有该设备支持的CPU架构对应的.so文件会被安装

表 1. ABI 和支持的指令集。

ABI 支持的指令集 备注
armeabi
  • ARMV5TE 和更高版本
  • Thumb-1
在 r16 中已弃用。在 r17 中已移除。无硬浮点数。
armeabi-v7a
  • armeabi
  • Thumb-2
  • VFPv3-D16
  • 其他(可选)
与 ARMv5、ARMv6 设备不兼容。
arm64-v8a
  • AArch64
x86
  • x86 (IA-32)
  • MMX
  • SSE/2/3
  • SSSE3
不支持 MOVBE 或 SSE4。
x86_64
  • x86-64
  • MMX
  • SSE/2/3
  • SSSE3
  • SSE4.1、4.2
  • POPCNT

注意:NDK 以前支持 32 位和 64 位 MIPS,但这项支持已在 NDK r17 中移除。

https://developer.android.com/ndk/guides/abis

可以通过Build.SUPPORTED_ABIS得到根据偏好排序的设备支持的ABI列表。但你不应该从你的应用程序中读取它,因为Andr

你可能感兴趣的:(Android开发)