2011-05-21 10 views
12

Estoy usando el atributo en algunos de mis archivos de diseño .xml para mi aplicación de Android, pero ProGuard está eliminando estos métodos de mi código cuando se ejecuta porque nada en mi código los está llamando.¿Cómo puedo decirle a ProGuard que mantenga mi función que se usa para onClick?

En lugar de especificar cada función individualmente, me gustaría llamarles algo así como listener_functionName, y usar comodines, como -keep listener_* (sé que esto es incorrecto, pero espero que ilustre mi objetivo).

Si esto es posible, sería genial, pero si no es así, todavía necesito saber cómo especificar estas funciones en el archivo proguard.cfg. Cualquier ayuda es apreciada.

Respuesta

18

Según proguard documentación:

campos y métodos también pueden ser especificado utilizando expresiones regulares. Los nombres pueden contener los siguientes comodines :? coincide con cualquier carácter en el nombre de un método. * coincide con cualquier parte del nombre de un método.

es así, usted será encontrar la especificación de

-keep class com.example.MyClass { 
    public void listener_*(android.view.View); 
} 

en sus banderas Proguard.

+0

Hola Diego, ¿podrías echar un vistazo a mi pregunta [aquí] (http://stackoverflow.com/q/37314760/3287204)? Gracias ... –

3

Puede hacerlo una vez para todas sus clases en esta forma:

-keepclasseswithmembers class * { 
    void listener_*(...); 
} 
+0

Buena sugerencia, aunque luego debe usar -veepclasseswithmembers en lugar de -keepclasseswithmembernames, para evitar que se eliminen los métodos de los nombres * y *. –

+0

Tienes razón. Tuve -dontshrink en mi config y con él era lo mismo, pero en general -eepclasseswithmembers es mejor. Edité mi respuesta de esta manera. – ggurov

0

Un enfoque un poco más codiciosos que deben mantener todos los métodos "onclick":

-keepclassmembers class * { 
    public void * (android.view.View); 
} 

==> modo básicamente, cada método público que tenga una vista de Android como el único Paramater debería sobrevivir a ProGuard.

Cuestiones relacionadas