安卓apk加固后,Android11+无法安装

问题

正常打包APK,可以在Android11+上正常安装。

  1. 为了安全使用加固软件对apk进行加固。
  2. 加固后对APK重新签名。
    进过上述两步后,Android11+无法安装apk,通过adb命令安装测试,安装失败,报出如下错误:
bash 复制代码
Failure [-124: Failed parse during installPackageLI: Targeting R+ (version 30 and above) requires the resources.arsc of installed APKs to be stored uncompressed and aligned on a 4-byte boundary]

翻译一下就是:如果以 Android 11(API 级别 30)或更高版本为目标平台的应用包含压缩的 resources.arsc 文件或者如果此文件未按 4 字节边界对齐,应用将无法安装。

解决办法

方案一:

降级targetSdkVersion版本到30以下(我在项目中降低了这个版本后项目报错了,所以放弃这个方法)

方案二:

根据错误提示,检查一下加固后的APK 文件中的 resources.arsc 文件是否已经按照 Android 11(API 级别 30)及更高版本的要求进行了对齐和未压缩。

(zipalign 工具在 Android SDK 的 Build-Tools 文件夹下)

bash 复制代码
//确认对齐结果命令,,4代表对齐为4个字节
zipalign -c -v 4 output_unsigned.apk

如果输出Verification FAILED 说明APK不符合要求

如果输出Verification succesful 说明APK符合要求

到这里,我以为我加固后的APK是不符合要求的,但是没想到控制台输出的结果是Verification succesful。那么问题就出现在签名后的APK上了。

这里我签名的软件使用的是梆梆加固提供的,果然签名过后,在执行上面的命令,控制台输出的就是Verification FAILED ,太坑人了。

下面来说一下具体操作

  1. 对APK进行4字节对齐
bash 复制代码
//对齐操作命令,4代表对齐为4个字节
zipalign -p -f -v 4 input.apk output_unsigned.apk
  1. 对齐后进行验证
bash 复制代码
//确认对齐结果命令,,4代表对齐为4个字节
zipalign -c -v 4 output_unsigned.apk
  1. 使用apksigner进行签名
bash 复制代码
apksigner sign --ks your-key.jks --out output_signed.apk output_unsigned.apk

这里不能使用 jarsigner, 因为jarsigner只能进行V1签名,而V2签名是SDK>=24时才支持的,所以使用jarsigner签名后,安装时会报错:INSTALL_PARSE_FAILED_NO_CERTIFICATES

补充V1、V2签名

  • v1 方案(JAR签名)
    v1 方案是较老的签名方式,基于 JAR 签名。它主要保护 APK 的某些部分,例如 ZIP 元数据。然而,v1 签名存在两个主要问题:
  1. 签名校验过程较慢,因为它需要针对 APK 中的所有文件进行校验,这会延长老设备的安装时间。
  2. 仅针对 ZIP 条目进行校验,不包括 META-INF 文件。这可能导致安全风险,因为可以移动条目顺序或重新压缩 APK,从而修改 META-INF 文件下的内容。
  • v2 方案(APK签名方案 v2)
  1. v2 方案是 Android 7.0 (Nougat) 中引入的。它是一种全文件签名方案,能够发现对 APK 受保护部分进行的所有更改,有助于加快验证速度并增强完整性保证。
  2. 使用 APK 签名方案 v2 进行签名时,会在 APK 文件中插入一个 APK 签名分块,该分块位于"ZIP 中央目录"部分之前并紧邻该部分。在 APK 签名分块内,v2 签名和签名者身份信息会存储在 APK 签名方案 v2 分块中。
  3. v2 签名的优点很明显:签名更安全(不能修改压缩包),签名验证时间更短(不需要解压验证),因而安装速度加快。
相关推荐
千里马学框架3 天前
一起学 Android 14:ShellTransition 屏幕旋转过程深度剖析
android·智能手机·性能优化·framework·性能·屏幕旋转·rotation
美狐美颜SDK开放平台3 天前
开发直播APP时如何接入视频美颜SDK?开发流程与注意事项
android·人工智能·计算机视觉·音视频·直播美颜sdk
AFinalStone3 天前
Android7 SystemUI源码解析(七)Keyguard锁屏模块深度解析
android·systemui
致远ccc3 天前
Google Play 上架前如何测试 App?多国家 Android 环境测试
android·app测试·googleplay·多国家应用测试
ttyyttemo3 天前
Kotlin 协程中的 Job 结构化并发与取消
android
sun0077003 天前
tbox 4g/5g切换,导致wan ip 改变,导致车机旧网络不可用。需要重启车机才行
android
其实防守也摸鱼3 天前
内网穿透与反向代理:原理、工具与实战指南
android·大数据·运维·安全·网络安全·自动化·渗透
AFinalStone3 天前
Android7 SystemUI 源码解析(四)NavigationBar 导航栏与 SystemBars
android·systemui
JMchen3 天前
属性动画原理与高级动画实现
android·kotlin·canvas
AFinalStone3 天前
Android7 SystemUI 源码解析(二)启动流程深度解析
android·systemui