JAVA中jar包反编译再重新生成jar文件完整流程

一、准备工作

工具:jd-gui反编译工具
下载地址:https://github.com/java-decompiler/jd-gui/releases
这里我用的是MAC,所以直接下载最新版本jd-gui-osx-1.4.0.tar作为演示,window系统可以下载jd-gui-windows-1.4.0.zip

二、操作步骤

1、将下载完成的tar文件双击解压打开,再双击JD-GUI.app打开软件,界面如下
JAVA中jar包反编译再重新生成jar文件完整流程_第1张图片

2、点击左上角的文件夹图标,直接选择jar包路径打开jar文件即可看到jar包结构与class编译文件,界面如下
JAVA中jar包反编译再重新生成jar文件完整流程_第2张图片

3、然后将需要改动的类复制出来,粘贴到一个java文件中,并对这个文件按你需求进行编辑

4、打开终端窗口,使用javac 执行该类或者其他方式重新获得该类的class文件

5、将生成的class文件和原jar包先放在同一个目录下,并cd到该目录

6、以我的操作为例jar包为MXFingerDriver.jar,改动后的class文件为UsbBase.class
执行如下命令:

//该命令创建class文件与原jar包路径一样的文件夹(即class文件在jar包中的包名)
mkdir -p org/zz/mxhidfingerdriver
//从当前目录拷贝一份修改后的UsbBase.class文件到mxhidfingerdriver文件夹下
cp UsbBase.class org/zz/mxhidfingerdriver/
//将文件UsbBase.class添加/更新到现有的jar文件MXFingerDriver.jar中
jar uf MXFingerDriver.jar org/zz/mxhidfingerdriver/UsbBase.class

7、到这里就大功告成了,不放心的话可再导进gui工具看下改动是否成功!

三、可能遇到的问题

1、MAC上默认不允许打开不被认可的软件,所以在安装jd-gui工具时可能无法正常安装,此时我们需要去偏好设置里设置一下权限,打开偏好设置面板,双击安全性与隐私进入
JAVA中jar包反编译再重新生成jar文件完整流程_第3张图片

如果此时看到下面有“任何来源”,选中即可(需要先用管理员密码解左下角的小锁)
JAVA中jar包反编译再重新生成jar文件完整流程_第4张图片

如果没有“任何来源”这个选项,则是系统默认隐藏,需要我们打开终端用命令行设置一下
执行命令如下:

sudo spctl  --master-disable

注意master前面是两个-,之前网上搜的教程就是这里少了一个老是失败。
按下回车,再输入管理员密码。这样“任何来源”选项就回来了!
注意:如果在系统偏好设置的“安全性与隐私”中重新选中允许 App Store 和被认可的开发者 App,即重新打开 Gatekeeper 后,允许“任何来源”App 的选项会再次消失,可运行上述命令再次关闭 Gatekeeper。

2、操作步骤4,在获得class文件可能会报错,编译不过去
遇到这种问题看下报错日志,多半是该类有依赖安卓的库文件(如Intent、context)或者jar包本身的一些文件(如jar包中的工具类),
如果是因为依赖了安卓的库文件,我们可以将该类放入安卓项目来生成class文件(根据该类在jar包中的路径创建包名,避免出现不必要的麻烦)
如果是jar包本身的一些类文件,可观察是否有用,如果没有实际性作用,可以直接删除再次编译,如果有用,那可能就麻烦了,最好是让开发jar包的工作人员自己改。

你可能感兴趣的:(java)