pilgr / Paper

Paper is a fast NoSQL-like storage for Java/Kotlin objects on Android with automatic schema migration support.
Apache License 2.0
2.34k stars 234 forks source link

Crashes the app on update #185

Closed Alankrita18 closed 3 years ago

Alankrita18 commented 3 years ago

On updating the app with no much change, PaperDb started crashing the app for list type.

dependency: io.paperdb:paperdb:2.7.1

Fatal Exception: io.paperdb.PaperDbException Couldn't read/deserialize file /data/user/0/com.mango.mango/files/io.paperdb/abc.pt for table abc io.paperdb.DbStoragePlainFile.readTableFile (DbStoragePlainFile.java:323) io.paperdb.DbStoragePlainFile.select (DbStoragePlainFile.java:166) io.paperdb.Book.read (Book.java:73) io.paperdb.Book.read (Book.java:58)

Caused by com.esotericsoftware.kryo.KryoException Unable to find class: b.a.a.a.b.a.f.f.h Serialization trace: mContent (io.paperdb.PaperTable) com.esotericsoftware.kryo.util.DefaultClassResolver.readName (DefaultClassResolver.java:160) com.esotericsoftware.kryo.util.DefaultClassResolver.readClass (DefaultClassResolver.java:133) com.esotericsoftware.kryo.Kryo.readClass (Kryo.java:693) com.esotericsoftware.kryo.Kryo.readClassAndObject (Kryo.java:804) com.esotericsoftware.kryo.serializers.CollectionSerializer.read (CollectionSerializer.java:134) com.esotericsoftware.kryo.serializers.CollectionSerializer.read (CollectionSerializer.java:40) com.esotericsoftware.kryo.Kryo.readObject (Kryo.java:734) com.esotericsoftware.kryo.serializers.ObjectField.read (ObjectField.java:125) com.esotericsoftware.kryo.serializers.FieldSerializer.read (FieldSerializer.java:543) com.esotericsoftware.kryo.Kryo.readObject (Kryo.java:712) io.paperdb.DbStoragePlainFile.readContent (DbStoragePlainFile.java:332) io.paperdb.DbStoragePlainFile.readTableFile (DbStoragePlainFile.java:316) io.paperdb.DbStoragePlainFile.select (DbStoragePlainFile.java:166) io.paperdb.Book.read (Book.java:73) io.paperdb.Book.read (Book.java:58)

pilgr commented 3 years ago

It seems that Proguard has changed the class name for the entities which you store in the list. And after making new release version, the class name (b.a.a.a.b.a.f.f.h) is no longer available. Please make sure that your classes used by paper are exempted from obfuscation https://github.com/pilgr/Paper#proguard-config

The data which has been stored on user devices can be restored if you manually create all the classes exactly as they been obfuscated in the previous version (e.g. b.a.a.a.b.a.f.f.h).