4

在導出的應用程序工作,我必須使用相同的proguard.cfg下面一節旨在靜噪所有Log.x()logcat的輸出相同的應用程序的兩個版本:proguard.cfg不利用圖書館

-assumenosideeffects class android.util.Log { 
    public static *** v(...); 
    public static *** i(...); 
    public static *** d(...); 
    public static *** w(...); 
    public static *** e(...); 
} 

第一個版本是單一的(即不參考任何圖書館項目),proguard.cfg就像預期的那樣在那裏工作。

第二個版本使用兩個庫項目(一個是我的,另一個是谷歌的LVL)。同樣的proguard.cfg被放置在應用程序項目和我的庫項目中。但是,在第二個版本中,proguard.cfg似乎根本沒有效果!

有什麼可以解釋這一點?

回答

2

你做你的應用程序項目中添加proguard.config=proguard.cfgbuild.properties?您應該看到ProGuard的控制檯消息和輸出文件。優化過程至少應該提到一些「已刪除指令的數量」。

應用程序類和庫類都被編譯爲bin/classes。然後對它們進行完全相同的處理:將它們合併到bin/original.jar中,並使用proguard.cfg將其模糊化爲bin/obfuscated.jar。添加更多的類對於刪除日誌代碼並不會產生影響。

+0

+1已經,因爲你提示我比較' Library項目和應用程序項目之間的default.properties。果然,這行存在於庫項目中,但不存在於應用程序項目中!從單一項目轉移到基於圖書館的項目的方式還有另一個陷阱......我會盡快測試這個變化,並接受這個變化是否是罪魁禍首。 – an00b

+0

剛剛測試過你的建議(將'proguard.config = proguard.cfg'添加到**應用程序的**項目中),並且它可以工作! :) – an00b

1

請使用此開關來診斷: -whyareyoukeeping

+0

+1突出顯示這個開關(這是不是在我的'proguard.cfg') – an00b

0

要在我的應用程序禁用日誌,我用這個:

-assumenosideeffects public class android.util.Log { 
    <methods>; 
} 

如果不解決您的問題,那麼有幾個其他的事情嘗試:

  1. 在拋出一個異常代碼proguard的一部分應該是混淆。如果堆棧跟蹤未被模糊處理,則proguard可能無法正常運行。
  2. 當您執行proguard構建時,您的應用程序無法啓用調試。可以肯定的是,在您的清單中,<application>元素設置爲android:debuggable="false"
+0

感謝您的幫助。在我的圖書館項目和我的應用程序項目中都沒有任何'android:debuggable =「false」',然而在應用@Eric Lafortune的建議之後,Proguard仍然工作。 – an00b