虽然说我从来不会有闲下来的时候,但是有些时候,没有一个趁手的工具是做不了很多事情的,因此工作虽忙,还是得挤出时间来整点活。
为什么会想要做这么一个工具呢,原因其实挺简单的,就是现有的工具不太好用,比如说这种场景就很常见:
反编译工具在某些代码处报告了异常,无法识别到那个地方的代码。
又或者反编译出来的代码看起来像这样:
给一个 int 类型赋值为 false,并且还尝试进行位运算等等。
对于想研究代码的人还真的是头疼啊,虽然还是有一些办法能把代码恢复出来,但是体验上并不好,也非常的麻烦。
另外,随着 Java 版本的升级,使用高版本编译得到的 Jar 包,也经常会有反编译不了的情况。
因此我想要一个更好用的反编译工具。当然了我也没有太多时间来真正进行相关的研究,只能说找一些做得比较好的来简单改改或是拼装一下。
在选型的过程中,我注意到其实 Idea 本身带的反编译工具很强,而且也是属于一个叫做 fernflower 的开源项目。一开始打算基于这个来做一些改造,但是一经尝试发现它不支持 Kotlin,反编译出来的代码是这样的:
这等于没有嘛,里面的实现代码一点都看不到,这个让我直接放弃了 fernflower,但是另一方面,我也找到了基于它的扩展项目,一个名为 quiltflower 的开源项目。
经过简单的试用,我确定了将要采用它作为基础库,它非常的强大并且完善,而且还有对反编译后的代码进行一些优化的能力,比如说上面的 int 类型错误,在这里就得到了修复:
也能够顺利的反编译出 Kotlin 的代码了:
选型完毕,后面的事情就很简单了,为它开发一个可视化的界面,来进一步简化操作,同时我也提供了其他反编译工具的代码对比,这里选择的是老牌的 JD-GUI ,这样我们可以同时得到两种反编译结果,并且对这两种结果进行相互参考。
至于说其他的,比如说整体代码包导出,在代码中的搜索功能,都是常规能力了,一应俱全。现在,我终于有了一个能在工作中真正帮助到我的东西。
记得要用 Java 17 打开哦~