1. 程式人生 > >jre精簡詳細教程(附精簡工具)

jre精簡詳細教程(附精簡工具)

 

最近做個了java的桌面應用程式,可打包釋出後才發現要帶一個將近100M的jre,使程式顯得過於臃腫,當務之急就是去精簡jre,現將本人的精簡過程寫出來,以供大家參考!

思路:jre/lib/rt.jar有很多class,但大多數你的程式用不到,利用批處理命令(下文提到的cutJre.bat)可以得到你的程式所用到的class,!

所用到的工具:(1)360壓縮軟體(ps:往壓縮檔案裡複製檔案特別方便)

   (2)jre精簡軟體

閒話少說,咱們趕快開始。

1,         咱們建一個新資料夾,這裡我取名cutJre,將下載的精簡工具解壓到cutJre中,當然360壓縮軟體要安裝,再將jdk中的jre資料夾複製到cutJre中,再將你的java匯出jar檔案和打包過的exe檔案複製到cutJre中,我這裡的示例程式是analysis.jar和analysis.exe,此時cutJre資料夾應包含以下內容:

Ps:一定要齊全,因為cutJRE.exe是本人用java所寫,它的執行要也要基於jre!

1,         準備工作已經做好,這裡所說的精簡就是去精簡jre/lib資料夾中的rt.jar,因為它最大,有大約46M。咱們開啟cutJre.exe軟體(第一次啟動可能有點慢),根據提示去做,你用軟體匯入後,這時會彈出dos視窗和你的exe檔案,把你的軟體的所有功能使用一遍後,去關閉它們。這時先別急點選:“生成精簡版JRE”,回到cutJre資料夾中看看,資料夾中多了cutJre.bat和class.txt(列出了所用到的class)這兩個檔案,清楚這一點可方便我們以後的操作!

2,         點選“生成精簡版JRE”,時間可能會有點長,點選後,請稍等片刻,你可以乾乾其他事,正常的話,會出現下圖:

精簡完後cutJre資料夾中會多出幾個資料夾,一般情況下是sun,java,javax,com這幾個資料夾,在cutJre中新建一個資料夾,我這裡是cutJre1,然後把jre和你的exe可執行檔案,cutJre.bat,你的jar複製到cutJre1中,此時結構如下:

為了方便起見我們把rt.jar複製出來,單獨對它進行操作後,再去替換cutJre/cutJre1/jre/lib/rt.jar,如果你對cutJre/cutJre1/jre/lib/rt.jar直接去操作的話,會提示你此檔案正在使用,無法操作

然後用360壓縮開啟單獨複製出來的rt.jar,去替換相應的資料夾如下圖:

完成以後,用精簡版的rt.jar去替換cutJre/cutJre1/jre/lib/rt.jar

第一次一般不會成功,然後我們去點選cutJre1資料夾中的cutJre.bat去找出缺少的class,會出現以下圖示:

如上圖所示:我們直接把紅色部分所示的用原生態rt.jar資料夾替換精簡版rt.jar中的資料夾, 比如說上圖,我們直接把原版re.jar中sun資料夾中的java2d資料夾去替換精簡版中相應的資料夾!,如下圖:

比較麻煩的是cutJre.bat不會一次性顯示出所有的缺少的class,所以要我們不斷去試驗!重複以上步驟!

待到cutJre不再報錯時,可Exe可執行檔案還是打不開,總提示

“Couldn’t load main class”,或其他錯誤,這就是你所使用的打包軟體在作怪了,一般我們都用Exe4j,這時又要我們去替換所用到的類,一般你把java/lang,java/util,java/security這三個資料夾替換掉,如果還不行,再把sun/reflect,sun/misc,sun/security也替換掉!

經過這麼一折騰,猛然間發現我們的rt.jar由將近47M變成了5M多,總算完成了瘦身!

4,rt.jar裁剪完成後,就要去刪除一些jre中用不到的檔案,首先刪除jre中除bin,lib以外所有的檔案!

然後我們再來給jre中bin資料夾動手腳,一個一個去刪除,如果是你的程式用到的檔案,電腦會自動提示你此檔案刪除不掉(ps:jre/bin/client這個資料夾電腦可能會提示你刪不掉,但是它裡面的classes.jsa有13M,它可以被刪掉,在jre/lib中碰到這樣的資料夾時,你也可以這樣試試)

注意:java.exe這個檔案不要刪!我的jre/bin經過處理後包含如下檔案:

然後再去處理jre/lib資料夾,方法跟上面一樣,我的jre/lib理後包含如下檔案:

Ps:這些檔案都因你的程式而宜!

 如果程式可以開啟,cutJre.bat中也沒有報錯,可程式的部分功能還是無法使用,這時你可以注意到cutJre資料夾中有個error.log這個檔案,開啟它,就可以看到缺少的class,同上把相應的資料夾直接替換即可!

哈哈,最算精簡完畢,程式可正常執行,最後我的精簡過的jre為17M,在可接受範圍之內!

 如果還有問題,不能在任意電腦上去執行,那建議你只把rt.jar中的com資料夾去替換,經過本人的多次試驗,這個資料夾最大,出問題的概率最小!而bin和lib中的檔案也要小心翼翼的去刪了!

e