web-dev-qa-db-fra.com

En proguard, comment préserver un ensemble de noms de méthode de cours?

J'utilise PROGUARD pour obfusez mon application Android. L'application Android contient du code natif, ce qui rend les rappels à des méthodes entièrement qualifiées Java. Je n'ai pas besoin de ne pas obscorer ces classes et les noms de leurs méthodes. Le ci-dessous conserve correctement les noms de classe, mais pas les noms de méthodes.

-keep public class com.me.dontobf.*
-keepnames public class com.me.dontobf.*
24
ab11

Pour les méthodes natives: Manuel de PROGUARD> Exemples> Traitement des méthodes natifs

# note that <methods> means any method
-keepclasseswithmembernames,includedescriptorclasses class * {
    native <methods>;
}

Dans ce cas, pour les méthodes de rappel: Manuel de PROGUARD> Exemples> Traitement des méthodes de rappel

-keep class mypackage.MyCallbackClass {
    void myCallbackMethod(Java.lang.String);
}

Ou par ex., Si toutes les méthodes publiques peuvent être des méthodes de rappel:

-keep class mypackage.MyCallbackClass {
    public <methods>;
}

Vous devez probablement également conserver toutes les classes de programme qui se produisent dans les descripteurs de la méthode.

56
Eric Lafortune

Essayer:

-keepclasseswithmembernames class * {
    native <methods>;
}

Du manuel PROGUARD: http://proguard.sourceforge.net/manual/examples.html#native

2
Marc Bernstein