2012-06-10 84 views
18

你好我正在編寫一個Android應用程序,我已經設置了Proguard來模糊我的應用程序。然而,我使用類加載器爲我的應用程序動態加載不同的擴展。問題是如果它們的名稱被改變,這些加載不會正確。我如何讓Proguard避免混淆特定的類名?Proguard保留類名?

回答

27

使用您proguard.cfg的-keepnames選項

參見手冊中 https://www.guardsquare.com/en/proguard/manual/usage#keepoptions

-keepnames class_specification

簡稱-keep,allowshrinking class_specification

指定類和類成員,其如果名字不存在,名稱將被保留在萎縮階段沒有被取消。例如,您可能希望保留實現Serializable接口的類的所有類名,以便處理後的代碼與任何原始序列化的類保持兼容。完全不用的類仍然可以刪除。只有在混淆時才適用。

+3

所以我輸入: -keepnames com.randompackage.lol.ClassName – Nik

+0

好吧有沒有辦法做到這一點與整個包? – Nik

+0

是的,你使用*通配符。即,-keepnames com.randompackage.lol。* 將保持所有類在lol –

24

這樣可以使類名不變:

-keepnames class com.somepackage.* 
9

方便的技巧爲大家誰不希望ProGuard的改變任何類名稱:

# please KEEP ALL THE NAMES 
-keepnames class ** { *; } 

這樣你會得到可讀的堆棧跟蹤同時仍然拋出你不需要的東西。 :-)

+9

'''-dontobfuscate'''是禁用混淆的正確方法。 –

+0

錯誤的方法。最好關閉這個配置的混淆:「-dontobfuscate/n -optimizations!code/allocation/variable」 – oxied