¿Cómo no ofuscar los métodos de interfaz y sus parámetros usando Progaurd en android?

Tengo el siguiente código

public class MyClass { public void method1(Integer marks) { } private String method3(String name){ } public interface interface1 { void method4(Integer ID); void method5(Integer rate, boolean status); } } 

He utilizado progaurd-rules.pro

 -keepattributes Exceptions,InnerClasses,Signature,Deprecated,SourceFile,LineNumberTable,*Annotation*,EnclosingMethod -keepparameternames -keep public class * -keepclassmembers public class *{ public *; } -keep public interface packageName.MyClass$interface1 { *; } 

Código ofuscado como se indica a continuación:

 public class MyClass { public void method1(Integer marks) { } private String a(String var1){ } public interface interface1 { void method4(Integer var1); void method5(Integer var1, boolean var2); } } 

Quiero que las variables de los métodos de interfaz (ID, tasa y estado) no ofusquen. Como se indica a continuación

  public interface interface1 { void method4(Integer ID); void method5(Integer rate, boolean status); } 

¿Puede alguien sugerir cómo puede ser posible?

Puede mantener los argumentos del método añadiendo indicadores adicionales a -keepattributes . Ellos se parecen a esto:

 -keepattributes LocalVariableTable,LocalVariableTypeTable 

Desafortunadamente, esto mantiene los argumentos de ofuscación no sólo en la interfaz que desea, sino en todo el proyecto. Tal vez eso está bien para usted.

Si está usando una configuración predeterminada de proguard enviada junto con SDK de Android, también podría usar una anotación especial para evitar que algunas clases de ofuscación. Compruébelo .

Reglas de Proguard


Para Interfaces

Para mantener las clases de interfaz para mantener el uso

 -keep public interface 

Ejemplo: -keep public interface packageName.yourclass$interface1 { *; } -keep public interface packageName.yourclass$interface1 { *; }

Mantener los miembros de la interfaz

 -keep interface * { <methods>; } 

De acuerdo con la documentación de ProGuard, el comodín coincide con cualquier campo.

La palabra clave de clase se refiere a cualquier interfaz o clase. La palabra clave de interfaz restringe las coincidencias con las clases de interfaz. La palabra clave enum restringe coincidencias con las clases de enumeración. Precediendo la interfaz o palabras clave de enum por un! Restringe las coincidencias a clases que no son interfaces o enumeraciones, respectivamente.

 -keep public interface com.somepackage.SomeClass$someInterface { private <fields>; } 

No estoy seguro de probar esto también

 -keepclasseswithmembers class com.somepackage.SomeClass$someInterface{ void method4*(...); void method5*(...); } 

ProGuard utiliza la convención de nomenclatura del bytecode Java, como se ve en los nombres de archivos de clase y stacktraces. Por lo tanto:

 -keep public interface com.somepackage.SomeClass$someInterface {*;} 

En caso de que su interfaz no sea pública.

 -keep interface com.somepackage.SomeClass$someInterface {*;}. 
  • Android: Configuración de Proguard para ofuscar nombres de clases y métodos
  • Obfuscate / Encrypt SharedPreferences archivo posible?
  • Proguard warning: la configuración mantiene el punto de entrada ... pero no la clase descriptor
  • JNI proguard obfuscation
  • Proguard y Netty 5 en Android
  • Ejecución de ProGuard con una biblioteca AQuery
  • Bloqueo usando ORMLite en Android con proguard
  • Java y Android Obfuscator Sugerencia de herramienta
  • Exportación de un proyecto de Android durante el uso de proguard en adt & sdk 20
  • ¿Hay una manera de detectar si un apk ha sido ofuscado?
  • Ofuscación en Android Studio
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.