需求及準備
需求
現在有一個.jar文件,要修改其中某個文件的代碼。
準備
-
確保JRE已安裝且環境變量已配置。
-
安裝Java Decompiler。官方地址爲:
http://java-decompiler.github.io/
選擇其中的JD-GUI進行下載。
-
安裝winrar。
提取class內容並修改
打開JD-GUI,將.jar拖進來。JD-GUI會將jar包反編譯爲java源碼。
在JD-GUI中可以看到反編譯源碼,但不能直接修改。找到要修改的文件,複製。
創建一個與.class同名的空白.java文件(爲了後續生成.class不衝突,建議放在一個單獨目錄下),將複製的內容粘貼到該文件中。對其代碼進行修改。
編譯
打開CMD,定位到上面創建的.java所在目錄下,輸入:
javac xxx.java
編譯後,會生成同名的.class文件。
注意此方式只能編譯不依賴其他模塊的.java文件。對於依賴其他模塊的,需要分析並定位.class的虛擬機代碼後,創建java工程引入jclasslib修改。可以參考修改jar中的class:殺戮尖塔修改教程。
替換jar中class文件
替換jar中class有兩種方式:
- 藉助rar直接替換。
- 解壓jar爲文件夾,替換class後重新打包爲jar。
藉助winrar直接替換
使用winrar直接打開.jar文件,進入指定目錄後,將剛纔編譯生成的class直接拖進來替換即可。
解壓jar爲文件夾,替換class後重新打包爲jar
使用winrar將.jar文件解壓爲文件夾,然後替換class。
設該文件夾名稱爲xxx。打開CMD並定位到該文件夾所在目錄下,輸入:
jar cvfm xxx.jar xxx\META-INF\MANIFEST.MF -C xxx /
其含義爲:使用xxx\META-INF\MANIFEST.MF作爲配置文件,並調用-C
切換路徑爲xxx
文件夾下。然後打包出.jar文件。
注意-C xxx /
最後的文件夾名稱xxx與/
之間有個空格,不可省略。