2011-11-07 5 views
4

J'ai une bibliothèque qui est sur le point d'être obscurcie en utilisant ProGuard. Le "mode bibliothèque" est presque applicable pour mon cas d'utilisation, c'est-à-dire qu'il est presque correct de conserver toutes les classes publiques et protégées et les membres de la classe. Cependant, en raison des exigences de visibilité de Java, certains membres ne peuvent pas être rendus privés ou privés et sont donc des classes publiques, bien qu'ils ne devraient pas être dans la bibliothèque. Je voudrais les avoir obscurcis pour qu'il soit plus clair que ces classes n'appartiennent pas à l'API publique, ainsi que pour obtenir une meilleure obfuscation et de plus petits pots de bibliothèque. Existe-t-il un moyen d'exclure certains éléments d'une règle proguard "keep" sans en spécifiant chacun de ces éléments par nom (en utilisant le '!'). Idéalement, je voudrais annoter ces classes et membres avec une annotation de marquage, mais autant que je sache, Proguard peut seulement être dit à garder éléments avec certaines annotations.Exclure certaines classes des règles de conservation de Proguard

+0

Je fini annoter les éléments en question et a écrit un petit processeur d'annotation qui déverse le fichier de configuration de ProGuard où tous les membres à garder sont énumérés un par un en utilisant ma logique personnalisée: Ajouter tous les membres efficacement public/protégé qui n'ont pas cette annotation. – Sebastian

Répondre

4

Vous pouvez uniquement garder éléments en effet. Si vous souhaitez exclure certains membres de la classe, vous devez le faire en listant ou en annotant les membres de la classe que vous souhaitez conserver. Lorsque vous spécifiez un nom de classe, vous pouvez fournir une liste, facultativement avec "!" pour exclure les noms. Lorsque vous spécifiez un nom et un type de membre de classe, cela n'est pas possible. Cependant, dans les deux cas, vous pouvez utiliser des caractères génériques. Si vous choisissez des noms spéciaux pour vos classes internes, cela pourrait fonctionner:

-keep public class * { 
    public protected *** !myInternalField*; 
    public protected *** !myInternalMethod*(...); 
} 
+0

Merci. Marquer comme une réponse, même si malheureusement, il ne répond pas vraiment à ma question, mais il me dit que ce n'est pas actuellement supporté. – Sebastian

Questions connexes