发布版本的 Gson 解析问题 - 返回错误的字符串

G. *_*ini 1 java android json release gson

您好,我在发布版本中遇到了 Gson 库的问题。

实际上,在我的应用程序的发行版本中,使用该new Gson().toJson(obj)方法会返回错误的字符串。

返回的字符串缺少我的对象的某些字段。发布版本是否可能需要一些缺失的选项?

以下是一些有用的信息:

  • obj是一个实例ArrayList<MyClass>
  • 我在用着implementation 'com.google.code.gson:gson:2.8.5'
  • 我在用着Android Studio 3.5.1

MyClass 的构建如下:

public class MyClass{

    @SerializedName("a")
    private String a;

    @SerializedName("b")
    private Integer b;

    @SerializedName("c")
    private String c;

    @SerializedName("d")
    private String d;

    public String getA() {
        return a;
    }

    public void setA(String a) {
        this.a = a;
    }

    ...

}
Run Code Online (Sandbox Code Playgroud)

例子:

MyClass example = new MyClass("a","b","c","d");

ArrayList<MyClass> listExample = new ArrayList<MyClass>();
listExample.add(example);

String strObj = new Gson().toJson(listExample);
Run Code Online (Sandbox Code Playgroud)

电流输出:

[ 
   { 
      "b":"b",
      "c":"c",
      "d":"d",
   }
]
Run Code Online (Sandbox Code Playgroud)

预期产出

[ 
   { 
      "a":"a",
      "b":"b",
      "c":"c",
      "d":"d",
   }
]
Run Code Online (Sandbox Code Playgroud)

要重现错误,只需关注 github: https: //github.com/Ciardini/error02

小智 5

在发布版本中构建 Android 编译器缩小并优化代码[请参阅 Android 文档]。R8 删除了一些明显无用的信息,这些信息是 Gson 正确序列化对象所必需的。为了防止 R8 剥离此信息,您需要将以下代码添加到 proguard-rules.pro 文件中:

-keep class com.giacomociardini.error02.entities.** { <fields>; }

有关其他详细信息,您可以参考 Gson 官方GitHub存储库上的此示例。