2017-04-26 56 views
1

我使用翻新2.1.0傑克遜2.8.6解析器。 但是,如果Pro Guard啓用它不起作用。啓用Pro Guard後傑克遜解析器不起作用

Exeption日誌:

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] 

版本庫在我的gradle產出:用於改造和傑克遜

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 anotation下默認空構造:

@Keep 
public MyClass(){ 
//do not delete 
}