Android proguard和'的问题;gson:gson:2.3.1';图书馆

Android proguard和'的问题;gson:gson:2.3.1';图书馆,android,gson,android-proguard,Android,Gson,Android Proguard,我发现proguard问题和答案与com.google.gson库有关,但与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

我发现proguard问题和答案与com.google.gson库有关,但与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.**

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

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

默认情况下,Gson使用成员字段名(通过反射)进行解析,因此如果使用ProGuard之类的工具,您的类
UserDetails
将更改其成员字段名。您必须做的事情是防止proguard混淆您的模型类

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

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

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


我使用了-keepclassmembers公共类com.leadsquared.app.models.*{;}而不是保留类mypackage.model.*{;},它工作得很好,请在您的答案中加入以下语句:)