我有一个这样的课程:
public class MyClass
{
private Queue<MyOtherClass> myQueue;
}
我的问题是我无法让ProGuard在使用Google Gson序列化到json之后保留myQueue。会发的是会员名称“myQueue”被序列化为“a”。显然,反序列化会中断。
以下是我尝试过的一些ProGuard配置。
-keepclassmembers class com.my.package.MyClass {
#private java.util.Queue<com.my.package.MyOtherClass> myQueue;
#private java.util.Queue<com.my.package.*> myQueue;
private java.* myQueue;
}
用
private java.util.Queue<com.my.package.MyOtherClass> myQueue;
...... ProGuard抱怨说这堂课不详。消息是:
注意:配置引用未知类
java.util.Queue<com.my.Package.MyOtherClass>'
使用
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]
}
答案 0 :(得分:1)
由于java类文件包含擦除的泛型,ProGuard也期望擦除类型。因此java.util.Queue<com.my.Package.MyOtherClass>
应指定为java.util.Queue
。
如果指定java.**
(带有双**以匹配子包中的类),带有通配符的替代方法也可以使用。
(CFR)。 ProGuard manual