新写的可直接编辑 Jar 包的 IDEA 插件-JarEditor

289 天前
liubsyy  liubsyy

前言

IDEA 自带的反编译插件能打开 jar 反编译 class ,遗憾的是不能编辑 class ,有的时候我们需要修改 jar 的时候还需要解压,反编译 class ,然后新建.java ,修改代码,再编译,最后打包 jar 。我敢说中间的过程你肯定不是一气呵成的,如果 jar 有依赖还要花时间去排查,打包的时候还需要注意编译 jdk 的版本,有的命令忘了的话还需要查手册,其实基本上全是体力活。

我翻遍了 IDEA 插件市场并没有找到合适的直接编辑 jar 的插件,于是我打算简单花点时间写一个这样的插件 JarEditor ,可以实现无需解压直接编辑 jar 内的文件。

功能介绍

首先 IDEA 可以反编译 jar ,在 jar 内的 class 是可以直接打开看到反编译代码的,外部文件可以通过 File->Project Structure->Libraries 添加依赖然后反编译 jar 。

使用介绍

在插件市场安装插件 JarEditor 后,可以在.class 反编译文件中看到一个切换到 Jar Editor 的 tab 页

点击 Jar Editor 后可以直接对反编译的代码进行修改,修改完之后点击 Save/Compile 会编译当前修改的 java 内容并保存,然后点击 Build Jar 即可将编译保存的 class 文件写入到 Jar 包内。

这样编辑一个 Jar 包内 class 文件一气呵成无需解压也无需去敲命令。

下面是一个流程演示例子:

JarEditor_example.gif

修改 jar 包内的资源文件也是支持的,流程和 class 文件是一样的,也是修改完要保存,然后再 Build Jar 即可。

在 jar 包的工程展示图,任意文件右键,可以看到 JarEditor 的 New 和 Delete 操作,可以新增文件和删除文件


一些机制

  • 编译依赖的 JDK 是项目工程的 JDK ,可以选择编译的 class 目标版本,默认和 jar 包的 class 版本保持一致
  • 编译 java 的时候依赖的 classpath 就是工程项目的依赖,如果依赖包找不到可以添加依赖
  • Save/Compile 会将修改的文件保存到 jar 包所在目录的 jar_edit 子目录下,Build Jar 会把会 jar_edit 目录的文件增量写入 jar ,最后再删除这个目录

总结

此 IDEA 插件 JarEditor 可无需解压直接编辑 jar 包内 class 和资源文件,感兴趣的朋友可以去试试。

源码地址:https://github.com/Liubsyy/JarEditor

依赖 IDEA 最低版本为 IDEA2020.3 ,大于等于这个版本均可安装使用。

欢迎交流!

JarEditor_add_delete.png
JarEditor_main.png
2568 次点击
所在节点    分享创造
23 条回复
likeme
241 天前
试了下很好用。但是面对一些混淆过的 jar 包就不行了,貌似需要重新编译,由于混淆包的一些 class/方法名称混淆显示成乱七八糟的符号导致无法编译。

挺奇怪的,用 javassist 可以改,但是 javassist 改 class 真的好麻烦,希望可以优化一下
liubsyy
178 天前
@likeme 集成了 javassist ,可以对字段和函数进行增删改,使用非常简单,比较适合修改混淆 jar
likeme
177 天前
@liubsyy #22 卧槽,试了下,牛逼。。。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1041593

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX