私のアプリの 1 つで、APK を更新しようとすると、シリアライズされたクラスの 1 つで問題が発生しました。
実際、以前のバージョンの apk と新しいバージョンの apk で保存されたオブジェクトに関連する問題がありました。
最新の APK (Android マーケットでの運用中) では、proguard.cfg を Serializable クラス (およびその静的な最終的な長い serialVersionUIDメンバー)用に構成するのを忘れていました...
したがって、新しい APK でこの以前に保存された Serializable クラスをリロードしようとすると、 StackTrace DDMS でInvalidClassException問題が発生します。
04-24 18:17:40.120: W/System.err(1204): java.io.InvalidClassException: cu; Incompatible class (SUID): cu: static final long serialVersionUID =6593847879518920343L; but expected cu: static final long serialVersionUID =0L;
04-24 18:17:40.125: W/System.err(1204): at java.io.ObjectInputStream.verifyAndInit(ObjectInputStream.java:2380)
04-24 18:17:40.125: W/System.err(1204): at java.io.ObjectInputStream.readNewClassDesc(ObjectInputStream.java:1662)
04-24 18:17:40.125: W/System.err(1204): at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:683)
04-24 18:17:40.125: W/System.err(1204): at java.io.ObjectInputStream.readNewObject(ObjectInputStream.java:1803)
04-24 18:17:40.125: W/System.err(1204): at java.io.ObjectInputStream.readNonPrimitiveContent(ObjectInputStream.java:787)
04-24 18:17:40.125: W/System.err(1204): at java.io.ObjectInputStream.readObject(ObjectInputStream.java:2003)
04-24 18:17:40.125: W/System.err(1204): at java.io.ObjectInputStream.readObject(ObjectInputStream.java:1960)
Serializable オブジェクトとその serialVersionUID の難読化の問題であることはわかっています...
ここでProguard and Serialized Java Objectsを読んだ後、私の問題が明らかになりましたが、問題を解決できません...
次の APK では、これを proguard.cfg に追加しました。
-keepnames class * implements java.io.Serializable
-keepclassmembers class * implements java.io.Serializable {
static final long serialVersionUID;
private static final java.io.ObjectStreamField[] serialPersistentFields;
!static !transient ;
private void writeObject(java.io.ObjectOutputStream);
private void readObject(java.io.ObjectInputStream);
java.lang.Object writeReplace();
java.lang.Object readResolve();
}
次の更新の問題を回避するには、これらの古いオブジェクトを取り戻す必要があります...
serialVersionUID を 6593847879518920343L または 0L に変更しようとしましたが、成功しませんでした...
何か案が ?
ご回答ありがとうございます。