Bonjour, j'écris une application Android et j'ai configuré Proguard pour masquer mon application. J'utilise cependant un chargeur de classe pour charger dynamiquement différentes extensions dans mon application. Le problème est que celles-ci ne se chargent pas correctement si leurs noms sont modifiés. Comment empêcher Proguard de masquer des noms de classe spécifiques?
Utilisez le -keepnames
option dans votre proguard.cfg
Reportez-vous au manuel https://www.guardsquare.com/en/proguard/manual/usage#keepoptions :
-keepnames
spécification_classeCourt pour
-keep,allowshrinking
spécification_classeSpécifie les classes et les membres de classe dont les noms doivent être conservés, s'ils ne sont pas supprimés dans la phase de réduction. Par exemple, vous souhaiterez peut-être conserver tous les noms de classe des classes qui implémentent l'interface Serializable, afin que le code traité reste compatible avec toutes les classes sérialisées à l'origine. Les classes qui ne sont pas utilisées du tout peuvent toujours être supprimées. Uniquement applicable en cas d'obscurcissement.
Cela conserve les noms de classe intacts:
-keepnames class com.somepackage.*
Astuce pratique pour tous ceux qui ne veulent pas que ProGuard change tout nom de classe:
# please KEEP ALL THE NAMES
-keepnames class ** { *; }
De cette façon, vous obtiendrez des traces de pile lisibles tout en jetant les choses dont vous n'avez pas besoin. :-)
Si quelqu'un souhaite savoir comment spécifier plusieurs noms de classe à conserver, ces classes peuvent être séparées par une virgule. Exemple:
-keepnames class com.foo.**,com.bar.** { *; }
Il est également possible d'utiliser la négation avec cela, car généralement les propres classes qui doivent être obscurcies, les bibliothèques tierces du système d'exploitation peuvent être conservées:
-keepnames class !com.foo.**,!com.bar.** { *; }
Voir Proguard Documentation pour cela.