我必须保留2个文件的类和成员:级别和剧集。我的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;
}
我的proguards mapping.txt文件:
games.levels.Level -> games.levels.Level:
int id -> id
int episode -> episode
int numEnemies -> numEnemies
games.levels.Episode -> games.levels.a:
java.util.ArrayList levelLinks -> a
java.util.ArrayList levels -> b
java.util.ArrayList skin -> c
int id -> d
我无法理解这里发生了什么。有谁可以帮我一些跟踪为什么Level工作,但没有Episode?提前谢谢。
答案 0 :(得分:1)
你有一个奇怪的proguard设置。通常-keepclasseswithmembers
旨在涵盖一系列具有匹配成员的类,而不是通过匹配成员来保留特定类。
我建议使用:
-keep class games.levels.Episode
-keep class games.levels.Level
这将使您的课程保持完整,而不会试图强制匹配成员以及特定的班级名称。
这里的问题是Episode类没有匹配,因为你的proguard配置中定义的成员与Episode类的实际成员不匹配。
答案 1 :(得分:1)
最后解决了! 如果你想保留一个类的所有成员的名字,只需使用wildcard =&gt;它意味着匹配任何字段:
-keep class X.Y.Z {
<fields>;
}