Ich habe überall gesucht und kann keine wirklich genaue Antwort oder ein Tutorial finden, wie dies möglich ist, wenn es möglich ist.
Ist es möglich, eine Datenbank eines Android-Geräts auf irgendeine Weise abzurufen, ohne sie rooten zu müssen? Ich muss diese Daten nur auf irgendeine Weise extrahieren, um sie auf meinem PC zu sammeln. Wie kann ich das durchführen? Muss ich die App oder eine andere Methode, die ihr kennt, neu programmieren, aber denkt daran, ohne das Gerät zu rooten? Vielen Dank
Antworten:
Ein üblicher Weg, um das zu erreichen, was Sie wünschen, ist die Verwendung des ADB-Pull-Befehls.
Eine andere Möglichkeit, die ich in den meisten Fällen bevorzuge, besteht darin, die Datenbank per Code auf die SD-Karte zu kopieren:
Vergessen Sie nicht, die Berechtigung zum Schreiben auf SD in Ihrem Manifest wie unten festzulegen.
quelle
getPath
Methode.Wenn auf Ihrem Gerät Android v4 oder höher ausgeführt wird, können Sie mithilfe des Befehls App-Daten, einschließlich der Datenbank, ohne Root
adb backup
abrufen, die Sicherungsdatei extrahieren und auf die SQLite-Datenbank zugreifen.Sichern Sie zuerst die App-Daten über ein USB-Kabel mit dem folgenden Befehl auf Ihrem PC und ersetzen Sie sie
app.package.name
durch den tatsächlichen Paketnamen der Anwendung.Dadurch werden Sie aufgefordert, "Ihr Gerät zu entsperren und den Sicherungsvorgang zu bestätigen". Geben Sie kein Kennwort für die Sicherungsverschlüsselung an , damit Sie es später extrahieren können. Klicken Sie auf Ihrem Gerät auf die Schaltfläche "Meine Daten sichern". Auf dem Bildschirm wird der Name des Pakets angezeigt, das Sie sichern, und nach erfolgreichem Abschluss von selbst geschlossen.
Die resultierende
data.ab
Datei in Ihrem Home-Ordner enthält Anwendungsdaten im Android-Backup-Format. Verwenden Sie zum Extrahieren den folgenden Befehl:Wenn das oben genannte mit einem
openssl:Error: 'zlib' is an invalid command.
Fehler endete , versuchen Sie es unten.Das Ergebnis ist der
apps/app.package.name/
Ordner mit den Anwendungsdaten, einschließlich der SQLite-Datenbank.Weitere Informationen finden Sie im Original-Blogbeitrag .
quelle
openssl:Error: 'zlib' is an invalid command.
, auf die ichdd if=data.ab bs=1 skip=24 | python -c "import zlib,sys;sys.stdout.write(zlib.decompress(sys.stdin.read()))" | tar -xvf -
JEDOCH geantwortet habe , nachdem angezeigt wurde,17+0 records in17+0 records out17 bytes transferred in 0.000064 secs
dass keine Hinweise darauf vorliegen, dass etwas mit dem Ordner getan wurde. Da es nur 17 Bytes sind, gehe ich davon aus, dass dieser Befehl ebenfalls fehlgeschlagen ist. Ich finde es schlecht, wie ichadb pull
die Datenbank von einer Debug-App nicht bekommen kann !!android:allowBackup="false"
openssl
Mac OS X wurde derzlib
Befehl ebenfalls nicht unterstützt , daher habe ich den Befehl mit Brew neu installiert :brew reinstall openssl
. Dies wird Ihr System openssl nicht ersetzen. Daher habe ich den Befehl PATH nur für die aktuelle Sitzung geändert: Danachexport PATH=/usr/local/opt/openssl/bin:$PATH
konnten die Befehle aus dieser Antwort erfolgreich ausgeführt werden.Für debuggbare Apps 1 auf nicht gerooteten Geräten können Sie den folgenden Befehl verwenden:
Beispiel:
Stellen Sie PATH adb für Umgebungsvariablen ein oder verwenden Sie den Befehl cd, um die Plattform-Tools des Android SDK-Ordners zu verwenden.
Beispiel:
Verwenden Sie dann den obigen Befehl
1 Beachten Sie, dass die meisten Apps im Play Store nicht debuggbar sind, da das Debuggable-Flag im Manifest gesetzt werden muss.
quelle
package.name
das App-Paket ersetzt habe, wird der Fehler zurückgegeben:run-as: Package 'com.my.app' is unknown
Die meisten Antworten hier sind viel komplizierter als sie sein müssen. Wenn Sie nur die Datenbank Ihrer App von Ihrem Telefon auf Ihren Computer kopieren möchten, benötigen Sie nur diesen Befehl:
Alles, was Sie zum Ausfüllen des obigen Befehls benötigen, ist der Paketname Ihrer App, wie die Datenbank heißt und optional, wohin die Datenbank kopiert werden soll.
Bitte beachten Sie, dass dieser spezielle Befehl nur funktioniert, wenn nur ein Gerät an Ihren Computer angeschlossen ist. Der
-d
Parameter bedeutet, dass das einzige angeschlossene Gerät als Ziel ausgewählt wird. Es gibt aber auch andere Parameter, die Sie stattdessen verwenden können:-e
zielt auf den einzigen laufenden Emulator ab-s <serialnumber>
zielt auf ein Gerät mit einer bestimmten Seriennummer ab.quelle
adb -d shell "run-as your.package.name cat databases/database_name.db > /mnt/sdcard/database_name.db"
Starten SieSSHDroid
FileZilla und stellen Sie über das SFTP-Protokoll eine Verbindung zu Ihrem Telefon her. Legen Sie / mnt / sdcard als Standard-Remote-Verzeichnis fest.adb -d shell "run-as your.package.name ls databases"
) auflisten und 2) Sie möchten möglicherweise alle anderen zugehörigen Dateien zusammen mit der Datenbank in abrufen Mein Fall, bei dem die Dateien -smh und -wal extrahiert wurden, war die einzige Möglichkeit, DB Browser für SQLite zum Öffnen der Datenbank zu bewegenMit Android Studio 3.0 oder einer höheren Version ist es möglich, eine Datenbank (auch gemeinsam genutzte Einstellungen, Cache-Verzeichnis und andere) abzurufen, wenn die Anwendung auf einem nicht gerooteten Gerät im Debug-Modus ausgeführt wird.
Befolgen Sie diese Schritte, um die Datenbank mit Android Studio abzurufen.
quelle
quelle
Für Ubuntu (nicht nur?):
siehe Sergeis Antwort, aber anstelle von openssl verwenden Sie zlib-flate:
Andernfalls wird openssl wahrscheinlich werfen:
weil openssl in Ubuntu nicht mit zlib-Unterstützung kompiliert wird
quelle
Da funktioniert bei mir eigentlich nichts. Ich erstelle ein kleines Windows BATCH-Skript, das auf anderen Antworten basiert, die zusammen kombiniert werden. Hoffe es hilft jemandem. Einfach verwenden: backupDatabase <Paketname> <Anwendungsname> [Zielverzeichnis]. Es verwendet die Sicherungsmethode von Sergei und Android Backup Extractor .
quelle
Sie können die SQLite-Datei einfach von Ihrem Gerät extrahieren (Root nicht erforderlich)
starte adb
cd / sdk / platform-tools ./adb shell Geben Sie
dann den folgenden Befehl in terminal ein
./adb -d shell "run-as com.your_packagename cat /data/data/com.your_packagename/databases/jokhanaNepal> /sdcard/jokhana.sqlite"
Zum Beispiel
./adb -d shell "run-as com.yuvii.app cat /data/data/com.yuvii.app/databases/jokhanaNepal> /sdcard/jokhana.sqlite"
quelle
Wenn Sie versuchen, dies auf Android 6 zu tun, fordern Sie die Erlaubnis an und verwenden Sie den Code der Antwort auf diese Frage
Sobald es gewährt wird
quelle
Alternativ können Sie meine Bibliothek Ultra Debugger verwenden . Sie können die Datenbank als Datei herunterladen oder Werte direkt im Browser bearbeiten. Keine Wurzel erforderlich, sehr einfach zu bedienen.
quelle
Auf dem Mac (KEIN Root erforderlich)
Die SQLite-Datei wird in den Ordner "platform-tools" kopiert.
quelle
Ja, wenn Ihre Android-App eine Dateikopie der Datenbank erstellt, auf die jeder zugreifen kann.
Android schützt die privaten Daten von Apps, sodass sie für andere Apps nicht sichtbar / zugänglich sind. Eine Datenbank besteht aus privaten Daten. Ihre App kann natürlich die Datenbankdatei lesen, um eine Dateikopie in eine öffentlich sichtbare Datei zu erstellen.
quelle
Auf einem gerooteten Gerät können Sie:
quelle
Basierend auf der Antwort von Lam Vinh ist hier eine einfache Batch-Datei, die für mich auf meinem Nexus 7 der 1. Generation funktioniert. Sie fordert den Benutzer auf, den Paketnamen und dann den Datenbanknamen (ohne die Erweiterung .sqlite) einzugeben und diese abzulegen in c: \ temp. Dies setzt voraus, dass Sie das Android SDK in den Umgebungsvariablen festgelegt haben.
quelle
Wenn Sie Android 4.0 oder höher verwenden und einen Mac verwenden , finden Sie hier ein Ruby-Skript, mit dem Sie den Inhalt Ihrer App auf dem Desktop speichern können. Ich würde mir vorstellen, dass dies auch in Ubuntu funktionieren würde, obwohl ich es nicht getestet habe.
ausführen -> ruby your_ruby_file_name.rb
Dieses Skript ist nur "happy path". Stellen Sie daher sicher, dass Ihr Gerät verbunden ist und dass adb zu Ihrem Profil hinzugefügt wurde.
quelle
Ich gebe die komplette Lösung zum "Speichern" und "Wiederherstellen" der App-Datenbank im / vom internen Speicher (nicht auf dem PC mit ADB).
Ich habe zwei Methoden durchgeführt, eine zum Speichern und eine zum Wiederherstellen der Datenbank. Verwenden Sie diese Methoden am Ende von onCreate () in MainActivity (die eine oder andere, wenn Sie die Datenbank speichern oder wiederherstellen möchten).
Datenbank im internen Speicher speichern:
Datenbank aus internem Speicher wiederherstellen:
quelle
Es ist immer besser, wenn die Dinge automatisiert sind. Deshalb habe ich ein einfaches Python-Skript zum Kopieren der Datenbankdatei vom Gerät mit ADB geschrieben. Es spart viel Entwicklungszeit, wenn Sie es häufig tun.
Funktioniert nur mit debuggbaren Apps, wenn das Gerät nicht gerootet ist .
Hier ist der Link zum Kern.
Führen Sie es aus als:
python copyandroiddbfile.py
quelle
Wenn Sie Ihre Datenbankdatei möchten
Siehe DDMS> Datei untersuchen
Finden Sie Ihre Datenbankdatei anhand Ihres Paketnamens
Klicken Sie dann auf Datei vom Gerät abrufen (nur gerootetes Gerät).
quelle