Gdzie emulator Androida przechowuje bazę danych SQLite?


108

Pracuję nad aplikacją na Androida, która przechowuje dane w bazie danych SQLite. Moje pytanie brzmi: gdzie ten plik bazy danych jest przechowywany w systemie plików, gdy używasz emulatora?

Widziałem, że jest przechowywany w

/data/data/package_name/databases

ale muszę wiedzieć, gdzie na dysku twardym mojej lokalnej maszyny jest faktycznie mapowane. Baza danych utrzymuje się przy wielu uruchomieniach emulatora, nawet po wyłączeniu komputera, więc nie może po prostu znajdować się w pamięci RAM ...

Odpowiedzi:


55

System plików emulatora nie jest mapowany do katalogu na dysku twardym. Obraz dysku emulatora jest przechowywany jako plik obrazu, którym można zarządzać za pomocą Eclipse (poszukaj ikony wyglądającej na G1 na pasku narzędzi) lub przez sam plik binarny emulatora (uruchom polecenie „emulator -help”, aby uzyskać opis opcji) .

Najlepiej jest użyć adb z wiersza poleceń, aby podłączyć się do działającego emulatora. Jeśli możesz uzyskać określony katalog i nazwę pliku, możesz wykonać „adb pull”, aby pobrać plik bazy danych z emulatora na zwykły dysk twardy.

Edycja : Usunięto sugestię, że działa to również w przypadku nieukorzenionych urządzeń - działa tylko dla emulatorów i urządzeń, na których pracujesz jako root.


6
Wyłączyłem DB przez ddms z Eclipse. Wprowadziłem zmiany, a potem cofnąłem. Działał jak urok.
I82Much

@ I82 Wiele też u mnie zadziałało, zmień perspektywę zaćmienia na ddms, a wtedy możesz pobrać plik danych.
vanzylv,

Aktualizacja 2013: Na urządzeniu Jelly Bean nie możesz adb pull(nawet z dokładną ścieżką!), Jeśli nie jesteś rootem .
Bill The Ape

To nie jest aktualizacja, w zasadzie od samego początku prywatne pliki były prywatne od adb na zabezpieczonych urządzeniach. Ale to pytanie dotyczy emulatora, w którym adb działa jako root.
Chris Stratton,

6
Przykładem ściągnięcia bazy danych z emulatora na komputer lokalny jestadb pull /data/data/com.activeandroid.test/databases/Application.db ~/Development/Application.db
Joshua Pinter,

123

Aktualizacja wymieniona w komentarzach poniżej:

Nie musisz już być w perspektywie DDMS, po prostu otwórz Eksplorator plików z okna Eclipse > Pokaż widok> Inne ... Wygląda na to, że aplikacja nie musi być uruchomiona nawet, mogę przeglądać różne pliki aplikacji zawartość. Używam ADB w wersji 1.0.29


Lub możesz wypróbować stare podejście:

Otwórz perspektywę DDMS w swoim Eclipse IDE

( Okno> Otwórz perspektywę> Inne> DDMS )

i co najważniejsze:

TWOJA APLIKACJA MUSI BYĆ URUCHOMIONA, ABY ZOBACZYĆ HIERARCHIĘ FOLDERÓW I PLIKÓW .

Następnie w zakładce Eksplorator plików będziesz podążać ścieżką:

dane> dane> nazwa-twojego-pakietu> bazy danych> plik-bazy-danych .

Następnie wybierz plik, kliknij ikonę dyskietki w prawym rogu ekranu, aby pobrać plik .db . Jeśli chcesz przesłać plik bazy danych do emulatora, możesz kliknąć ikonę telefonu (obok ikony dysku) i wybrać plik do przesłania.

Jeśli chcesz zobaczyć zawartość pliku .db , radzę skorzystać z przeglądarki bazy danych SQLite, którą możesz pobrać tutaj .

PS: Jeśli chcesz zobaczyć bazę danych z prawdziwego urządzenia, musisz zrootować telefon.


5
Jeśli ktoś się zastanawia, musisz kliknąć kartę „Eksplorator plików”.
MSpeed

Cześć cyberrogu, znalazłem plik bazy danych, ale czy możesz mi powiedzieć, jak otworzyć ten plik? lub jak przeglądać jego zawartość?
Nilesh Nikumbh

4
@NileshNikumbh Wybierz plik, kliknij ikonę dysku i wybierz, gdzie chcesz go przechowywać. Musisz także pobrać przeglądarkę SQLite. sourceforge.net/projects/sqlitebrowser Po zainstalowaniu wystarczy otworzyć plik .db, wybrać kartę Przeglądaj dane i żądaną kolumnę.
rogcg

Wspaniały post! Mam problemy z pobraniem pliku sqlite z urządzenia emulatora:Failed to pull selection (null)
Jan-Terje Sørensen

@OckhamsRazor Jeśli chcesz zobaczyć bazę danych z prawdziwego urządzenia (nie emulatora), musisz zrootować telefon.
rogcg

18

Pozostałe odpowiedzi są mocno nieaktualne. W Android Studio jest to sposób na zrobienie tego:

  1. Kliknij Narzędzia> Android> Monitor urządzeń Android

wprowadź opis obrazu tutaj

  1. Kliknij Eksplorator plików

wprowadź opis obrazu tutaj

  1. Przejdź do pliku db i kliknij przycisk Zapisz .

wprowadź opis obrazu tutaj


1
„Android Device Monitor został wycofany z Android Studio 3.1 i usunięty z Android Studio 3.2. Funkcje, których można było używać za pośrednictwem Android Device Monitor, zostały zastąpione nowymi funkcjami ...” developer.android.com/studio/profile/monitor
Pete Alvin

8

W Android Studio 3.4.1 możesz skorzystać z funkcji wyszukiwania w Android Studio, aby znaleźć „Eksplorator plików urządzeń”, a następnie przejść do katalogu / data / data / nazwa_pakietu / database w swoim emulatorze.


6

Napisałem prosty skrypt bash, który ściąga bazę danych z urządzenia z systemem Android na komputer (użytkownicy Linuksa, Maca)

nazwa pliku: android_db_move.sh użycie: android_db_move.sh com.example.app nazwa_db.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

6

Ponieważ pytanie nie ogranicza się do Android Studio, więc podaję ścieżkę do Visual Studio 2015 (pracował dla Xamarina).

Narzędzia-Android-Monitor urządzenia Android

wprowadź opis obrazu tutaj

  • Zlokalizuj plik bazy danych wspomniany na powyższym obrazku i kliknij przycisk Pull, jak pokazano na obrazku 2.
  • Zapisz plik w wybranej lokalizacji.
  • Możesz otworzyć ten plik za pomocą SQLite Studio lub DB Browser for SQLite.

Specjalne podziękowania dla innych osób odpowiadających na to pytanie.


4

Bazy danych są przechowywane jako pliki SQLite w / data / data / PACKAGE / databases / DATABASEFILE gdzie:

Możesz zobaczyć (skopiować z / do systemu plików) plik bazy danych w emulatorze wybierając perspektywę DDMS , w zakładce Eksplorator plików.


3

Proste rozwiązanie - działa zarówno dla emulatora, jak i podłączonych urządzeń

1 Zobacz listę aktualnie dostępnych urządzeń / emulatorów.

$ adb devices

Lista załączonych urządzeń

G7NZCJ015313309 emulator urządzenia-5554 urządzenie

Urządzenie 9885b6454e46383744

2 Uruchom kopię zapasową na swoim urządzeniu / emulatorze

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

3 Wyodrębnij dane. Ab

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

Bazę danych znajdziesz w /dbfolderze


Jeśli korzystasz z OS X, prawdopodobnie nie będziesz mieć części zlib pliku openssl. Możesz użyć tego obejścia: $ 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

Nie działa na mnie. Dostajębash: adb: command not found
Matthias,

0

zgodnie z dokumentacją systemu Android Monitor został wycofany w Android Studio 3.1 i usunięty z Android Studio 3.2. Aby uzyskać dostęp do plików, w android studio znajduje się zakładka o nazwie „Device File Explorer” w prawym dolnym rogu okna programowania, do której można uzyskać dostęp do systemu plików emulatora. Po prostu podążaj

/ data / data / nazwa_pakietu / bazy danych

powodzenia.

Eksplorator plików urządzenia z systemem Android


Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.