在我的节目中,我有以下内容以防止公共枚举被混淆。
-keepclassmembers enum * {
public static **[] values();
public static ** valueOf(java.lang.String);
}
我的问题是,这是否也将公共枚举货币保留在这样的类中?
public class Foo {
public enum **Currency** {PENNY, NICKLE, DIME, QUARTER};
...
}
如果没有,我必须单独添加什么?
添加以下内容似乎没有帮助。
-keepattributes InnerClasses
有什么建议吗?感谢
答案 0 :(得分:16)
你可以尝试
-keep public enum com.stuff.TheEnclosingClass$** {
**[] $VALUES;
public *;
}
如此答案Proguard won't keep a class member's enums
所示不要忘了把
-keepattributes InnerClasses
答案 1 :(得分:4)
选项-keepclassmembers
仅保留班级成员;在这种情况下,所有枚举类的方法values()
和valueOf(String)
。通配符*
也匹配内部类。
如果由于某种原因想要使用其原始名称保留内部类,则可以指定:
-keep class somepackage.Foo$Currency
只有当您的应用程序通过反射访问类时,才应该这样做。
答案 2 :(得分:3)
你可以试着告诉proguard保留特定的课程:
-keep class com.xxx.Foo { *; }
答案 3 :(得分:0)
如果您想保护枚举名称和所有字段,方法,请为此:
-keep enum * { *; }