APKtool重编译APK报错:写入指令偏移0x2时出错求助
解决APKtool重编译时"Unsigned short value out of range"错误的方法
错误原因
该错误源于Dex格式限制:部分指令的操作数采用无符号短整型(最大值为65535),而编译Landroidx/annotation/InspectableProperty$ValueType类的values()方法时,生成的数值(65554)超出了这个范围,大概率是反编译后的smali代码出现了常量索引或偏移量异常。
具体修复步骤
- 修复异常smali类
- 找到反编译目录下的
smali/androidx/annotation/InspectableProperty$ValueType.smali文件 - 打开文件定位到
values()方法代码块,对比原始APK中该类的字节码(可通过jadx等工具查看),修正smali中的错误指令或常量索引;若自行修正困难,直接从原始APK中提取该类的smali代码替换当前文件(注意保留自己的其他修改)
- 找到反编译目录下的
- 升级APKtool版本
当前使用的APKtool 2.6.1存在部分Dex特性兼容问题,升级到最新稳定版(如2.9.0及以上)后重新编译,新版本通常已修复这类数值范围相关的bug - 改用传统AAPT编译
编译时移除--use-aapt2参数,避免AAPT2导致的数值计算异常,修改后的编译命令示例:java.exe -jar "你的apktool路径" b -f -o "输出APK路径" "反编译目录" - 排查自定义修改
确认自己的少量修改是否引入了过长常量、过多局部变量,或是改动了注解相关逻辑,这些操作可能间接影响目标类的编译。可先回退修改测试能否正常编译,逐步定位问题点
内容的提问来源于stack exchange,提问作者yahia
相关产品推荐
相关产品推荐

