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打開軟件,界面如下
這裏寫圖片描述

2、點擊左上角的文件夾圖標,直接選擇jar包路徑打開jar文件即可看到jar包結構與class編譯文件,界面如下
這裏寫圖片描述

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工具時可能無法正常安裝,此時我們需要去偏好設置裏設置一下權限,打開偏好設置面板,雙擊安全性與隱私進入
這裏寫圖片描述

如果此時看到下面有“任何來源”,選中即可(需要先用管理員密碼解左下角的小鎖)
這裏寫圖片描述

如果沒有“任何來源”這個選項,則是系統默認隱藏,需要我們打開終端用命令行設置一下
執行命令如下:

sudo spctl  --master-disable

注意master前面是兩個-,之前網上搜的教程就是這裏少了一個老是失敗。
按下回車,再輸入管理員密碼。這樣“任何來源”選項就回來了!
注意:如果在系統偏好設置的“安全性與隱私”中重新選中允許 App Store 和被認可的開發者 App,即重新打開 Gatekeeper 後,允許“任何來源”App 的選項會再次消失,可運行上述命令再次關閉 Gatekeeper。

2、操作步驟4,在獲得class文件可能會報錯,編譯不過去
遇到這種問題看下報錯日誌,多半是該類有依賴安卓的庫文件(如Intent、context)或者jar包本身的一些文件(如jar包中的工具類),
如果是因爲依賴了安卓的庫文件,我們可以將該類放入安卓項目來生成class文件(根據該類在jar包中的路徑創建包名,避免出現不必要的麻煩)
如果是jar包本身的一些類文件,可觀察是否有用,如果沒有實際性作用,可以直接刪除再次編譯,如果有用,那可能就麻煩了,最好是讓開發jar包的工作人員自己改。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章