Java Proguard KeepClass成员:成员未保留?

Java Proguard KeepClass成员:成员未保留?,java,android,proguard,Java,Android,Proguard,我必须把班级和成员分成两个文件:关卡和插曲。我的proguard.cfg文件: -keepclasseswithmembers class games.levels.Episode { public java.util.ArrayList<java.lang.String> levelLinks; public java.util.ArrayList<Level> levels; public java.util.ArrayList<java.lang.String

我必须把班级和成员分成两个文件:关卡和插曲。我的proguard.cfg文件:

-keepclasseswithmembers class games.levels.Episode {
public java.util.ArrayList<java.lang.String> levelLinks;
public java.util.ArrayList<Level> levels;
public java.util.ArrayList<java.lang.String> skin;
public int id;
}
-keepclasseswithmembers class games.levels.Level {
public int id;
public int episode;
public int numEnemies;
}

我只是不明白这里发生了什么。有谁能帮我解释一下为什么关卡可以用,但不能用插曲?提前感谢。

您有一个奇怪的proguard设置。通常情况下,
-keepclasseswithmembers
意味着覆盖所有具有匹配成员的一系列类,而不是通过匹配成员来保留特定类

我建议使用:

-保持课堂游戏。水平。情节
-保持课堂游戏水平

这将保持您的类完好无损,而不会试图在成员和特定类名上强制匹配

这里的问题是,由于proguard配置中定义的成员与插曲类的实际成员不匹配,因此插曲类不匹配。

终于解决了! 如果要保留一个类的所有成员的名称,只需使用通配符=>它意味着匹配任何字段:

-keep class X.Y.Z {
    <fields>;
}
-保持X.Y.Z类{
;
}

谢谢,但“保留”选项不就是保留类名吗?我需要通过java reflecion(String)从json加载2个类,因此它们的属性名称不能更改。对于成员名称,我仅从源文件复制:(.好的,我改为“keep”,发现问题只发生在自定义类如ArrayList或自己定义的类上。我现在该怎么办?你是在与gson或jackson合作吗?如果是这样,你可能需要查看-keepattributes SourceFile、LineNumberTable、Annotation、InnerClass以及Signature
-keep class X.Y.Z {
    <fields>;
}