Gson fromJson 在 Proguard 之后返回 null
Posted
技术标签:
【中文标题】Gson fromJson 在 Proguard 之后返回 null【英文标题】:Gson fromJson returns null after Proguard 【发布时间】:2021-03-18 16:03:27 【问题描述】:我们正在使用 Proguard 来混淆我们的 Java 应用程序。我们有一些 POJO 类,其中 Gson 用于在运行时从 json 创建这个对象
package com.example.app;
public class AppConfiguration
private String name;
private String title;
private String details;
AppConfiguration configuration = new Gson().fromJson(value, AppConfiguration.class);
用proguard混淆后,配置返回null。我已经使用 keep 选项来保留 AppConfiguration,但没有帮助
Progarud 选项
-keep class com.example.app.AppConfiguration
【问题讨论】:
【参考方案1】:Gson fromJson 期望 POJO 类成员。所以我们需要保留所有的成员变量。(没有 Proguard 混淆这个属性)。下面的 proguard keep 选项保留了 AppConfiguration 的所有属性
字段序列化名称
@SerializedName("keyType")
String keyType;
proguard 配置
-keepclassmembers,allowobfuscation class *
@com.google.gson.annotations.SerializedName <fields>;
-keep,allowobfuscation @interface com.google.gson.annotations.**
如果您没有机会更改班级,可以使用以下保留选项
-keepclassmembers class com.example.app.AppConfiguration
public protected private *;
#Keep default members & functions
!public !protected !private *;
【讨论】:
如果AppConfiguration
的字段使用@SerializedName
注释,是否需要配置ProGuard 规则?
哦..我没试过。 POJO 类是由另一个团队提供的。这是一个很好的提示。
是的,progaurd 混淆了这些名称,因此 Gson 解析器不知道要匹配哪些值。以上是关于Gson fromJson 在 Proguard 之后返回 null的主要内容,如果未能解决你的问题,请参考以下文章