Wie importiere ich eine vorhandene mmssms.db auf ein virtuelles Android-Gerät?

Ich habe von Cyanogenmod 13 (Android 6.0.1) auf Android Stock 5.1.1 heruntergestuft und meine vorherige mmssms.db-Datei behalten, aber sie ist nicht mit älteren Android-Versionen kompatibel. Ich möchte diese Datenbank in ein virtuelles Android-Gerät mit Android 6.0 importieren, sie mit SMS Save & Restore sichern und dann die von dieser App erstellte .xml-Datei auf meinem Gerät wiederherstellen.

Wenn ich jedoch mein altes Verzeichnis com.android.providers.telephony in das Verzeichnis /data/data/ des AVD kopiere, sehen weder die Messenger-App noch SMS Backup & Restore eine Meldung. Das Verzeichnis und sein Inhalt sind Eigentum des Benutzers radio , gehören zur Gruppe radio und haben chmod auf 771 gesetzt.

Wie kann ich überprüfen, was das System daran hindert, auf meine Datenbank zuzugreifen?

Oder wie kann ich sonst meine SMS abrufen?

Es ist möglich, dass die mmssms.db von CM 13 nicht vollständig mit Stock 6.0.1 kompatibel ist. Müssen Sie die Nachrichten unbedingt in 5.1.1 importieren oder reicht der Zugriff auf einen PC aus?
Ich muss unbedingt die beiden Datenbanken zusammenführen, nicht nur auf die alte auf einem PC zugreifen. Bearbeiten: Basierend auf Ihrem Vorschlag, dass die mmssms.db von CM 13 nicht mit Android 6.0.1 kompatibel ist, werde ich versuchen, CM 13 auf dem AVD zu installieren.
Irgendein Glück mit CM13 auf dem AVD?
Der Emulator von Google ist sehr langsam und hängt, wenn ich adb verwende, um den Wiederherstellungs-/Bootloader neu zu starten. Vielleicht funktioniert es besser mit einem virtuellen Gerät mit einem Intel Atom-Prozessor; Ich werde das heute später versuchen.

Antworten (3)

Ich habe es endlich geschafft, den Inhalt meiner vorherigen Datenbank auf meinem aktuellen Gerät wiederherzustellen, und ich werde erklären, wie.

Die Idee war, das Backup von /data/data/com.android.providers.telephony von meiner vorherigen Installation auf ein virtuelles Android-Gerät zu kopieren, es dort mit SMS Backup & Restore im XML-Format zu sichern und dann dieses XML-Backup wiederherzustellen mein Gerät. SMS Backup & Restore hat die Nachrichten aus der Sicherung mit den Nachrichten des aktuellen Geräts zusammengeführt, sodass ich die beiden Datenbanken nicht von Hand zusammenführen musste.

In meiner Frage würde das AVD mit 6.0.0 den Inhalt meiner Datenbank nicht lesen, da es auf CM 13 erstellt wurde, das auf Android 6.0.1 basiert. Aber Google scheint kein Emulator-Image basierend auf Android 6.0.1 bereitzustellen, also habe ich immer noch ein AVD mit 6.0.0 verwendet. Aus Leistungsgründen habe ich es so konfiguriert, dass es eine Intel Atom (x86) -CPU emuliert und den Intel HAXM-Treiber auf meinem PC installiert hat (dazu bin ich dieser Antwort gefolgt ).

Die Datenbank mmssms.db enthält Eigenschaften über sich selbst, insbesondere Versionsnummern, daher habe ich sie bearbeitet, um Android glauben zu machen, dass es sich um eine Datenbank einer Version handelt, mit der es umgehen kann. Ich habe mmssms.db in SQLite Expert geöffnet , auf die Registerkarte "Datenbank" geklickt und in der Eigenschaftsliste die folgenden Zeilen gefunden:

  • schema_version
  • Benutzerversion

Ich habe diese auf 44 bzw. 60 herabgestuft.

Dann habe ich mein Backup von /data/data/com.android.providers.telephony mit adb push auf das AVD übertragen , nachdem ich mich vergewissert hatte, dass der Speicherort dort bereits leer war. Mit der adb-Shell habe ich den Eigentümer und die Gruppe von allem in diesem Verzeichnis und seinen Unterverzeichnissen auf radio und im Datenbank - Unterverzeichnis den chmod - Wert auf 660 gesetzt.

Ich habe das Gerät neu gestartet.

Ich habe SMS Backup & Restore auf dem AVD über ADB installiert. (Die .apk-Datei dieser App befindet sich auf einem vorhandenen Gerät unter /data/app auf einem Gerät, auf dem sie bereits installiert ist. Ich habe mir nicht die Mühe gemacht, Google Play Services auf dem Emulator zu installieren, um sie aus dem Play Store zu erhalten, aber Sie kann das tun.)

Ich habe die Nachrichten gesichert und die resultierende XML-Datei auf mein echtes Gerät kopiert, wo ich SMS Backup & Restore verwendet habe, um sie wiederherzustellen. Voilà.

Ich musste im Vergleich zu @Cutter answer einen zusätzlichen Schritt machen, damit es mit LineageOS 14.1 funktioniert (Original mmssms.dbkam von Android 5.1).

Ändern Sie das user_versionvon 64zu 68:

sqlite3 mmssms.db
PRAGMA user_version;
PRAGMA user_version = 68;
.q

Im Wiederherstellungsmodus ( adb reboot recovery):

adb push mmssms.db /data/user_de/0/com.android.providers.telephony/databases/
adb shell chown radio:radio /data/user_de/0/com.android.providers.telephony/databases/mmssms.db
adb shell chmod 660 /data/user_de/0/com.android.providers.telephony/databases/mmssms.db
adb shell chcon u:object_r:radio_data_file:s0 /data/user_de/0/com.android.providers.telephony/databases/mmssms.db
adb shell ls -alZ /data/user_de/0/com.android.providers.telephony/databases/mmssms.db

Wichtig war, zusätzlich den Sicherheitskontext der Datei SELinux mit zu ändern chcon.

Und nach dem Neustart wurden endlich die alten SMS erkannt!

Jansohns Lösung funktioniert für mich.

Ich habe die Datei mmssms.db aus einer früheren NANDROID-Sicherung meines Telefons gezogen und konnte alle alten SMS-Nachrichten daraus wiederherstellen, indem ich diese Befehle in einer Adb-Shell ausführte.

Es funktionierte nicht, bis ich benutzte:adb shell chcon u:object_r:radio_data_file:s0 /data/user_de/0/com.android.providers.telephony/databases/mmssms.db