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

7

Ich habe ein Downgrade von Cyanogenmod 13 (Android 6.0.1) auf Android 5.1.1 durchgeführt und meine vorherige Datei mmssms.db beibehalten, sie ist jedoch 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 auf meinem Gerät erstellte XML-Datei wiederherstellen.

Wenn ich jedoch mein altes Verzeichnis com.android.providers.telephony in das Verzeichnis / data / data / der AVD kopiere , sehen weder die Messenger-App noch SMS Backup & Restore eine Meldung. Das Verzeichnis und dessen Inhalt durch den Besitz Radio Benutzer, gehören der Radiogruppe, und haben chmod Satz 771.

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

Oder wie kann ich sonst meine SMS abrufen?

Cutter
quelle
Es ist möglich, dass die mmssms.db von CM 13 nicht vollständig mit Standard 6.0.1 kompatibel ist. Müssen Sie die Nachrichten unbedingt in 5.1.1 importieren oder reicht der Zugriff auf sie auf einem PC aus?
Chahk
Ich muss unbedingt die beiden Datenbanken zusammenführen und nicht nur auf einem PC auf die alte 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 der AVD zu installieren.
Cutter
Haben Sie Glück mit CM13 auf der AVD?
Chahk
Der Emulator von Google ist sehr langsam und hängt, wenn ich adb zum Neustart von Recovery / Bootloader verwende. Vielleicht funktioniert es besser mit einem virtuellen Gerät mit einem Intel Atom-Prozessor. Ich werde das später heute versuchen.
Cutter

Antworten:

2

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, die Sicherung von /data/data/com.android.providers.telephony von meiner vorherigen Installation auf ein virtuelles Android-Gerät zu kopieren , dort mithilfe von SMS Backup & Restore im XML-Format zu sichern und diese XML-Sicherung dann wiederherzustellen mein Gerät. SMS Backup & Restore hat die Nachrichten aus dem Backup mit den Nachrichten des aktuellen Geräts zusammengeführt, sodass ich die beiden Datenbanken nicht manuell zusammenführen musste.

In meiner Frage hat die AVD mit 6.0.0 den Inhalt meiner Datenbank nicht gelesen, da sie auf CM 13 erstellt wurde, das auf Android 6.0.1 basiert. Google scheint jedoch kein Emulator-Image auf Basis von Android 6.0.1 bereitzustellen. Daher habe ich immer noch eine 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 (ich habe diese Antwort befolgt, um dies zu tun).

Die mmssms.db-Datenbank enthält Eigenschaften über sich selbst, insbesondere Versionsnummern. Daher habe ich sie bearbeitet, damit Android glaubt, dass es sich um eine Datenbank einer Version handelt, mit der es sich befassen könnte. Ich habe mmssms.db in SQLite Expert geöffnet , auf die Registerkarte "Datenbank" geklickt und in der Eigenschaftsliste die folgenden Zeilen gefunden:

  • schema_version
  • user_version

Ich habe diese auf 44 bzw. 60 herabgestuft.

Dann habe ich mein Backup von /data/data/com.android.providers.telephony mit adb push auf die AVD übertragen , nachdem ich sichergestellt 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 Wert chmod auf 660 gesetzt.

Ich habe das Gerät neu gestartet.

Ich habe SMS Backup & Restore über ADB auf der AVD installiert. (Die APK-Datei dieser App befindet sich auf einem vorhandenen Gerät in / data / app auf einem Gerät, auf dem sie bereits installiert ist. Ich habe Google Play Services nicht auf dem Emulator installiert, um sie aus dem Play Store zu erhalten, sondern Sie kann das tun.)

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

Cutter
quelle
0

Ich musste einen zusätzlichen Schritt im Vergleich zur @ Cutter-Antwort ausführen, damit es mit LineageOS 14.1 funktioniert (das Original mmssms.dbstammt von Android 5.1).

Ändern Sie das user_versionvon 64in 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 Datei-SELinux-Sicherheitskontext mit zu ändern chcon.

Und nach dem Neustart wurden die alten SMS-Nachrichten endlich erkannt!

jansohn
quelle