extractNativeLibs属性解刨
extractNativeLibs属性的核心作用
- 压缩优化:设为
true
时,gradle会对.so文件进行压缩,显著减小APK体积(平均可达30%),但会增加安装时的解压时间。 - 内存映射:设为
false
时,系统直接加载未压缩的.so文件到内存,减少磁盘空间占用并提升加载速度,但要求.so文件需按4KB对齐存储。
默认配置与优化建议
- 默认规则:当minSdkVersion<23或Gradle插件版本<3.6.0时默认为
true
,否则为false
- 架构过滤:通过
abiFilters
指定支持架构(如arm64-v8a)减少冗余.so文件。 - 兼容性配置:出现
INSTALL_FAILED_INVALID_APK
错误时需强制设为true
常见问题与解决方案
- 安装失败:安装报错
Failed to extract native libraries
时,需在manifest添加android:extractNativeLibs="true"
- 逆向工程:重打包APK时应保持与原包相同的extractNativeLibs值,否则可能导致加载异常。4
- 版本适配:Android 11要求targetSDK≥30的预装APK必须使用未压缩.so文件。
常见出现报错
Failure [INSTALL_FAILED_INVALID_APK: Failed to extract native libraries, res=-2]
添加android:extractNativeLibs="true",一般可解决。