2013-08-26 52 views
5

歷史/背景 我有一個項目[1]其中大小真的很重要 - 最近我把東西移動到共享庫[2],並認爲proguard會照顧並刪除未使用的類因爲我有一個配置,大大減少了大小,但通過使用lib我來了魔術100kb標記,所以我調查:我不確定使用的類是在得到的dex文件 - 甚至全名(不縮短以單個字符) - 例如我看到了dex中的SquareView,我沒有在App中使用它。刪除未使用的類與proguard爲Android

問題 令人驚訝的我ProGuard的文檔中找到如下:

The library jars themselves always remain unchanged. 

我可以以某種方式告訴/招proguard的(在)來處理它們?我覺得這很奇怪,特別是因爲我希望更多的東西是可拆卸的lib比在App本身..

[1] https://github.com/ligi/FAST [2] https://github.com/ligi/AndroidHelper

回答

8

Eclipse的/ ANT /搖籃在Android SDK構建過程中自動選擇-injars指定代碼(從bin/classes)及其庫(從libs)。這意味着整個應用程序會被壓縮,優化和混淆(在發佈版本中,假設啓用了ProGuard)。

構建過程僅指定Android運行時android.jar與選項-libraryjars。有必要處理代碼,但它不應該在已處理的apk中結束,因爲它已經存在於設備上。

所以它應該都會自動運作。如果您的配置proguard-project.txt包含像-keep class org.mylibrary.** { *; }這樣的行,您仍然可以看到整個庫的原始名稱都已處理。這種配置通常是解釋反射的保守解決方案。通過一些研究和實驗,您可以經常改進配置並獲得更好的結果。你可以通過選項-whyareyoukeeping找出爲什麼要保留課程。

3

我認爲你必須使用-injars

-injars class_path 指定要處理的應用程序的輸入罐(或戰爭,耳朵,拉鍊或目錄)。這些罐子中的類文件將被處理並寫入到輸出罐中。默認情況下,任何非 文件將被複制而不做更改。請注意任何暫時的 文件(例如由IDE創建的文件),尤其是如果您直接從目錄中讀取輸入文件 。類路徑中的條目可以是 已過濾,如過濾器部分所述。爲了提高可讀性,可以使用多個-injars選項指定 類路徑條目。

來源:http://proguard.sourceforge.net/index.html#manual/usage.html

+0

謝謝 - 這聽起來是正確的 - 這就是爲什麼我接受 - 無法測試,但我現在卡在這裏http://stackoverflow.com/questions/18460982/how-to-specify-injars-for-proguard-within -Android-gradle這個-集結文件換librari – ligi

相關問題