2011-11-07 60 views
4

我有一個即將使用ProGuard進行混淆的庫。 「圖書館模式」幾乎適用於我的用例,即保留所有公共和受保護的班級和班級成員幾乎可以。 但是由於Java的可見性要求,一些成員不能被封裝爲私有或私有,因此它們是公共類,儘管它們不應該在庫中。我想讓他們混淆一下,使其更清楚地表明這些類不屬於公共api,以及獲得更好的混淆和更小的圖書館罐子。 有沒有辦法從proguard「keep」規則中排除一些項目而不是按名稱指定每個項目(使用'!')。 理想情況下,我想通過標註註釋來註釋這些類和成員,但據我所知,Proguard只能被告知保留項具有某些註釋。從Proguard的保留規則中排除一些類

+0

我結束了標註有問題的元件,並寫了一個小注解處理器轉儲,所有成員保持由一個上市一個ProGuard的配置文件使用我的自定義邏輯:添加所有沒有該註釋的有效公共/受保護成員。 – Sebastian

回答

4

您只能確實保留項目。如果您想要排除某些班級成員,則必須列出或註釋您希望保留的班級成員。指定類名稱時,可以提供一個列表,可以選擇「!」排除名稱。指定類成員名稱和類型時,這是不可能的。不過,在這兩種情況下,都可以使用通配符。如果您選擇適合您的內部類特殊的名字,這可能工作:

-keep public class * { 
    public protected *** !myInternalField*; 
    public protected *** !myInternalMethod*(...); 
} 
+0

謝謝。將它標記爲答案,雖然不幸的是我沒有真正回答我的問題,但是告訴我它目前不支持。 – Sebastian