俗语俗话 --- 什么是ABI API
API是应用程序编程接口,通俗讲就是应用程序之间定义的接口,暴露在外部提供调用的地址。
ABI是应用程序二进制接口,是应用程序和底层cpu之间定义的接口,就是指令集。
ABI(Application Binary Interface)
ABI 是 二进制层面的接口规范,它定义了:
-
CPU 指令集(如 ARMv8、x86_64)
-
函数调用约定(参数如何传递,返回值如何存储)
-
系统调用方式(如何与操作系统交互)
-
数据类型大小和对齐(如
int
是 4 字节) -
异常处理机制(如 C++ 的异常如何传递)
在 Android 开发中的 ABI:
Android 支持多种 CPU 架构,每种架构有自己的 ABI:
ABI | CPU 架构 | 说明 |
---|---|---|
armeabi-v7a |
ARM 32-bit | 旧版 ARM,支持浮点运算 |
arm64-v8a |
ARM 64-bit | 现代 ARM,性能更好 |
x86 |
Intel 32-bit | 模拟器/旧设备使用 |
x86_64 |
Intel 64-bit | 现代 x86 CPU |
mips / mips64 |
MIPS 架构 | 已废弃 |
ABI 兼容性问题:
-
如果 App 只提供
arm64-v8a
库,则在armeabi-v7a
设备上可能崩溃(除非启用兼容模式)。 -
NDK 编译时需指定目标 ABI(如
-DANDROID_ABI=arm64-v8a
)。
API(Application Programming Interface)
API 是 源代码层面的接口规范,它定义了:
-
可调用的函数/方法(如
Activity.onCreate()
) -
数据结构(如
Intent
、Bundle
) -
协议/通信方式(如 REST API、gRPC)
-
编程语言绑定(如 Java/Kotlin 的 Android SDK)
在 Android 开发中的 API:
-
Android SDK API 级别(如
API 34 = Android 14
)-
不同版本提供不同的功能(如
API 21
引入 Material Design)。
-
-
Java/Kotlin 标准库 API(如
List
、String
) -
NDK API(如
libc
、OpenGL ES
)
API 兼容性问题:
-
如果调用
API 28
的新方法,但在API 21
设备上运行,会抛出NoSuchMethodError
。 -
通常用
@RequiresApi
或Build.VERSION.SDK_INT
做版本检查。