2013-10-02 7 views
9

In meinem proguard, habe ich die folgenden, um zu verhindern, dass öffentliche enums verschleiert werden.android - wie man enum von prouard hält

-keepclassmembers enum * { 
    public static **[] values(); 
    public static ** valueOf(java.lang.String); 
} 

Meine Frage ist, bedeutet dies hält auch die öffentliche ENUM Währung in einer Klasse wie diese?

public class Foo { 
    public enum **Currency** {PENNY, NICKLE, DIME, QUARTER}; 

    ... 
} 

Wenn nicht, was muss ich separat hinzufügen?

Hinzufügen der folgenden scheint nicht zu helfen.

-keepattributes InnerClasses 

Irgendwelche Ratschläge?

Dank

Antwort

3

Können Sie versuchen proguard zu sagen, die spezifische Klasse zu halten:

-keep class com.xxx.Foo { *; } 
3

Die Option -keepclassmembers nur die Klassenmitglieder hält; in diesem Fall die Methoden values() und valueOf(String) aller Enum-Klassen. Der Platzhalter * entspricht auch internen Klassen.

Wenn Sie aus irgendeinem Grund die innere Klasse mit ihren ursprünglichen Namen beibehalten möchten, können Sie angeben:

-keep class somepackage.Foo$Currency 

dass nur notwendig sein sollte, wenn die Anwendung die Klasse durch Reflexion zugreift.

16

Sie könnten versuchen,

-keep public enum com.stuff.TheEnclosingClass$** { 
    **[] $VALUES; 
    public *; 
} 

Wie zu dieser Antwort gezeigt Proguard won't keep a class member's enums

Nur nicht vergessen, setzen

-keepattributes InnerClasses