启用Pro Guard Jackson解析器后无效

时间:2017-04-26 10:25:09

标签: java android jackson proguard retrofit2

我将 Retrofit 2.1.0 Jackson 2.8.6 解析器一起使用。 但是如果Pro Guard启用它就不起作用。

日志中的执行:

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

我的gradle中的版本lib:

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 个答案:

答案 0 :(得分:2)

在这种情况下,解决方案非常简单。问题是Proguard在网络类中删除了我的空构造函数。

1)所以,我把它添加到proguard-rules.pro:

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

2)还在默认的空构造函数下添加了@Keep anotation:

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