私のアプリケーションの起動時に2つのエラーがログに記録されますが、難読化がなければエラーはありません。Proguardの難読化によってjava.lang.IllegalArgumentExceptionが発生する:classが "a"という名前の複数のJSONフィールドを宣言する
私は誤解されていない限り、エラーが似ています:
クラスプロパティ
とクラスPropertyDefinitionにも同じ名前の複数のJSONフィールドを宣言します。
05/18 03:33:19.465 java.lang.IllegalArgumentException: class PropertyDefinition declares multiple JSON fields named a:
com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields(ReflectiveTypeAdapterFactory.java:122)
com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(ReflectiveTypeAdapterFactory.java:72)
com.google.gson.Gson.getAdapter(Gson.java:349)
com.google.gson.Gson.toJson(Gson.java:574)
com.google.gson.Gson.toJson(Gson.java:561)
com.google.gson.Gson.toJson(Gson.java:516)
com.google.gson.Gson.toJson(Gson.java:496)
Property.a(SourceFile:210) <see comment in code below noting this code line>
Property.a(SourceFile:68)
bj.a(SourceFile:44)
aA.<init>(SourceFile:339)
05/18 03:33:19.479 java.lang.IllegalArgumentException: class Property declares multiple JSON fields named a:
com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields(ReflectiveTypeAdapterFactory.java:122)
com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(ReflectiveTypeAdapterFactory.java:72)
com.google.gson.Gson.getAdapter(Gson.java:349)
com.google.gson.Gson.fromJson(Gson.java:790)
com.google.gson.Gson.fromJson(Gson.java:757)
com.google.gson.Gson.fromJson(Gson.java:706)
com.google.gson.Gson.fromJson(Gson.java:678)
Property.a(SourceFile:75) <see comment in code below noting this code line>
bj.a(SourceFile:44)
aA.<init>(SourceFile:339)
ここでは、ほぼ同じエラーの1つに関連する難読化マップのセクションを示します。ここでクラス名「Property」をわかりません。私は問題を見ない。私は難読化の経験がないので、何を探したらいいのかわかりません。
mypackage.Property:
mypackage.PropertyDefinition rootElement -> a
java.util.HashMap indexById -> a
java.util.HashMap indexByKey -> b
long nntgID -> a
43:54:boolean equals(java.lang.Object) -> equals
60:64:int hashCode() -> hashCode
68:84:boolean check() -> a
88:88:java.lang.String getFileName() -> a
92:92:java.lang.String getDirectory() -> b
101:102:java.lang.String getVersion() -> c
107:107:java.util.HashMap getIdIndex() -> a
112:112:java.util.HashMap getKeyIndex() -> b
122:122:long getNntgID() -> a
126:127:void setNntgID(long) -> a
142:147:void setRootElement(mypackage.PropertyDefinition) -> a
150:150:mypackage.PropertyDefinition getPropertyDefinitionById(java.lang.String) -> a
154:154:mypackage.PropertyDefinition getPropertyDefinitionByKey(java.lang.String) -> b
162:168:java.lang.String toString() -> toString
210:214:void toFile() -> a
ところで、私はすでに私のProGuardの設定ファイルでこのセクションを持っている:トラブルシューティングを開始する場所に
-keep class com.google.gson** { *; }
-keepclassmembers class com.google.gson** {
*;
}
任意の提案?
'Property'と' PropertyDefinition'を難読化しようとしませんでしたか? –
@JoeF私は最後の夜にそれをやりました: '-keep public class myPackage.PropertyDefinition {*; } 'とその他いくつか。これで問題は解決しますが、すべてのメンバー名を保持せずにクラスの名前(たとえば、PropertyDefinition')を保持できると思っています。これまで私はそれを働かせることはできません。 – MountainX