android - 如何让 enum 远离 proguard

Posted

技术标签:

【中文标题】android - 如何让 enum 远离 proguard【英文标题】:android - how to keep enum from proguard 【发布时间】:2013-10-09 12:46:08 【问题描述】:

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

有什么建议吗?谢谢

【问题讨论】:

对于 Kotlin:在“proguard-rules.pro”文件中添加以下行。 -keepnames class your.package.EnumName 【参考方案1】:

你可以试试

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

如本回答所示Proguard won't keep a class member's enums

别忘了放

-keepattributes InnerClasses

【讨论】:

【参考方案2】:

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

-keep class com.xxx.Foo  *; 

【讨论】:

【参考方案3】:

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

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

-keep class somepackage.Foo$Currency

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

【讨论】:

【参考方案4】:

如果您想保护 枚举名称和所有字段、方法

-keep enum *  *; 

【讨论】:

以上是关于android - 如何让 enum 远离 proguard的主要内容,如果未能解决你的问题,请参考以下文章

老人如何运动才能远离伤害

智能时代的信任口诀:让计算远离算计

如何让 Pro*C 应对 #warning 指令?

70行代码让你远离颈椎病,致所有的程序猿们

如何让 Visual Assist 解析 Pro*C (*.pc) 文件?

Android中是否推荐使用枚举Enum