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

ここで何が起こっているのか理解できません。レベルが機能するのにエピソードでは機能しない理由を誰か教えてください。少し早いですがお礼を。

4

2 に答える 2

1

奇妙なプロガードのセットアップがあります。通常-keepclasseswithmembers、メンバーを一致させることによって特定のクラスを保持するのではなく、すべてが一致するメンバーを持つクラスの範囲をカバーすることを意図しています。

以下を使用することをお勧めします。 -keep class games.levels.Episode -keep class games.levels.Level

これにより、メンバーや特定のクラス名を強制的に一致させようとすることなく、クラスをそのまま維持できます。

ここでの問題は、proguard 構成で定義されたメンバーが Episode クラスの実際のメンバーと一致しないため、 Episode クラスが一致しないことです。

于 2012-10-21T02:24:04.977 に答える
0

ついに解決!クラスのすべてのメンバーの名前を保持したい場合は、wildcard=> を使用してください。これは、任意のフィールドに一致することを意味します。

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