我使用 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 中的版本库:
dependencies {
def supportLibraryVersion = "25.3.1"
def retrofitVersion = "2.1.0"
def playService = '10.2.0'
def jacksonVersion = "2.8.6"
我的pro guard retrofit和jackson规则:
# 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.** { *; }
我很乐意提供任何帮助!
最佳答案
在这种情况下,生成解决方案非常简单。问题是 Proguard 删除了我在网络类中的空构造函数。
1) 因此,我将其添加到 proguard-rules.pro 中:
-keep public class com.example.network.**
2) 还在默认的空构造函数下添加了@Keep注解:
@Keep
public MyClass (){
//do not delete
}
关于java - 启用 Pro Guard Jackson 解析器后不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43631498/