ProGuard 和 'com.google.code.gson:gson:2.3.1' 库的问题



我发现了与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.**

但它不起作用,任何帮助都值得

Gson默认使用成员字段名称(通过反射)进行解析,因此如果使用ProGuard等工具,则类UserDetails的成员字段名称将发生更改。你必须做的是防止proguard混淆你的模型类。

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

-保留类mypackage.model.**{*;}

-keepclassmembers类mypackage.model.**{*;}

UserDetails中的每个字段都有@SerializedName()注释吗?Proguard会混淆所有名称(类/字段/方法名称),因此gson不会在类中找到字段。

最新更新