java - 启用 Pro Guard Jackson 解析器后不起作用

标签 java android jackson proguard retrofit2

我使用 Retrofit 2.1.0Jackson 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/

相关文章:

Android 从 activity/asynctask 启动服务

java - Thymeleaf Map<String, Object> 迭代和映射键中的非英语字符

java - Java 和 JNI (dll) 之间的索引越界异常

java - 从关闭文件方法抛出 IOException 时如何管理事务(包括文件 IO)

java - 无法从服务器 : Google Cloud Messaging 发布消息

java - 除了 Jackson 之外,还有其他东西可以在 Java 中处理复杂的对象吗?

android - 来自支持 v7 库的 ShareActionProvider 不起作用

java - 如何在mainActivity中初始化界面

json - 如何使用 JPA 和 Hibernate 自动序列化和反序列化 JSON 字符串?

java - Scala 从 1.9 到 2.1 中的 Jackson 注释被破坏