2017-04-26 7 views
1

私はを使用しています。Retrofit 2.1.0Jackson 2.8.6パーサを使用しています。 しかし、Pro Guardが有効になっていると、動作しません。ログ内の有効化後Pro Guard Jacksonパーサーが機能しない

Exeption:私のGradle内のlib

D/EXAMPLE_PROJ: Class com.example.network.d.b.a.m$a has no default (no arg) constructor 
at [Source: [email protected]; line: 1, column: 1] 

バージョン:

dependencies { 
    def supportLibraryVersion = "25.3.1" 
    def retrofitVersion = "2.1.0" 
    def playService = '10.2.0' 
    def jacksonVersion = "2.8.6" 

改造とジャクソンのための私のプロガードルール:

# Retrofit2 
-dontwarn okio.** 
-dontwarn retrofit2.Platform$Java8 

# Jackson 
-keepnames class com.fasterxml.jackson.** { *; } 
-dontwarn com.fasterxml.jackson.databind.** 
-dontwarn org.codehaus.jackson.** 
-dontwarn javax.xml.** 
-dontwarn javax.xml.stream.events.** 
-keep class org.codehaus.** { *; } 
-keepclassmembers public final enum org.codehaus.jackson.annotate.JsonAutoDetect$Visibility { 
public static final org.codehaus.jackson.annotate.JsonAutoDetect$Visibility *; } 

-keepclassmembers class * { 
    @com.fasterxml.jackson.annotation.JsonCreator *; 
    @com.fasterxml.jackson.annotation.JsonProperty *; 
} 
-keepnames class com.fasterxml.jackson.** { *; } 

私は喜んでいるでしょう助けて!

答えて

1

この場合、解決策は非常に簡単です。問題は、Proguardが空のコンストラクタをネットワーククラスで削除することです。

1)だから、私はproguard-rules.proするためにこれを追加しました:

-keep public class com.example.network.** 

2)また、デフォルト空のコンストラクタ下@Keepの注釈を追加しました:

@Keep 
public MyClass(){ 
//do not delete 
} 
関連する問題