Wo speichert der Android-Emulator die SQLite-Datenbank?

108

Ich arbeite an einer Android-Anwendung, die Daten in einer SQLite-Datenbank speichert. Meine Frage ist, wo wird diese Datenbankdatei im Dateisystem gespeichert, wenn Sie einen Emulator verwenden?

Ich habe gesehen, dass es in gespeichert ist

/data/data/package_name/databases

Ich muss jedoch wissen, wo sich auf der Festplatte meines lokalen Computers tatsächlich eine Zuordnung befindet. Die Datenbank bleibt auch nach dem Herunterfahren des Computers bei mehreren Durchläufen des Emulators bestehen, sodass sie sich nicht nur im RAM befinden kann ...

Viel
quelle

Antworten:

55

Das Dateisystem des Emulators ist keinem Verzeichnis auf Ihrer Festplatte zugeordnet. Das Disk-Image des Emulators wird als Image-Datei gespeichert, die Sie entweder über Eclipse (suchen Sie in der Symbolleiste nach dem G1-Symbol) oder über die Emulator-Binärdatei selbst verwalten können (führen Sie "emulator -help" aus, um eine Beschreibung der Optionen zu erhalten). .

Verwenden Sie am besten adb über die Befehlszeile, um einen laufenden Emulator zu erreichen. Wenn Sie das spezifische Verzeichnis und den Dateinamen erhalten, können Sie einen "adb pull" ausführen, um die Datenbankdatei vom Emulator auf Ihre normale Festplatte zu übertragen.

Bearbeiten : Der Vorschlag wurde entfernt, dass dies auch für nicht gerootete Geräte funktioniert - es funktioniert nur für Emulatoren und Geräte, auf denen Sie adb als root betreiben.

Eric Mill
quelle
6
Ich habe die DB über ddms von Eclipse abgeschaltet. Ich habe meine Änderungen vorgenommen und dann zurückgeschoben. Lief wie am Schnürchen.
I82Moch
@ I82 Viel hat auch für mich funktioniert, ändern Sie die Eclipse-Perspektive in ddms und dann können Sie die Datendatei von dort erhalten. Danke.
Vanzylv
Update 2013: Auf einem Jelly Bean-Gerät können Sie nicht adb pull(auch nicht mit dem genauen Pfad!), Wenn Sie nicht root sind .
Bill The Ape
Das ist kein Update, im Grunde waren private Dateien von Anfang an von adb auf gesicherten Geräten privat. Bei dieser Frage geht es jedoch um den Emulator, in dem adb als root ausgeführt wird.
Chris Stratton
6
Ein Beispiel für das Abrufen der Datenbank von einem Emulator auf Ihren lokalen Computer istadb pull /data/data/com.activeandroid.test/databases/Application.db ~/Development/Application.db
Joshua Pinter
123

Ein Update, das in den Kommentaren unten erwähnt wird:

Sie müssen sich nicht mehr in der DDMS-Perspektive befinden. Öffnen Sie einfach den Datei-Explorer über Eclipse- Fenster> Ansicht anzeigen > Andere. Es scheint, dass die App nicht einmal ausgeführt werden muss. Ich kann mich in verschiedenen Apps-Dateien umsehen Inhalt. Ich verwende ADB Version 1.0.29


Oder Sie können den alten Ansatz ausprobieren:

Öffnen Sie die DDMS-Perspektive auf Ihrer Eclipse-IDE

( Fenster> Perspektive öffnen> Andere> DDMS )

und das wichtigste:

Ihre Bewerbung muss laufen, damit Sie die Hierarchie der Ordner und Dateien sehen können .

Dann folgen Sie auf der Registerkarte Datei-Explorer dem Pfad:

Daten> Daten> Ihr-Paket-Name> Datenbanken> Ihre-Datenbank-Datei .

Wählen Sie dann die Datei aus und klicken Sie auf das Diskettensymbol in der rechten Ecke des Bildschirms, um die DB- Datei herunterzuladen . Wenn Sie eine Datenbankdatei in den Emulator hochladen möchten, können Sie auf das Telefonsymbol (neben dem Diskettensymbol) klicken und die hochzuladende Datei auswählen.

Wenn Sie den Inhalt der DB- Datei anzeigen möchten , empfehlen wir Ihnen, den SQLite-Datenbankbrowser zu verwenden, den Sie hier herunterladen können .

PS: Wenn Sie die Datenbank von einem realen Gerät aus anzeigen möchten, müssen Sie Ihr Telefon rooten.

Rogcg
quelle
5
Wenn sich jemand wundert, müssen Sie auf die Registerkarte "Datei-Explorer" klicken.
MSpeed
Hallo Cyberrog, ich habe eine Datenbankdatei gefunden, aber können Sie mir sagen, wie ich diese Datei öffnen soll? oder wie man den Inhalt anzeigt?
Nilesh Nikumbh
4
@NileshNikumbh Wählen Sie die Datei aus, klicken Sie auf das Diskettensymbol und wählen Sie aus, wo Sie sie speichern möchten. Sie müssen auch den SQLite-Browser herunterladen. sourceforge.net/projects/sqlitebrowser Öffnen Sie nach der Installation einfach die .db-Datei, wählen Sie die Registerkarte Daten durchsuchen und die Spalte, die Sie anzeigen möchten.
Rogcg
Guter Eintrag! Ich habe Probleme beim Abrufen der SQLite-Datei vom Emulator:Failed to pull selection (null)
Jan-Terje Sørensen
@OckhamsRazor Wenn Sie die Datenbank von einem realen Gerät (nicht Emulator) aus sehen möchten, müssen Sie Ihr Telefon rooten.
Rogcg
18

Die anderen Antworten sind stark veraltet. Mit Android Studio ist dies der folgende Weg:

  1. Klicken Sie auf Extras> Android> Android-Gerätemonitor

Geben Sie hier die Bildbeschreibung ein

  1. Klicken Sie auf Datei-Explorer

Geben Sie hier die Bildbeschreibung ein

  1. Navigieren Sie zu Ihrer Datenbankdatei und klicken Sie auf die Schaltfläche Speichern .

Geben Sie hier die Bildbeschreibung ein

Yuchen Zhong
quelle
1
"Android Device Monitor wurde in Android Studio 3.1 nicht mehr unterstützt und aus Android Studio 3.2 entfernt. Die Funktionen, die Sie über den Android Device Monitor verwenden können, wurden durch neue Funktionen ersetzt ..." developer.android.com/studio/profile/monitor
Pete Alvin
8

In Android Studio 3.4.1 können Sie die Suchfunktion von Android Studio verwenden, um "Device File Explorer" zu finden und dann in das Verzeichnis / data / data / package_name / database Ihres Emulators zu wechseln.

S. Miller
quelle
6

Ich habe ein einfaches Bash-Skript geschrieben, das die Datenbank vom Android-Gerät auf Ihren Computer zieht (Linux-, Mac-Benutzer).

Dateiname: android_db_move.sh Verwendung: android_db_move.sh com.example.app db_name.db

#!/bin/bash

REQUIRED_ARGS=2
ADB_PATH=/Users/Tadas/Library/sdk/platform-tools/adb
PULL_DIR="~/"

if [ $# -ne $REQUIRED_ARGS ]
    then
        echo ""
        echo "Usage:"
        echo "android_db_move.sh [package_name] [db_name]"
        echo "eg. android_db_move.sh lt.appcamp.impuls impuls.db"
        echo ""
    exit 1
fi;


echo""

cmd1="$ADB_PATH -d shell 'run-as $1 cat /data/data/$1/databases/$2 > /sdcard/$2' "
cmd2="$ADB_PATH pull /sdcard/$2 $PULL_DIR"

echo $cmd1
eval $cmd1
if [ $? -eq 0 ]
    then
    echo ".........OK"
fi;

echo $cmd2
eval $cmd2

if [ $? -eq 0 ]
    then
    echo ".........OK"
fi;

exit 0
Tadas Valaitis
quelle
6

Da die Frage nicht auf Android Studio beschränkt ist, gebe ich den Pfad für Visual Studio 2015 (für Xamarin gearbeitet) an.

Tools-Android-Android-Gerätemonitor

Geben Sie hier die Bildbeschreibung ein

  • Suchen Sie die im obigen Bild erwähnte Datenbankdatei und klicken Sie auf die Schaltfläche Ziehen, wie in Bild 2 gezeigt.
  • Speichern Sie die Datei an Ihrem gewünschten Ort.
  • Sie können diese Datei mit SQLite Studio oder DB Browser for SQLite öffnen.

Besonderer Dank geht an andere Antwortende dieser Frage.

Foyzul Karim
quelle
4

Die Datenbanken werden als SQLite-Dateien in / data / data / PACKAGE / database / DATABASEFILE gespeichert, wobei:

Sie können die Datenbankdatei im Emulator sehen (vom / in das Dateisystem kopieren), indem Sie auf der Registerkarte Datei-Explorer die DDMS-Perspektive auswählen .

Caligari
quelle
3

Einfache Lösung - funktioniert sowohl für Emulatoren als auch für verbundene Geräte

1 Siehe die Liste der derzeit verfügbaren Geräte / Emulatoren.

$ adb devices

Liste der angeschlossenen Geräte

G7NZCJ015313309 Geräteemulator-5554 Gerät

9885b6454e46383744 Gerät

2 Führen Sie ein Backup auf Ihrem Gerät / Emulator aus

$ adb -s emulator-5554 backup -f ~/Desktop/data.ab -noapk com.your_app_package.app;

3 Extrahieren Sie data.ab

$ dd if=data.ab bs=1 skip=24 | openssl zlib -d | tar -xvf -;

Sie finden die Datenbank im /dbOrdner

Mick
quelle
Wenn Sie unter OS X arbeiten, wird Ihnen wahrscheinlich der zlib-Teil von openssl fehlen. Sie können diese $ dd if=data.ab bs=1 skip=24 | python -c "import zlib,sys;sys.stdout.write(zlib.decompress(sys.stdin.read()))" | tar -xvf -
Lasse Magnussen
Funktioniert bei mir nicht Ich bekommebash: adb: command not found
Matthias
0

Laut Android-Dokumenten war Monitor in Android Studio 3.1 veraltet und wurde aus Android Studio 3.2 entfernt. Um auf Dateien zuzugreifen, gibt es in Android Studio unten rechts im Entwicklungsfenster eine Registerkarte namens "Device File Explorer", über die Sie auf Ihr Emulator-Dateisystem zugreifen können. Folge einfach

/ data / data / package_name / database

Viel Glück.

Android-Gerät Datei-Explorer

vahid sabet
quelle