web-dev-qa-db-fra.com

Comment configurer PROGUARD pour le processeur Jackson JSON?

J'utilise le processeur Jackson JSON pour mon application.

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

Et ma configuration proguard est.

## 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.**

Cependant, lorsque j'essaie de compiler en mode débogage, j'obtiens l'erreur suivante.

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)

Travailler dessus pendant longtemps! Je vous serais reconnaissant de votre aide! Merci!

25
goonerDroid

Après beaucoup de débogage, j'ai finalement trouvé la réponse, ma configuration Proguard est

-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*();
}

votre classe décrit les classes/classe getter setter que vous utilisez pour analyser votre réponse.

J'ai aussi ajouté compile 'com.fasterxml.jackson.core:jackson-core:2.4.2' à mon fichier Gradle qui manquait auparavant. Maintenant, mon Proguard fonctionne comme une bête .. ;-)

59
goonerDroid

A modifié un litte de @goonerDroid travail pour moi

-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.** {
    *;
}
2
tanshiwei