现状
我有一个模型,其中 UserSettingModel 类有两个字段:long UserId 并具有一个名为 Settings 的类 UserSettings 示例(具有许多字段)。
警告:我的代码中没有直接使用这些字段(在 Android Studio 中,此字段的颜色为灰色),但我需要将其重新发送到服务器。
public class UserSettingsModel
{
@SerializedName("UserId")
public long UserId = -1L;
@SerializedName("Settings")
public UserSettings Settings;
}//end of class/ UserSettingsModel
class UserSettings
{
@SerializedName("showRegion")
public String showRegion = "";
@SerializedName("showAddress")
public String showAddress = "";
}
问题
如果在 Debug模式下使用 apk:GSON 反序列化 UserSettingModel 类的所有字段,包括设置
如果在 RELEASE 模式下使用 apk:字段设置 - 不反序列化
我的前卫:
-keepattributes Signature
-keepattributes *Annotation*
-keep class sun.misc.Unsafe { *; }
-keep class com.google.gson.stream.** { *; }
-keep class com.google.gson.examples.android.model.** { *; }
-keep class com.google.gson.** { *; }
-keepclassmembers enum * { *; }
-keep class * implements com.google.gson.TypeAdapterFactory
-keep class * implements com.google.gson.JsonSerializer
-keep class * implements com.google.gson.JsonDeserializer
我需要什么
如何在 Release模式下使用 GSON 序列化/反序列化所有类的字段,同时警告“字段从未使用”?
最佳答案
这是因为混淆,正如 DQuade 在评论中所说的那样。
要防止 gradle 删除它们,您可以在 proguard-rules.pro 文件中添加特定类:
-keepclassmembers class [yourPackageName].UserSettingsModel
-keepclassmembers class [yourPackageName].UserSettings
或阻止 gradle 删除所有带有 SerializedName
注释的成员注解:-keepclassmembers class * {
@com.google.gson.annotations.SerializedName <fields>;
}
关于android - Gson 不会反序列化从未使用过的字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45983696/