2012-10-21 3 views
2

Je dois garder la classe et les membres de 2 fichiers: Level et Episode. Mes fichiers proguard.cfg:Proguard keepclasseswithmembers: les membres ne sont pas conservés?

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

Et mes proguards fichier 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 

Je ne peux pas comprendre ce qui se passe ici. Quelqu'un pourrait-il s'il vous plaît m'aider quelques traces pourquoi le niveau de travail, mais pas avec Episode? Merci d'avance.

Répondre

0

RÉSOLU AU MOINS! Si vous voulez garder les noms de tous les membres d'une classe, il suffit d'utiliser joker => cela signifie correspondant à tous les champs:

-keep class X.Y.Z { 
    <fields>; 
} 
1

Vous avez une étrange configuration de proguard. Normalement -keepclasseswithmembers est destiné à couvrir une gamme de classes qui ont tous des membres correspondants, ne pas garder des classes spécifiques en faisant correspondre les membres.

Je suggère d'utiliser: -keep class games.levels.Episode -keep class games.levels.Level

Cela permet de garder vos classes intactes sans essayer de forcer un match sur les membres, ainsi que les noms de classes spécifiques.

Le problème ici est que la classe Episode n'est pas mise en correspondance car les membres définis dans votre configuration proguard ne correspondent pas aux membres réels de votre classe Episode.

+0

Merci, mais pas l'option « garder » juste garder le nom de la classe? J'ai besoin de charger 2 classes à partir de json par java reflecion (String), d'où le nom de leurs propriétés ne peut pas être changé. Pour le nom des membres, je copie juste de mon dossier de source :(. – wanting252

+0

D'accord, je change pour 'garder' trouvé que le problème se produit seulement avec la classe faite sur commande comme ArrayList ou les propres classes définies Que dois-je faire maintenant, pls? – wanting252

+0

vous travaillez avec gson ou jackson? Si oui, vous pouvez regarder dans -keepattributes SourceFile, LineNumberTable, * Annotation *, InnerClasses, Signature ainsi – withoutclass

Questions connexes