13

在我的 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

4 回答 4

21

你可以试试

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

如this answer所示,Proguard不会保留班级成员的枚举

只是不要忘记放

-keepattributes InnerClasses
于 2014-02-15T01:33:33.100 回答
5

你能试着告诉 proguard 保留特定的类吗:

-keep class com.xxx.Foo { *; }
于 2013-10-03T12:32:20.017 回答
4

该选项-keepclassmembers仅保留班级成员;在这种情况下,所有枚举类的方法values()valueOf(String)。通配符*还匹配内部类。

如果您出于某种原因想要保留内部类的原始名称,您可以指定:

-keep class somepackage.Foo$Currency

仅当您的应用程序通过反射访问该类时才需要这样做。

于 2013-10-07T23:23:33.387 回答
3

如果你想保护枚举名称和所有字段,它的方法:

-keep enum * { *; }
于 2019-08-01T08:28:45.967 回答