2010-12-16 19 views
11

Al usar Proguard con Android, los métodos que solo se invocan a través de la reflexión (por ejemplo, devoluciones de llamada definidas en atributos onClick XML) se eliminan erróneamente.¿Cómo usar las anotaciones Java para guiar Proguard de Android?

One solution para este problema es agregar cada clase y método afectados a su proguard.cfg.

¿Cómo puedo usar las anotaciones Java para lograr el mismo efecto?

Creo que haría que el código se auto-documentara y evitaría que el código y proguard.cfg se salgan de la sincronización. Sin embargo, Proguard de Android no parece enviarse con las anotaciones.jar mencionadas en su documentación.

Respuesta

7

Puede recuperar annotations.jar y annotations.pro de un lanzamiento oficial ProGuard. Debería poder usar anotaciones como se explica en here

Todas las opciones necesarias pueden ir en proguard.cfg.

5

Corrí a este problema recientemente. Esto es lo que tiene que hacer:

Para solucionar los eventos onClick añadir esto a la configuración de Proguard

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

Para mantener anotación añadir

-keepattributes ** o -keepattributes *Annotation*

Más información está disponible aquí http://www.simpligility.com/2010/12/hints-for-using-proguard-on-your-android-app/ Yo uso maven-android-plugin para compilar la aplicación de Android y este artículo básicamente resume lo que hago para que el android funcione. ¡Espero que esto ayude!

+0

Aunque su primer consejo no responde del todo la pregunta, probablemente sea una mejor solución para mi problema. ¡Gracias! –

+1

+1 por: -keepattributes ** o -keepattributes * Anotación *. De lo contrario, tus anotaciones aún serán eliminadas – Entreco