使用Apktool反编译APK后AndroidManifest.xml十六进制值致重编译失败
问题解答
为什么会出现十进制资源ID?
这些十进制数字是十六进制资源ID的十进制转换结果(比如你看到的2114715648就是0x7E0C0000的十进制形式)。出现这种情况的核心原因:
- Viber的APK大概率做了资源混淆、自定义资源打包或者加壳处理,导致Apktool无法正确解析资源ID对应的符号名称(比如
@style/XXXTheme),只能输出资源ID的原始十进制数值。 - AndroidManifest中theme、resource这类属性要求资源引用必须是符号名称或标准十六进制ID格式(
@0xXXXXXX),十进制数值不符合语法规范,因此重编译时触发兼容性报错。
修复/忽略方案(针对备份测试场景)
因为你仅需做备份测试,不关心功能可用性,以下方法都适用:
1. 手动替换为十六进制ID格式
直接修改AndroidManifest.xml中报错的行,把十进制数值改成对应的十六进制格式:
- 比如将
@2114715648替换为@0x7E0C0000 - 这种方式能让Apktool正确识别为资源ID,顺利完成重编译,生成的APK更接近原始包结构。
2. 强制编译忽略错误
使用Apktool的强制编译参数跳过错误检查:
apktool b -f viber
注:强制编译可能生成存在资源引用问题的APK,大概率无法正常安装运行,但能满足备份测试的需求。
3. 替换为通用默认资源
如果不想处理ID转换,直接把报错的属性值替换为系统通用的默认资源:
- 比如将theme属性改为
@android:style/Theme.Light - 这种方式能彻底解决编译错误,生成的APK可正常安装(但功能会缺失,仅适合测试)
内容的提问来源于stack exchange,提问作者TaihouKai
相关产品推荐
相关产品推荐

