2012-07-23 18 views
23

Tengo un montón de clases que usan p. una anotación @Singleton comoMantener clase anotada en Proguard

@Singleton 
public class ImageCache 

que me gustaría conservar. ¿Cómo puedo configurar una declaración proguard -keep para que se aplique a todas las clases que tienen esa anotación?

Btw en términos de contexto Lo necesito para una aplicación que use Roboguice en Android, y es por eso que agregué las etiquetas. Podría ayudar a otros.

Respuesta

32

ProGuard se basa en una configuración tipo java con comodines. Requiere nombres de clase completamente calificados. Esto debería funcionar:

-keep @com.google.inject.Singleton public class * 
+6

Éste es un pedazo de oro. Es muy útil mantener las clases de jackson 1, jackson 2 y gson anotadas. ;) Eric, creo que el manual de proguard debería ser más explícito sobre el mantenimiento de clases anotadas, métodos, campos, etc. – Snicolas

+0

Tuve que agregar también keepclassmembers. Pero dio una buena idea, así que +1 –

+2

Además, si usa anotaciones personalizadas, asegúrese de que RetentionPolicy sea CLASS o RUNTIME, de lo contrario, proguard no podrá encontrarlas. – Alex

2

En primer lugar definir una anotación

public @interface DoNotStrip {} 

A continuación, poner esto en proguard.cfg:

-keep,allowobfuscation @interface com.something.DoNotStrip 

# Do not strip any method/class that is annotated with @DoNotStrip 
-keep @com.something.DoNotStrip class * 
-keepclassmembers class * { 
    @com.something.DoNotStrip *; 
} 
Cuestiones relacionadas