ProGuard混淆,java,Google Gson和通用集合 – 如何保留成员?

我有一个这样的课:

public class MyClass { private Queue myQueue; } 

我的问题是我无法让ProGuard在使用Google Gson序列化到json之后保留myQueue。 会发的是会员名称“myQueue”被序列化为“a”。 显然,反序列化会破坏。

以下是我尝试过的一些ProGuard配置。

 -keepclassmembers class com.my.package.MyClass { #private java.util.Queue myQueue; #private java.util.Queue myQueue; private java.* myQueue; } 

 private java.util.Queue myQueue; 

…… ProGuard抱怨说这堂课不详。 消息是:

注意:配置引用未知类java.util.Queue'

运用

 private java.* myQueue; 

….摆脱ProGuard警告,但是,正如我所说,成员myQueue没有保存在json输出中。 它被序列化为“a”。

其余的相关ProGuard配置如下:

 -renamesourcefileattribute SourceFile -keepattributes SourceFile,LineNumberTable -keepattributes *Annotation* #gson -keepattributes Signature -adaptresourcefilenames **.properties,**.gif,**.jpg,**.png,**.wav -adaptresourcefilecontents **.properties,META-INF/MANIFEST.MF -optimizationpasses 3 -overloadaggressively -repackageclasses '' -allowaccessmodification -keep public class com.my.package.MyOtherClass { } -keepclassmembers class com.my.package.MyOtherClass { [a large number of private members are listed] } 

由于java类文件包含擦除的generics,ProGuard也期望擦除类型。 因此,应将java.util.Queue指定为java.util.Queue

如果指定java.** (使用double **来匹配子包中的类),则使用通配符的替代方法也可以。

(CFR)。 ProGuard手册