目前很多应用市场,推荐32位包和64位包分开上传,这样包包体积更小。魅族要求只能上传64位包。安卓默认打多包是universalApk,包含64和32位的so 文件。
打多包的方式很多,可以通过变体等,但最方便的是使用splits 配置。
更新Gradle配置: 打开你的React Native项目中的 android/app/build.gradle
文件。在 defaultConfig
部分中,添加以下配置:
splits { abi { enable true reset() include 'arm64-v8a' universalApk false // 是否打universalApk,改为true 就一次打2个 } }
Android ABI
不同的 Android 设备使用不同的 CPU,而不同的 CPU 支持不同的指令集。CPU 与指令集的每种组合都有专属的应用二进制接口 (ABI)。
Android 设备支持的 ABI 类型如下:
ABI | 支持的指令集 | 备注 |
---|---|---|
armeabi-v7a | armeabi Thumb-2 VFPv3-D16 | 与 ARMv5/v6 设备不兼容。 适用于基于 32 位 ARM 的 CPU,逐渐被弃用。 |
arm64-v8a | AArch64 | 适用于基于 ARMv8-A 的 CPU,支持 64 位 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 | 一般是模拟器。 |
这里主要看 arm 架构的,新的架构能够兼容旧的 abi 对应的 so,例如 arm64-v8a 架构的 CPU 能够运行 armeabi-v7a 架构的
so,反过来不行,这就是为什么现在很多 APP 只包含 armeabi-v7a 的包却能够在最新的 CPU 上运行。如果以后的 CPU 不再兼容旧的架构了的话,现在只包含 armeabi 或者 armeabi-v7a 架构的 APP 就不能再运行了。
安卓官方文档https://developer.android.com/build/configure-apk-splits?hl=zh-cn