2011-11-01 84 views
2

我正在開發一個庫,它由幾個單獨的類組成,這些類一起工作以執行庫的功能。然後其中一個類暴露了一些公共函數,所有外部代碼都使用該庫。由於不同的類需要進行交互,所以我把它們放在同一個包中,並且有很多「受保護」的東西(類和函數)。使用ProGuard對Java保護的元素進行混淆

問題是,默認情況下,ProGuard不會混淆這些受保護的元素,因爲有可能以後它們會與同一個包中的另一個類相結合。不過,出於安全原因,我想阻止這種情況發生。

所以問題是,我可以強制ProGuard混淆這些受保護的元素,除了私人的嗎?

換句話說,有沒有辦法告訴ProGuard「我已經把東西添加到這個包裏了,請不要混淆每個類中的私人東西,而是包裏的受保護的東西」?

謝謝!

回答

6

ProGuard混淆了與配置中的某個-keep選項不匹配的所有內容。例如,從ProGuard manual > Examples > A typical library

-keep public class * { 
    public protected *; 
} 

此規格使所有公共和受保護類,字段和方法。 ProGuard混淆了其他任何內容。如果你想混淆更多,你必須指定更少的元素,例如與一個或多個選項像這樣的:

-keep public class mypackage.MyPublicClass { 
    public void myPublicMethod(); 
} 

可以使用通配符或其他模板,如ProGuard的手工記錄。

因此,默認情況下,ProGuard會混淆一切,除非您指定保留某些元素。 ProGuard無法猜測您想要保留的內容。