Tengo una aplicación que utiliza ActiveAndroid, una base de datos de ORM, que se basa en las anotaciones.

@Table(name="test")
public class DatabaseItem extends ActiveRecordBase<DatabaseItem> {

    public DatabaseItem(Context context) {
        super(context);
        //TODO Auto-generated constructor stub
    }

    @Column(name="counter")
    public int counter;

}

¿Cómo puedo obtener Proguard trabajando muy bien con esto? Actualmente, me da errores de que no puede encontrar el nombre de una columna por ActiveAndroid cuando se utiliza Proguard. Supongo que de alguna manera destroza la anotación.

Mi relevantes Proguard de configuración:

#ActiveAndroid
-keep public class com.activeandroid.**
-keep public class * extends com.activeandroid.ActiveRecordBase
-keepattributes Column
-keepattributes Table
InformationsquelleAutor Peterdk | 2011-09-11

5 Comentarios

  1. 16

    En Marzo de 2013, Proguard la versión 4.9 fue liberado, uno de los arreglos fueron:

    Fixed overly aggressive shrinking of class annotations. 

    Así que asegúrese de que su Proguard versión está actualizada y, a continuación, utilizar Eric Lafortune la solución:

    -keepattributes *Annotation*

    También puede utilizar esta configuración para almacenar todos los miembros de la clase que tiene una anotación específica:

    -keepclassmembers class * {
        @fully.qualified.package.AnnotationType *;
    }
  2. 6

    Solución era mantener a todos los miembros de la biblioteca y las clases de base de datos

    -keep class com.activeandroid.**
    {
         *;
    }
    -keep public class my.app.database.**
    {
        *;
    }
    -keepattributes Column
    -keepattributes Table
    • He utilizado este, pero en lugar de las dos líneas de «-keepattributes» he utilizado esta única línea: «-keepattributes *Anotación*», como se indica por Eric Lafortune y Simon André Forsberg. Todo funcionaba bien ahora!
  3. 2

    Para aquellos que sólo mediante Gradle, la solución es muy similar (nótese las comillas simples alrededor de la Anotación):

    keep 'public class java.package.** { *; }'
    
    keepattributes '*Annotation*'

    Esto es especialmente útil si usted está usando serialización JSON anotaciones (por ejemplo, Jackson o similares) en una de vainilla Gradle proyecto.

  4. 0

    Esto lo que ha funcionado en mi caso:

    -keep class com.activeandroid.** { *; }
    -keep class com.activeandroid.**.** { *; }
    -keep class * extends com.activeandroid.Model
    -keep class * extends com.activeandroid.serializer.TypeSerializer
    -keep public class * extends com.activeandroid.ActiveRecordBase
    
    -keepattributes Column
    -keepattributes Table
    -keepattributes *Annotation*
    -keepclasseswithmembers class * { @com.activeandroid.annotation.Column <fields>; }

Dejar respuesta

Please enter your comment!
Please enter your name here