使用Objection修补Android APK时重建失败的问题求助
Objection执行patchapk时APK重建失败的解决方法
核心错误原因
- 资源文件名违反Android规范:所有带
$符号的资源文件不符合aapt要求的命名规则(仅允许[a-z0-9_.]),这是导致重建失败的直接原因 - 次要警告:apktool自带的
aapt_64无法提取,默认使用PATH中的aapt版本,该警告不影响重建,可忽略或后续优化
解决步骤
1. 保留反编译文件并修改违规文件名
执行patchapk时添加--no-clean参数,保留反编译后的临时文件:
objection patchapk --source your_app.apk --no-clean
找到输出中提示的反编译临时目录(类似/tmp/tmpXXXXXX.apktemp),进入res目录,重命名所有违规文件:
- 将
drawable/$avd_hide_password__*.xml改为drawable/avd_hide_password__*.xml - 将
drawable/$avd_show_password__*.xml改为drawable/avd_show_password__*.xml - 将
drawable-v24/$ic_launcher_foreground__0.xml改为drawable-v24/ic_launcher_foreground__0.xml
2. 手动重新打包并签名
进入反编译的临时目录,执行apktool打包:
apktool b -o patched_app.apk
使用调试密钥签名(默认Android调试密钥路径为~/.android/debug.keystore,密码为android):
jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore ~/.android/debug.keystore patched_app.apk androiddebugkey
可选:用zipalign优化APK对齐:
zipalign -v 4 patched_app.apk aligned_patched_app.apk
3. 优化apktool的aapt配置(可选)
若想解决aapt_64无法提取的警告,可下载与apktool版本匹配的aapt_64二进制文件,创建/prebuilt/linux/目录并放入该文件,或修改apktool配置文件指定系统PATH中的aapt路径。
内容的提问来源于stack exchange,提问作者Wodorek
相关产品推荐
相关产品推荐

