proguard和com.google.code.gson:gson:2.3.1'库

时间:2015-10-27 11:44:06

标签: android gson android-proguard

我找到了与com.google.gson库相关的proguard问题和答案,但没有找到与com.google.code.gson相关的问题:gson:2.3.1'文库

我正在使用'com.google.code.gson:gson:2.3.1'库。没有proguard它的工作正常,但当我启用proguard时,下面的代码给出了错误的结果。

 Gson gson = new Gson();
            UserDetails userDetails = gson.fromJson(response, UserDetails.class);
            if (userDetails != null) {
                Logger.appendInfoLog("gsonData" + userDetails, "gsonData");
                Logger.appendInfoLog("gsonData" + userDetails.getCity(), "cityName");
            }

在此代码中,userDetails.getCity()返回null。

我所尝试的是: - 为了防止这个库在proguard-rules.pro中进行模糊处理,我已经宣布它是这样的

-keep class com.google.code.gson.**

但它不起作用,感谢任何帮助

2 个答案:

答案 0 :(得分:1)

Gson默认使用成员字段名称(通过反射)进行解析,因此如果您使用ProGuard等工具,您的班级UserDetails将会更改其成员字段名称。你要做的就是让proguard不要模糊你的模型类。

例如:如果你的模型类在mypackage.model包中,你可以添加规则:

  

-keep class mypackage.model。** {*; }

     

-keepclassmembers class mypackage.model。** {*; }

答案 1 :(得分:0)

您是否为UserDetails中的每个字段都有 @SerializedName()注释? Proguard模糊了所有名称(类/字段/方法名称),因此gson不会在您的类中找到字段。