涉及
Gson
解析Json
数据时使用@SerializedName
注解设置实体别名。
问题描述
项目运行Debug包时,能正常解析,当打 release 包时,出现部分数据解析错误,甚至是直接为 null,一瞬间很懵。
部分代码如下:
@SerializedName(value = "USER_NAME", alternate = {"user_name","username"})
private String userName;
说明:alternate 表示设置json转bean时的别名,value 表示默认名称
解决方案
proguard-rules.pro 文件中设置混淆
-keepattributes Signature
-keep class com.xx.xxx.beans.** {*;}
-keep class * implements com.google.gson.TypeAdapterFactory
-keep class * implements com.google.gson.JsonSerializer
-keep class * implements com.google.gson.JsonDeserializer
-keepclassmembers,allowobfuscation class * {
@com.google.gson.annotations.SerializedName <fields>;
}
com.xx.xxx.beans
表示实体的包名
解释说明:build.gradle 中release配置 minifyEnabled true
开启混淆后导致,配置取消SerializedName
的混淆成功序列化。