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手册