我和gson有问题。在对象模型中,我添加了SeriableName
Proguard的:
# For using GSON @Expose annotation
-keepattributes *Annotation*
# Gson specific classes
-dontwarn sun.misc.**
-keep class com.google.gson.stream.** { *; }
-keepattributes EnclosingMethod
# Application classes that will be serialized/deserialized over Gson
-keep class com.smartmedia.musicplayer.api.AppSetting { *; }
# Prevent proguard from stripping interface information from TypeAdapterFactory,
# JsonSerializer, JsonDeserializer instances (so they can be used in @JsonAdapter)
-keep class * implements com.google.gson.TypeAdapterFactory
-keep class * implements com.google.gson.JsonSerializer
-keep class * implements com.google.gson.JsonDeserializer
日志崩溃:
java.lang.AssertionError: java.lang.NoSuchFieldException: DESTROYED
at com.google.gson.internal.bind.TypeAdapters$EnumTypeAdapter.<init>(SourceFile:791)
at com.google.gson.internal.bind.TypeAdapters$30.create(SourceFile:817)
at com.google.gson.Gson.getAdapter(SourceFile:423)
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.createBoundField(SourceFile:115)
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields(SourceFile:164)
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(SourceFile:100)
at com.google.gson.Gson.getAdapter(SourceFile:423)
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.createBoundField(SourceFile:115)
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields(SourceFile:164)
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(SourceFile:100)
at com.google.gson.Gson.getAdapter(SourceFile:423)
at com.google.gson.Gson.fromJson(SourceFile:887)
at com.google.gson.Gson.fromJson(SourceFile:853)
at com.google.gson.Gson.fromJson(SourceFile:802)
at com.google.gson.Gson.fromJson(SourceFile:774)
哦,快点,我错过了。
你的问题与Gson无关。您尝试使用Gson.fromJson()
创建的其中一个类正在从您的代码中进行模糊处理。你能生成未经过模糊处理的日志吗?
基本上,你的问题是你的一个类缺少可能由Proguard重命名的字段DESTROYED
。
另一种选择是你的Json数据不正确,它包含字段DESTROYED
,而它不应该在你的代码中。
# Application classes that will be serialized/deserialized over Gson
-keep class com.smartmedia.musicplayer.api.AppSetting { *; }
这还不够。在使用proguard来混淆代码时,您还需要保护类中的成员。在你的情况下,我想建议你的proguard-rules.pro
中添加以下proguard规则。
-keepclassmembers class com.smartmedia.musicplayer.api.AppSetting.** { *; }
希望有所帮助。