2011-10-24 11 views
18

Sto usando proguard per offuscare la mia applicazione Android. L'applicazione Android contiene un codice nativo, che rende i callback a metodi java pienamente qualificati. Non ho bisogno di offuscare queste classi e i nomi dei loro metodi. Il sotto mantiene correttamente i nomi delle classi, ma non i nomi dei metodi.In proguard, come conservare un insieme di nomi di metodi di classi?

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

risposta

48

Per i metodi nativi: ProGuard manual > Examples > Processing native methods

-keepclasseswithmembernames class * { 
    native <methods>; 
} 

In questo caso, per i metodi di callback: ProGuard manual > Examples > Processing callback methods

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

O per esempio, se tutti i metodi pubblici possono essere i metodi di callback:

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

Probabilmente anche necessario mantenere tutte le classi di programma che si verificano nei descrittori di metodo.

+0

funziona. grazie. – ab11

+0

Questo mi aiuta molto. Grazie! –

+0

come posso conservare il codice definito dall'utente? –

2

Prova:

-keepclasseswithmembernames class * { 
    native <methods>; 
} 

Dal manuale ProGuard: http://proguard.sourceforge.net/manual/examples.html#native

+2

Il tuo suggerimento non funziona per me. Devo conservare i nomi dei metodi dei metodi non nativi che vengono chiamati dal codice nativo. Il tuo suggerimento mantiene i nomi delle classi di classi che contengono metodi nativi. – ab11

Problemi correlati