2013-02-20 95 views
2

我正在研究一個使用Bouncy Castle J2ME庫的Java ME/J2ME項目。但是,將它添加到我的項目中時,我注意到生成的.jar文件大小增加了40倍(50kB與2000kB)。除了將ProGuard的混淆器設置設置爲9級(最大)之外,是否還有其他方法可以最大限度地減少文件大小的增加?使用Bouncy Castle庫會導致輸出的大量增加.jar文件大小

import org.bouncycastle.util.encoders.Hex; 
import org.bouncycastle.crypto.Digest; 
import org.bouncycastle.crypto.macs.HMac; 
import org.bouncycastle.crypto.params.*; 
import org.bouncycastle.crypto.digests.SHA256Digest; 

在此先感謝:我只使用幾個庫實際類,即

+0

添加了proguard標記,因爲它應該只是proguard的正確選項的一個問題,以便將其僅縮小到您正在使用的類。 – 2013-02-20 14:51:32

回答

2

現在這是一個非常棘手的問題!

在別的之前,請先解壓縮jar文件,看看Proguard是否混淆了BouncyCastle的類文件?既然你已經包含了bouncycastle jar文件作爲庫,並且裏面有類文件,所以我認爲Proguard沒有混淆這些佔用空間的類文件。

反正我剛剛下載了彈性城堡jar文件,可以看到它純粹由類文件組成,所以沒有額外的文件,我們可能會刪除並擺脫以減少生成的jar文件。現在

如果你真的想減少接着往下看,我要產生兩個解決方案,他們兩人都是有風險的:

解決方案1 ​​(不推薦)

  1. 這是容易,但我不會推薦,它可能會導致運行時異常或錯誤: 解壓縮bouncycastle jar文件。然後導航到該目錄的src \組織\ BouncyCastle的 正如你剛纔提到您只使用下面的包這些 org.bouncycastle.util。* org.bouncycastle.crypto。*

  2. 現在,這裏我會假設這兩個包內的源代碼不依賴於其他包內的源代碼/類文件。

  3. 現在刪除其他目錄,即「asn1」,「bcpg」。在這個階段,我不會成爲屠夫並刪除所有東西,但會刪除一對,然後再刪除其他人,如果它工作的話。

  4. 現在我們將重新生成jar文件。之後已刪除的目錄,現在回去的根目錄下,你會看到其他目錄,如 META-INF 組織 utils的

這是你需要這個正確的,否則jar文件的重要一步不管用。選擇在根目錄和 然後右鍵點擊 - 所有的目錄>發送到拉鍊

一旦壓縮文件被創建,然後重命名爲具有* .zip文件的* .jar而不是

  1. 的大小該jar文件將會減少,現在將該jar文件包含在您的項目中。看看它是否編譯並執行。如果在運行系統中正常工作,請檢查您的功能 。如果一切順利,那麼你就完成了。 現在您可以重複上述步驟來刪除更多目錄以減少jar文件大小。

解決方案2:

  1. 下載您所使用的BouncyCastle的jar文件的源代碼。您將不得不從項目中刪除jar文件。
  2. 將源代碼包含到項目中。建立該項目,看看你是否沒有收到任何編譯錯誤。你必須確定在這個階段 你沒有使用原始的jar文件,只使用代碼。
  3. 現在開始刪除包含您不需要的代碼的包。繼續重建項目,它不會出現編譯錯誤, ,如果它確實如此,那麼你不想刪除那個包並且繼續刪除其他包。
  4. 一旦這個butchring完成後,生成項目並生成jar文件。
  5. 通過這種方式,Proguard會混淆充氣城堡的代碼,並且由於刪除了大部分不需要的代碼,因此應該在生成的jar文件中減少大量的代碼。
+0

感謝您的建議,user_CC。我嘗試瞭解決方案2,但連鎖效應難以管理。我已經嘗試刪除不僅僅用於使用拋出錯誤的類的類(因爲它們自己使用它們!)。看起來代碼混淆是暫時的方式。非常感激。 – Bataleon 2013-02-28 08:35:22

+0

使用代碼而不是庫時,肯定會讓ProGuard混淆庫代碼,從而減小或減小尺寸。 – 2013-02-28 09:07:35

+0

使用庫.jar與使用它的類(混淆器都處於關閉狀態)之間似乎沒有區別。 ProGuard只在水平設置爲max(9)時纔會對輸出.jar大小產生影響,否則不會發生變化。這是正常的嗎? – Bataleon 2013-03-01 08:10:35

相關問題