web-dev-qa-db-ja.com

Jackson JSONプロセッサ用にPROGUARDをセットアップする方法は?

私のアプリではJackson JSONプロセッサを使用しています。

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

そして私のプロガードの設定です。

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

ただし、デバッグモードでコンパイルしようとすると、次のエラーが発生します。

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)

長い間取り組んでいます!ご協力をよろしくお願いします!ありがとう!

25
goonerDroid

多くのデバッグが最終的に答えを見つけた後、私の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*();
}

クラスは、応答の解析に使用しているゲッターセッタークラス/クラスを表します。

また、compile 'com.fasterxml.jackson.core:jackson-core:2.4.2'以前に見つからなかったGradleファイルに。今私のプロガードは獣のように動作します.. ;-)

59
goonerDroid

@goonerDroidの作業を少し変更しました

-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