Hallo zusammen,
ich habe seit einiger Zeit eine App im Playstore. Diese bietet die möglichkeit die internen Daten zu sichern und wiederherzustellen.
Beim wiederherstellen wird (Holzhammermethode) die SQLite Datenbank überschrieben.
Das hat bisher auf sehr unterschiedlichen Geräten (Simulator, Sony Z1 Compact, verschiedene Samsung Galaxy, Huawei P9, Honor, ...) sehr gut funktioniert. Jetzt habe ich allerdings ein Xiaomi Mi8 und dort lässt sich das Backup nicht einspielen.
Ich habe verschiedene Varianten zum Kopieren getestet (Stream, Files.copy, und jetzt mit Apache Commons IO FileUtils.copyFile) aber die Datenbank Datei ist nach dem Kopieren immer unverändert. Die Checksum vor und nach dem Kopieren ist immer die gleiche. Auf anderen Geräten ist sie erwartungsgemäß unterschiedlich.
long crc = FileUtils.checksumCRC32( new File( getReadableDatabase().getPath() ) ); //z.B. 123
FileUtils.copyFile( new File( backupFilename ), new File( getReadableDatabase().getPath() ) );
crc = FileUtils.checksumCRC32( new File( getReadableDatabase().getPath() ) ); //Immernoch 123
Der Datenbankpfad (getReadableDatabase().getPath()/getWritableDatabase().getPath()) ist /data/user/0/de.jokakilla.cloud.batterymanager/databases/batteries
Ich weiß das überschreiben der Datei ist nicht der beste Weg aber ich wollte auf komplexe Mechanismen serialisierung/deserialisierung usw. verzichten. Ohne Transaktionen und Write Ahead Logging dürfte das eigentlich auch einigermaßen unkritisch sein und es hat jetzt 1,5 Jahre auf verschiedensten Systemen gut funktioniert.
ich habe seit einiger Zeit eine App im Playstore. Diese bietet die möglichkeit die internen Daten zu sichern und wiederherzustellen.
Beim wiederherstellen wird (Holzhammermethode) die SQLite Datenbank überschrieben.
Das hat bisher auf sehr unterschiedlichen Geräten (Simulator, Sony Z1 Compact, verschiedene Samsung Galaxy, Huawei P9, Honor, ...) sehr gut funktioniert. Jetzt habe ich allerdings ein Xiaomi Mi8 und dort lässt sich das Backup nicht einspielen.
Ich habe verschiedene Varianten zum Kopieren getestet (Stream, Files.copy, und jetzt mit Apache Commons IO FileUtils.copyFile) aber die Datenbank Datei ist nach dem Kopieren immer unverändert. Die Checksum vor und nach dem Kopieren ist immer die gleiche. Auf anderen Geräten ist sie erwartungsgemäß unterschiedlich.
long crc = FileUtils.checksumCRC32( new File( getReadableDatabase().getPath() ) ); //z.B. 123
FileUtils.copyFile( new File( backupFilename ), new File( getReadableDatabase().getPath() ) );
crc = FileUtils.checksumCRC32( new File( getReadableDatabase().getPath() ) ); //Immernoch 123
Der Datenbankpfad (getReadableDatabase().getPath()/getWritableDatabase().getPath()) ist /data/user/0/de.jokakilla.cloud.batterymanager/databases/batteries
Ich weiß das überschreiben der Datei ist nicht der beste Weg aber ich wollte auf komplexe Mechanismen serialisierung/deserialisierung usw. verzichten. Ohne Transaktionen und Write Ahead Logging dürfte das eigentlich auch einigermaßen unkritisch sein und es hat jetzt 1,5 Jahre auf verschiedensten Systemen gut funktioniert.