ABI 架构与 CPU 指令集对照表
CPU 支持的 ABI 集合
| CPU 架构 | 原生 ABI | 可兼容运行 |
|---|---|---|
| ARMv5 | armeabi | — |
| ARMv6 | armeabi | — |
| ARMv7 | armeabi-v7a | armeabi |
| ARMv8 | arm64-v8a | armeabi-v7a, armeabi |
| ARMv9 | arm64-v9a, arm64-v8a | armeabi-v7a, armeabi |
| x86 | x86 | — |
| x86_64 | x86_64 | x86 |
安装时的拷贝规则
当 APK 被安装到设备时,系统的包管理器会:
- 检查设备支持的所有 ABI,按优先级排序
- 找到 APK lib/ 目录中最高优先级的匹配项
- 将该目录下的所有 .so 文件拷贝到
/data/app/[包名]/lib/
关键点:每个架构目录必须完整包含该 App 用到的所有 .so 文件。如果某个 APK 的 arm64-v8a 目录缺少某个关键 .so,就算其他目录里有也没用——系统会认为这个架构不完整,可能降级到更低级架构。
开发者常见错误
- 只放部分 64 位 .so:以为只要放了 arm64-v8a 目录就能表示支持 64 位,但实际上每个架构目录必须自洽
- 64 位 .so 没对齐:未做 16KB 对齐的 64 位原生库在 Android 15+ 上可能加载失败
- 混淆器误删:某些构建配置会在 Release 构建时意外移除 arm64-v8a 目录
LibChecker 可以帮助开发者快速发现这些问题——只要看到 64 位 App 却跑在 32 位模式,很可能就是上述原因之一。