Android反编译将Smile代码转jar包时出现错误,java.lang.RuntimeException: can not merge I and Z

在我们使用dex2jar-2.0工具 将smile代码转换成jar包时,可能会出现以下错误:
java.lang.RuntimeException: can not merge I and Z,这是因为我们使用的是旧版的dex2jar

通过查看日志文件可以知道,这是com.googlecode.dex2jar.ir.TypeClass的merge问题。查看dex2jar源码后,可以确定这是int和boolean互相转换问题。在java里面,这两个类型是不能转换的。

问题可能来源:别人打包的代码并不一定使用java编写(kotlin)或者采用新的dx(d8)版本,这时编译的代码可能引入新的指令(不兼容java)。当然,有些是混淆目的(开源的话一般就不是啦)。

Android反编译将Smile代码转jar包时出现错误,java.lang.RuntimeException: can not merge I and Z_第1张图片

我们可以通过重新编译一个dex2jar来解决这个问题

下边是已经编译好的,欢迎下载:

下载地址:https://download.csdn.net/download/JiYaRuo/12570281

下载完成之后,解压,如下图所示

Android反编译将Smile代码转jar包时出现错误,java.lang.RuntimeException: can not merge I and Z_第2张图片

然后把lib下的所有文件,替换掉之前dex2jar-2.0下的lib文件,然后打开cmd命令

首先定位到dex2jar-2.0文件所在位置:cd C:\Users\Administrator\Desktop\jyr\android反编译三件套_\android反编译三件套\smali2jar\smali2jar\dex2jar-2.0

然后输入:d2j-dex2jar classes.dex,

就可以生成的classes-dex2jar.jar文件,就是我们需要的jar包啦

你可能感兴趣的:(开发Bug记录)