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的主要内容,如果未能解决你的问题,请参考以下文章