3

我必须保留 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 吗?预先感谢。

4

2 回答 2

1

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

我建议使用: -keep class games.levels.Episode -keep class games.levels.Level

这将使您的类保持完整,而不会尝试强制匹配成员以及特定的类名。

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

于 2012-10-21T02:24:04.977 回答
0

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

-keep class X.Y.Z {
    <fields>;
}
于 2012-10-21T06:45:06.180 回答