如何将枚举类型字段保留在 proguard 中?

Posted

技术标签:

【中文标题】如何将枚举类型字段保留在 proguard 中?【英文标题】:How to keep Enum type fields in proguard? 【发布时间】:2016-05-02 02:48:39 【问题描述】:

这是我的实体类:

class Entity
    private String id;
    Object content;
    private Type type;
    public enum Typetype1, type2, type3

根据type 字段,我将相应的类传递给

gson.fromJson(json, <type1/2/3 class, depending on field type>);

但我正在使用 proguard,这会混淆类型值,所以我无法确定要使用哪个类。

我试图保留类型字段,但它没有保留。这是我的代码:

-keepclassmembers enum *  *; 
-keepclassmembers class com.mypkg.Entity 
    private java.lang.String id;
    private com.mypkg.Entity.Type type;
 

我看到保留了 id,但没有保留 type 字段。

请帮忙。

【问题讨论】:

【参考方案1】:

我在使用 Kotlin 时遇到了同样的问题。尝试使用@Keep注解

例子:

enum class Color 
    @Keep RED,
    @Keep GREEN,
    @Keep BLUE

【讨论】:

【参考方案2】:

This thread 可能会有所帮助。

-keep public enum com.mypkg.Entity$** 
    **[] $VALUES;
    public *;

【讨论】:

以上是关于如何将枚举类型字段保留在 proguard 中?的主要内容,如果未能解决你的问题,请参考以下文章

使用 proguard 保留特定注释

Proguard 不会保留班级成员的枚举

android - 如何让 enum 远离 proguard

如何告诉 ProGuard 保留私有字段而不指定每个字段

如何使 ProGuard 保留整个(整个)类(带有字段和方法)而不使用“-keep”

Proguard 保留公共类、字段和方法