Android ABI(应用程序二进制接口)定义了应用与设备底层系统(主要是 CPU 指令集和操作系统)之间如何交互的规范。它确保了编译好的原生代码(通常是 .so 库)能够在特定类型的硬件上正确运行。CPU 与指令集的每种组合都有专属的应用二进制接口 (ABI)。
规定了如何:
- 运行时内存存储和加载的字节顺序。Android 始终是 little-endian。
- 调用函数(参数如何传递?返回值如何返回?)
- 数据类型在内存中如何表示和排列(数据对齐?结构体填充?)
- 如何访问系统资源
- 如何处理异常
- 二进制文件的格式要求(ELF 结构、.so 文件名的约定)
主要的 Android ABI
arm64-v8a (最优先)
- 基于: ARMv8-A 架构的 64 位模式 (AArch64)。
- 设备: 2014 年后发布的中高端智能手机和平板电脑的绝对主流。性能强劲。
- 要求: Android 5.0 (Lollipop, API 21) 及以上支持。
armeabi-v7a (次优先)
- 基于: ARMv7-A 架构的 32 位 模式。
- 设备: 2010年-2018年大量生产的 Android 设备的主流。非常普及,但逐渐被 arm64-v8a 取代。
- 特点: 支持硬件浮点运算(硬件浮点指令)、Thumb-2 指令集(代码密度高)、VFP(矢量浮点单元)指令。
- 要求: Android 2.2 (Froyo, API 8) 及以上广泛支持(部分特性需要更高 API)。
x86_64
- 基于: x86-64(AMD64/Intel 64)架构的 64 位 模式。
- 设备: 少数平板电脑(如部分 Intel Atom)、基于 Android 的 Chromebook(x86 CPU)。
- 模拟器: 在 x86_64 主机系统上运行 64 位 Android 模拟器时需要。