Android - 如何在Proguard中保留枚举类型

14

在我的 Proguard 中,我使用以下代码来防止公共枚举类型被混淆。

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

我的问题是,这样做是否会将公共枚举Currency保留在这样的类中?

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

    ...
}

如果不行,我需要额外添加什么?

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

-keepattributes InnerClasses

有什么建议吗?谢谢


1
对于 Kotlin:在 'proguard-rules.pro' 文件中添加以下行。 -keepnames class your.package.EnumName - eyeslave
4个回答

23

你可以尝试一下

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

如此回答所示,Proguard不会保留类成员的枚举

只需不要忘记放

-keepattributes InnerClasses

6

你可以尝试告诉proguard保留指定的类:

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

4
选项-keepclassmembers仅保留类成员; 在这种情况下,所有枚举类的方法values()valueOf(String)都将被保留。通配符*也会匹配内部类。
如果您出于某种原因想要保留内部类及其原始名称,可以指定:
-keep class somepackage.Foo$Currency

如果您的应用程序通过反射访问类,则只有这样才是必需的。

3
如果您想为枚举名称及其所有字段、方法提供保护,请按以下方式操作:
-keep enum * { *; }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接