Сериализация / Десериализация и Proguard
В одном из моих приложений у меня возникла проблема с одним из моих сериализованных классов, когда я пытался обновить APK.
Действительно, были проблемы, связанные с объектами, сохраненными в предыдущей версии apk и новой версии apk.
В последнем APK (в производстве на Android Market) яя забыл настроить мой proguard.cfg для класса Serializable (и так ихстатический финал long serialVersionUID член) ...
Поэтому, когда я пытаюсь в своем новом APK перезагрузить этот предыдущий сохраненный класс Serializable, явеInvalidClassException Проблема в StackTrace DDMS:
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)
Я знаю, что это была проблема запутывания с сериализуемыми объектами и их serialVersionUID ...
После прочтенияProguard и сериализованные объекты Java здесь, который четко разоблачить мою проблему, яя не могу решить мою проблему ...
В моем следующем 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, безуспешно ...
Любая идея ?
Заранее спасибо за ваши ответы!