我需要使所有模型类保持一致,因此我在proguard规则中添加了以下行以保留所有模型类:

-keep class my_package_name.model.** { *; }

该命令将保留所有模型类,但是仍然混淆了模型类内部的注释。我尝试添加以下行:
-keepattributes *Annotation*
-keepattributes EnclosingMethod

但是结果还是一样。我的模型类包含以下两个注释:
@SerializedName("message")
@Expose
private String message;

如何使两个注释保持一致?

最佳答案

在处理字段时,Gson使用存储在类文件中的泛型类型信息。
Proguard默认会删除此类信息,因此请对其进行配置以保留所有信息。

尝试添加

-keepattributes Signature
-keepattributes EnclosingMethod
-keepattributes InnerClasses
-keepattributes Annotation

用于使用GSON @Expose批注
-keepattributes *Annotation*

对于Gson特定类(class)
-keep class sun.misc.Unsafe { *; }

防止proguard从TypeAdapterFactory,JsonSerializer,JsonDeserializer实例中剥离接口(interface)信息(因此可以在@JsonAdapter中使用它们)
-keep class * implements com.google.gson.TypeAdapterFactory
-keep class * implements com.google.gson.JsonSerializer
-keep class * implements com.google.gson.JsonDeserializer

07-27 19:13