You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

重新编译修改的Android应用无法在Android 11安装,报错-124求解决工具

Android 11 下APK安装错误(-124)的解决方法

问题描述

反编译现有Android应用并修改后,重新编译签名的APK无法在Android 11上安装,模拟器返回错误:

Error code: '-124', message='-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'

我使用的手动操作流程如下:

手动流程:
步骤1:生成密钥库(仅需一次)
需要生成一个密钥库,用于给未签名的APK签名。使用JDK提供的keytool,路径为%JAVA_HOME%/bin/

keytool -genkey -v -keystore my.keystore -keyalg RSA -keysize 2048 -validity 10000 -alias app
步骤2或4:Zipalign对齐
zipalign是Android SDK提供的工具,示例路径为%ANDROID_HOME%/sdk/build-tools/24.0.2/,如果要上传APK到应用商店,这是必填的优化步骤。

zipalign -p 4 my.apk my-aligned.apk
注意:使用旧版jarsigner时,需要在签名**之后**执行zipalign;使用新版apksigner时,要在签名**之前**执行(确实容易搞混)。apksigner会保留APK的对齐和压缩状态(jarsigner做不到),所以先执行zipalign再用apksigner是可行的。

可以用以下命令验证对齐状态:

zipalign -c 4 my-aligned.apk
步骤3:签名与验证
使用build-tools 24.0.3及更高版本
Android 7.0引入了APK签名方案v2,这是一种新的应用签名方案,能加快应用安装速度,还能更好地防止APK被未经授权篡改。因此谷歌推出了自己的签名工具apksigner,脚本文件位于%ANDROID_HOME%/sdk/build-tools/24.0.3/(jar包在/lib子目录下),使用方式如下:

apksigner sign --ks-key-alias alias_name --ks my.keystore my-app.apk
验证签名的命令:

apksigner verify my-app.apk

使用build-tools 24.0.2及更低版本
使用jarsigner,它和keytool一样属于JDK工具,路径为%JAVA_HOME%/bin/,使用方式:

jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore my.keystore my-app.apk my_alias_name
验证签名的命令:

jarsigner -verify -verbose my_application.apk

解决方法

该错误是Android 11(API 30+)的强制规则:目标版本为R及以上的APK,其resources.arsc必须以未压缩状态存储,且满足4字节对齐。需通过以下工具和步骤修复:

1. 使用适配Android 11的Build Tools

确保你的Android SDK Build Tools版本在30.0.0及以上,旧版本工具不支持Android 11的APK格式要求。

2. 正确执行Zipalign对齐(核心步骤)

如果你使用apksigner(推荐,build-tools 24.0.3+):

  • 先执行zipalign时必须携带-p参数(保留未压缩文件的对齐属性),命令:
    zipalign -p 4 未签名APK路径 对齐后APK路径
    
  • 再用apksigner签名,它会完整保留resources.arsc的未压缩状态和4字节对齐属性。

3. 验证APK状态

使用aapt2工具(位于对应版本build-tools目录下)检查resources.arsc的状态:

aapt2 dump badging 你的APK路径 | findstr resources.arsc  # Windows
# 或
aapt2 dump badging 你的APK路径 | grep -A 2 resources.arsc  # Linux/macOS

确认输出包含compressed: false和alignment: 4。

4. 弃用jarsigner,改用apksigner

旧版jarsigner会重新压缩APK内文件,破坏resources.arsc的未压缩状态,建议全程使用apksigner完成签名操作。

内容的提问来源于stack exchange,提问作者Juhász Tamás

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 07:50:37