私はこのようなクラスを持っている:ProGuard難読化、Java、Google Gsonと一般的なコレクション - メンバーの保持方法
public class MyClass
{
private Queue<MyOtherClass> myQueue;
}
私の問題は、私はProGuardのは、GoogleのGsonを使用してJSONにシリアライズした後MYQUEUEを手にすることができないということです。メンバー名 "myQueue"は "a"としてシリアライズされます。明らかに、デシリアライズが解除されます。
私が試したProGuardの設定の一部を以下に示します。
private java.util.Queue<com.my.package.MyOtherClass> myQueue;
で
-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;
}
... ProGuardのは、クラスが不明であったことを訴えました。私が言ったように、ProGuardの警告を取り除きます....設定が
private java.* myQueue;
を使用して、未知のクラスjava.util.Queue<com.my.Package.MyOtherClass>'
を意味するが、:
注:メッセージがありますメンバ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] }
ありがとうございます。私はマニュアルに苦労しています。私は、私が期待しているシリアライズされたメンバー名を得るために何が必要なのか分かっていません。ほとんどの場合、正確なメンバー名をシリアル化する必要があります。これは私の現在の問題です。しかし、いくつかのケースでは、@SerializedName( "betterName")protected String poorNameを使用しています。 @SerializedNameが動作しているかどうかはまだ分かりませんが... – MountainX