Proguard ne gardera pas un membre du groupe des enums
Je suis en train de travailler sur une bibliothèque qui est distribuée en java jar, et je suis en cours d'exécution proguard sur elle de manière à ne plus laisser que le nécessaire interfaces exposées. J'ai une classe de configuration avec un tas de variables membres et certains enum définit. Mon proguard script conserve les variables de membre fine, toutefois, l'énumération des définitions sont obscurcis. J'ai essayé tout ce que je peux penser à la force de proguard de conserver ces définies en interne et public enum, mais je ne peux pas le faire fonctionner.
Droit maintenant, je suis en utilisant:
-keep public class com.stuff.MyConfigObject {
public *;
}
-keepclassmembers enum * {
public static **[] values();
public static ** valueOf(java.lang.String);
}
Si j'essaie:
-keep public enum com.stuff.MyConfigObject.MyEnum
J'obtiens une erreur ambigu:
"Remarque: la configuration fait référence à l'inconnu de la classe com.des trucs.MyConfigObject.MyEnum'"
Merci pour l'aide!
Vous devez vous connecter pour publier un commentaire.
Essayer
com.stuff.MyConfigObject$MyEnum
à la place. Le Proguard spécification de classe attend$
comme séparateur pour les classes internes.En fait, pour ce que vous voulez peut-être la meilleure option est quelque chose comme ceci:
Cela permet de garder uniquement les membres requis pour tous les
enum
s imbriquée dansMyConfigObject
- requis des membres de la$VALUES[]
un tableau (voir cette question pour une explication) et toutpublic
membres de l'enum. Aucun des autres membres (par exemple les champs de méthodes) ne seront pas conservées.Comme indiqué par Jesse et moi-même dans les commentaires - depuis que vous êtes à la transformation d'une bibliothèque, vous devez également ajouter le
-keepAttributes
option. À partir du guide de référence:-keepAttributes **
il va travailler. Pas sûr que l'attribut particulier(s) doit être conservé, mais avec le Proguard de référence et de l'expérimentation, je parie que vous pourriez comprendre.