Apktool反编译正常但无法重编译,求APK权限修改及编译修复方案
解决APK重新编译失败问题(删除Manifest权限场景)
问题原因
从编译日志看,失败和你修改AndroidManifest无关,是资源文件解析错误导致的:
/res/values/styles.xml第2669行:系统期望枚举类型,但反编译后变成了原始字符串2/res/values/styles.xml第4305行:系统期望维度类型,但反编译后变成了原始字符串-1
这是Apktool对部分特殊格式APK反编译时的兼容性问题,资源值类型被错误转换,导致资源链接阶段失败。
修复步骤
1. 修正styles.xml错误
- 打开
/home/pixel/apk/res/values/styles.xml,定位到第2669行:
把字符串2替换为对应属性的枚举值,比如如果是android:gravity相关,可参考同文件内同属性的合法值(如center_vertical);若不确定,也可以尝试用@integer/引用或对应枚举的常量名。 - 定位到第4305行:
把字符串-1替换为维度类型的合法值,比如match_parent(对应-1的布局常量)或-1dp(如果是尺寸值)。
2. 重新编译
修复后执行编译命令:
apktool b ./
替代工具推荐(仅修改Manifest权限场景)
如果只想删除Manifest里的权限,没必要全量反编译/编译,推荐以下工具:
- APK Editor Studio:可视化工具,直接加载APK后编辑Manifest,修改后一键打包,无需处理资源编译问题。
- MT管理器:可通过Wine在Linux Mint运行,支持直接打开APK并编辑内部的AndroidManifest.xml,操作简洁。
- aapt2命令行工具:
- 提取Manifest到文本:
aapt dump xmltree your.apk AndroidManifest.xml > AndroidManifest.txt - 编辑txt文件删除目标权限,再编译为二进制Manifest:
aapt2 compile --manifest AndroidManifest.txt -o AndroidManifest.xml - 用zip工具替换APK内的原Manifest,最后重新签名APK。
- 提取Manifest到文本:
内容的提问来源于stack exchange,提问作者Pixel
相关产品推荐
相关产品推荐

