2013-10-14 75 views
5

我有以下幾點:正確的Proguard的配置,以保持靜態內部類

public class A extends B { 
    static class C { 
     Object field1; 
     int field2; 
     boolean field3; 
    } 
} 

不能通過反射拿到C級!

我已經試過如下:工作上面的

-keep class com.path.to._class.A$** {*;} 

-keep class com.path.to._class.A$* {*;} 

-keep class com.path.to._class.A$C {*;} 

-keep class com.path.to._class.A$C { 
    <fields>; 
} 

-keep class com.path.to._class.A$C { 
    Object field1; 
    int field2; 
    boolean field3; 
} 

無。我在這裏做了完全錯誤的事嗎?

也許它值得一提的是,B擴展視圖...

+0

不用說了,不運行Proguard的這個工作得很好... – TacB0sS

回答

5

所有這些應該都是正常(僅對象 - > java.lang.Object繼承)。您可以檢查bin/proguard/seeds.txt以查看它們是否已列出。否則,您可能正在修改錯誤的配置文件,或者名稱中可能存在拼寫錯誤。

+0

出於某種原因,加上-keepattribute InnerClasses做了這項工作,但爲什麼?它也混亂了其他內部類。 – TacB0sS

+0

-keep選項用它們的原始名稱來保存這些類,這對於正常反射來說是足夠的。選項-keepattributes InnerClasses保留可選屬性,這些屬性僅用於較不常見的反射類型。所以這取決於你的代碼和你得到的錯誤。 –

0
-keep public class com.path.to._class.A$C {*;} 

這是爲我工作,張貼很晚了,但仍可以幫助其他面臨這個問題