GKLBB

当你经历了暴风雨,你也就成为了暴风雨

导航

俗语俗话 --- 什么是ABI API

API是应用程序编程接口,通俗讲就是应用程序之间定义的接口,暴露在外部提供调用的地址。

ABI是应用程序二进制接口,是应用程序和底层cpu之间定义的接口,就是指令集。

 

ABI(Application Binary Interface)

ABI 是 二进制层面的接口规范,它定义了:

  1. CPU 指令集(如 ARMv8、x86_64)

  2. 函数调用约定(参数如何传递,返回值如何存储)

  3. 系统调用方式(如何与操作系统交互)

  4. 数据类型大小和对齐(如 int 是 4 字节)

  5. 异常处理机制(如 C++ 的异常如何传递)

在 Android 开发中的 ABI:
Android 支持多种 CPU 架构,每种架构有自己的 ABI:

ABICPU 架构说明
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 是 源代码层面的接口规范,它定义了:

  1. 可调用的函数/方法(如 Activity.onCreate()

  2. 数据结构(如 IntentBundle

  3. 协议/通信方式(如 REST API、gRPC)

  4. 编程语言绑定(如 Java/Kotlin 的 Android SDK)

在 Android 开发中的 API:

  • Android SDK API 级别(如 API 34 = Android 14

    • 不同版本提供不同的功能(如 API 21 引入 Material Design)。

  • Java/Kotlin 标准库 API(如 ListString

  • NDK API(如 libcOpenGL ES

API 兼容性问题:

    • 如果调用 API 28 的新方法,但在 API 21 设备上运行,会抛出 NoSuchMethodError

    • 通常用 @RequiresApi 或 Build.VERSION.SDK_INT 做版本检查。

posted on 2025-08-09 16:07  GKLBB  阅读(34)  评论(0)    收藏  举报