2013-07-16 8 views
5

Se ho un Class B che implementa Interface A e Proguard non è a conoscenza dell'esistenza di tale interfaccia, Come posso mantenere i nomi dei metodi che implementano i metodi astratti dell'interfaccia A?Come mantenere i nomi dei metodi di classe che eseguono l'override implementa un altro metodo dall'essere offuscato?

Si prega di notare che voglio mantenere i nomi dei metodi, ma voglio che il loro contenuto sia offuscato.

Aggiornamento: Questo è ciò che ho (Si prega di notare le osservazioni):

public class MyService extends Service { 

    // an anonymous class that implements ServiceConnection 
    private ServiceConnection myConnection = new ServiceConnection() 
    { 
     // don't change the following method's name 
     @Override 
     public void onServiceConnected(ComponentName className, IBinder service) 
     { 
      // I want this section to be obfuscated 
     } 

} 

Voglio una soluzione generale per questo tipo di casi - Io non voglio interfacce statali nomi del Configurazione ProGuard.

+0

@Raghunandan il commento che hai postato è irrelavant !! Hai risposto alla domanda di qualcun altro qui !! Si prega di trovare il mio blog per Progaurd a http://techspreadwithshraddha.wordpress.com/2013/03/26/android-progaurd/ – Shraddha

+0

@Shraddha grazie per ricordare. probabilmente ha aperto una scheda sbagliata del mio browser. – Raghunandan

risposta

6
  • Mantenendo tutti i nomi di classe pubblico e conservare (prevenire offuscamento) di loro pubblico e metodi protetti.
  • In classi non pubbliche e mantenere (impedire l'offuscamento) tutti i metodi protetti pubblici e . Ciò manterrà i metodi che potrebbero implementare o estendere altri metodi, dall'essere offuscati.
  • Non mantenere gli attributi delle variabili locali (rendere sicuro che "LocalVariableTable" e "LocalVariableTypeTable" non sono indicati nell'opzione "-keepattributes").

Quindi il file .pro dovrebbe essere così -

#Keeping all public class names and keep (prevent obfuscation) of their public and protected methods 
-keep public class * { 
    public protected <methods>; 
} 

# Keep (prevent obfuscation) all public and protected methods in non-public classes. 
# Notice that the non-public class names will still get obfuscated 
-keepclassmembers !public class * { 
    public protected <methods>; 
} 

# Don't keep the local variables attributes (LocalVariableTable and LocalVariableTypeTable are dropped). 
-keepattributes Exceptions,Signature,Deprecated,SourceFile,SourceDir,LineNumberTable,Synthetic,EnclosingMethod,RuntimeVisibleAnnotations,RuntimeInvisibleAnnotations,RuntimeVisibleParameterAnnotations,RuntimeInvisibleParameterAnnotations,AnnotationDefault,InnerClasses,*Annotation* 
+0

+1 Risolve il problema – Shraddha

+0

@RonTesler, Come offuscare solo una classe e il suo metodo pubblico? –

0

Ho scritto un blog per Progaurding per l'applicazione Android. Si prega di verificare sul link qui sotto

http://techspreadwithshraddha.wordpress.com/2013/03/26/android-progaurd/

ProGuard può fare ciò che si descrive. Se non si desidera rinominare classi e metodi, Si prega di provare la seguente: Speranza

-keep,allowshrinking,allowoptimization class * { <methods>; } 

questo aiuta

+0

Scusa se non sono stato chiaro a riguardo - Non voglio specificare il nome dell'interfaccia. Sto cercando di trovare una soluzione generale. È possibile? –

+0

Ho modificato la mia risposta. Notare il '*' nella risposta, scrivere '*' ogni volta che si desidera mantenerlo generico. Per favore segui il blog che ti aiuterà. Ha un esempio per l'applicazione Android – Shraddha

+0

Correggetemi se ho torto, ma facendo come suggerito, mantiene il nome della classe e tutti i nomi dei metodi, ma anche questi non verranno offuscati. –

Problemi correlati