Proguard keepclasseswithmembers:会员不保留?

时间:2012-10-21 01:41:25

标签: java android proguard

我必须保留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?提前谢谢。

2 个答案:

答案 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>;
}