¿Cómo mantener los nombres de métodos de clase que anulan \ implementa otro método de ser ofuscado?

Si tengo una Class B que implementa la Interface A y Proguard no es consciente de la existencia de esa interfaz, ¿cómo puedo mantener los nombres de los métodos que implementa los métodos abstractos de la interfaz A?

Observe por favor que deseo guardar los nombres del método, pero deseo que su contenido sea ofuscado.

Actualización: Esto es lo que tengo (Por favor note los comentarios):

 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 } } 

Quiero una solución general para este tipo de casos – No quiero declarar nombres de interfaces en la configuración de ProGuard.

  • Mantener todos los nombres de las clases públicas y mantener (evitar la ofuscación) de sus métodos públicos y protegidos.
  • En las clases no públicas y mantener (evitar la ofuscación) todos los métodos públicos y protegidos. Esto mantendrá los métodos que podrían implementar o extender otros métodos, de ser ofuscados.
  • No guarde los atributos de variables locales (asegúrese de que "LocalVariableTable" y "LocalVariableTypeTable" no se indican en la opción "-keepattributes").

Así que su archivo .pro debería verse así –

 #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* 

Tengo writtern un blog para Progaurding la aplicación de Android. Por favor revise el siguiente enlace

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

ProGuard puede hacer lo que usted describe. Si no desea que cambie el nombre de clases y métodos, pruebe el siguiente:

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

Espero que esto ayude

  • Nota: com.google.common.cache.Striped64 accede dinámicamente a un campo declarado 'base'
  • Android: Errores de clase duplicados en proguard
  • ¿Cómo hacer que Proguard ignore las bibliotecas externas?
  • ¿Cómo funciona Proguard en Intellij Idea?
  • Android pesadilla proguard
  • Proguard devuelto con código de error 1. Ver consola de Android
  • Cómo configurar proguard para eliminar SOLAMENTE llamadas de registro de android
  • Configuración de Android Proguard para la v7 Support Library ActionBar
  • ¿Cómo obfuscate el proyecto con Dagger 2.0 usando Proguard?
  • Proguard: excluir el frasco externo de la biblioteca de la ofuscación
  • Android Studio - ProGuard "java.io.IOException ... bin \ classes (Ningún archivo o directorio)"
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.