2014-12-29 18 views
20

Sto usando Jackson JSON processore per il mio app.Included questo utilizzaCome configurare PROGUARD per Jackson JSON Processor?

compile 'com.fasterxml.jackson.core:jackson-databind:2.4.2' 
compile 'com.fasterxml.jackson.core:jackson-annotations:2.4.2'. 

E la mia configurazione è Proguard.

## BEGIN -- Google Play Services proguard.txt 
-keep class * extends java.util.ListResourceBundle { 
    protected java.lang.Object[][] getContents(); 
} 
# Keep SafeParcelable value, needed for reflection. This is required to support backwards 
# compatibility of some classes. 
-keep public class com.google.android.gms.common.internal.safeparcel.SafeParcelable { 
    public static final *** NULL; 
} 
# Keep the names of classes/members we need for client functionality. 
-keepnames @com.google.android.gms.common.annotation.KeepName class * 
-keepclassmembernames class * { 
    @com.google.android.gms.common.annotation.KeepName *; 
} 
# Needed for Parcelable/SafeParcelable Creators to not get stripped 
-keepnames class * implements android.os.Parcelable { 
    public static final ** CREATOR; 
} 
## END -- Google Play Services proguard.txt 

-keepattributes Signature,RuntimeVisibleAnnotations,AnnotationDefault 

-dontskipnonpubliclibraryclassmembers 
-dontskipnonpubliclibraryclasses 
-keepattributes *Annotation*. 
-keep class org.codehaus.jackson.** 




-dontwarn twitter4j.** 
-dontwarn com.facebook.android.BuildConfig 
-dontwarn org.apache.commons.** 
-keep class org.apache.http.** { *; } 
-dontwarn org.apache.http.** 
-dontwarn com.nhaarman.listviewanimations.** 

Tuttavia quando provo a compilare in modalità di debug ottengo il seguente errore.

26207-26207/com.blah E/AndroidRuntime﹕ FATAL EXCEPTION: main 
    Process: com.blah, PID: 26207 
    java.lang.NoSuchFieldError: PUBLIC_ONLY 
      at java.lang.Class.getDeclaredAnnotation(Native Method) 
      at java.lang.Class.getAnnotation(Class.java:290) 
      at com.b.a.c.f.ah.<clinit>(Unknown Source) 
      at com.b.a.c.z.<clinit>(Unknown Source) 
      at com.blah.utils.c.<init>(Unknown Source) 
      at com.blah.main.a.a(Unknown Source) 
      at com.blah.main.b.a.a(Unknown Source) 
      at com.blah.main.b.a.onCreateView(Unknown Source) 

Lavorare su di essa per molto tempo! Apprezzerebbe il vostro aiuto! Grazie!

risposta

53

Dopo molte debug finalmente trovato la risposta la mia configurazione Proguard è

-keepattributes *Annotation*,EnclosingMethod,Signature 
-keepnames class com.fasterxml.jackson.** { *; } 
-dontwarn com.fasterxml.jackson.databind.** 
-keep class org.codehaus.** { *; } 
-keepclassmembers public final enum org.codehaus.jackson.annotate.JsonAutoDetect$Visibility { 
    public static final org.codehaus.jackson.annotate.JsonAutoDetect$Visibility *; } 
-keep public class your.class.** { 
    public void set*(***); 
    public *** get*(); 
} 

vostra classe rappresenta la classi setter getter/classe che si utilizza per analizzare la vostra risposta.

Inoltre ho aggiunto compile 'com.fasterxml.jackson.core:jackson-core:2.4.2' al mio file Gradle che mancava in precedenza. Ora il mio Proguard lavora come una bestia .. ;-)

+0

Grazie per aver ricordato la bandiera della firma in -keepattributes che alla fine hanno fatto le mie impostazioni Proguard funzionano. – Nantoka

1

modificato un pò dal lavoro @goonerDroid per me

-keepattributes *Annotation*,EnclosingMethod,Signature 
-keepnames class com.fasterxml.jackson.** { *; } 
-dontwarn com.fasterxml.jackson.databind.** 
-keep class org.codehaus.** { *; } 
-keepclassmembers public final enum org.codehaus.jackson.annotate.JsonAutoDetect$Visibility { 
    public static final org.codehaus.jackson.annotate.JsonAutoDetect$Visibility *; } 
-keep public class your.class.** { 
    *; 
} 
+0

infatti non è necessario specificare i metodi getter e setter! – goonerDroid

Problemi correlati