我想向应用程序添加一些内容,因此我在 smali 文件中添加了一些行(使用 apktools 反编译 apk),然后重新打包并在真实设备上运行它。 它显示
- 10121 10211 E AndroidRuntime:os.json.JSONObject a.b.a.a.a.i.m(android.context.Context, java.lang.String) 失败 验证: os.json.JSONObject a.b.a.a.a.i.m(android.context.Context, java.lang.String): [0x161] v0 的类型为冲突,但符合预期 引用:java.lang.AutoCloseable('a.b.a.a.a.i' 的声明 /data/app/xxxx/xxxxx/base.apk)
那么[0x161]指的是什么?是行号吗? 0x161 = 十进制 353。于是我检查了smali代码,但是smali中函数a.b.a.a.a.i.m只有不到353行,所以没有353行,无法定位错误。
这个函数在java中也没有足够的行数(我使用jadx反编译生成的apk)。
那么在哪种类型的文件中我可以找到文件第353行的问题呢?我是否应该将 apk 转换为其他格式以找到第 353 行来解决错误?提前致谢。
最佳答案
0x161
应该是从方法开始的相对偏移/地址(以字节为单位)。
在 Jadx 中,打开您感兴趣的类的 Smali
选项卡,然后从 smali 代码面板的上下文菜单中选择显示 Dalvik 字节码
以查看偏移量。您要查找的偏移量应显示在第二个灰色列中(示例屏幕截图中带有红色边框的列)。
该错误应该是由于在v0
中放置了错误的对象引用引起的。
关于java - Android中修改APK的部分smali代码后如何定位注册问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70926990/