android - 如何从proguard保持枚举

时间:2013-10-02 23:56:37

标签: android enums proguard

在我的节目中,我有以下内容以防止公共枚举被混淆。

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

我的问题是,这是否也将公共枚举货币保留在这样的类中?

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

    ...
}

如果没有,我必须单独添加什么?

添加以下内容似乎没有帮助。

-keepattributes InnerClasses

有什么建议吗?感谢

4 个答案:

答案 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 * { *; }