记录一下解决打包apk无法安装的问题:
1.升级了某个SDK版本,老项目可以正常debug,android studio打包也能安装。但是项目是Jenkins打包发布的,Jenkins打包出来的包无法安装,提示:Failure [INSTALL_FAILED_INVALID_APK: Failed to extract native libraries, res=-2]
2.处理方式:
分析是so文件的问题。
a:Jenkins打包的签名文件apksigner.jar,版本过低,升级到35.0.1以上可以解决
不同版本的 apksigner 使用不同的签名方案:
老版本 apksigner
V1 签名(JAR 签名)+ V2 签名
新版本 apksigner(35.0.1)
V1 + V2 + V3 + V4 签名,更完善的文件处理
b:AndroidManifest.xml需要声明:android:extractNativeLibs="true"属性
出现这个问题的原因:
项目中为了削减包体积,添加了压缩文件
andResGuard 下打开了 use7zip = true
所以还有一个处理方式就是把use7zip关掉
use7zip = false
至于为什么升级签名版本就可以了:
新版本 apksigner(35.0.1)的关键改进
老版本 apksigner
V1 签名(JAR 签名)+ V2 签名
新版本 apksigner(35.0.1)
V1 + V2 + V3 + V4 签名,更完善的文件处理
1.更智能的文件对齐处理:
老版本 apksigner
检查 .so 文件对齐 → 发现问题 → 拒绝签名
新版本 apksigner
检查 .so 文件对齐 → 发现问题 → 自动修复 → 继续签名
2.改进的 ResGuard 兼容性:
--- 老版本对 ResGuard 重新打包的 APK 处理有限制
--- 新版本增强了对第三方工具修改过的 APK 的兼容性
3.更好的压缩状态检测:
新版本能够:
- 检测文件实际压缩状态
- 在必要时调整文件存储方式
- 确保 native libraries 符合 Android 系统要求