Ja, Sie müssen eine Kopie der Realm-Datei mit dem neuen Verschlüsselungsschlüssel erstellen. Das Verfahren wird writeEncryptedCopyTo()
genannt: https://realm.io/docs/java/latest/api/io/realm/Realm.html#writeEncryptedCopyTo-java.io.File-byte:A-
So etwas wie die folgenden funktionieren sollte:
RealmConfiguration config1 = new RealmConfiguration.Builder(context)
.name("old-name")
.encryptionKey(getOldKey())
.build()
Realm realm = Realm.getInstance(config1);
realm.writeEncryptedCopyTo(new File(context.getFilesDir(), "new-name"), getNewKey());
realm.close();
RealmConfiguration config2 = new RealmConfiguration.Builder(context)
.name("new-name")
.encryptionKey(getNewKey())
.build()
Ich möchte meine Datenbank halten, den gleichen Namen, so schreibe ich auf temporäre Datei kopieren, dann die Originaldatei löschen und dann benenne die tmp-Datei um. Realm verwendet jedoch den Konfigurationscache basierend auf dem Pfad. Gibt es eine Möglichkeit, das zurückzusetzen? – Niko
Mein Fehler, die Realm-Instanz wurde nicht früh genug geschlossen, um sie zu entfernen :) – Niko