Dove memorizza l'emulatore Android il database SQLite?


108

Sto lavorando su un'applicazione Android che memorizza i dati in un database SQLite. La mia domanda è: dove viene memorizzato questo file di database sul filesystem quando si utilizza un emulatore?

Ho visto che è immagazzinato in

/data/data/package_name/databases

ma ho bisogno di sapere dove sul disco rigido della mia macchina locale è effettivamente associato. Il database persiste su più esecuzioni dell'emulatore, anche dopo aver spento la macchina, quindi non può risiedere solo nella RAM ...

Risposte:


55

Il filesystem dell'emulatore non è mappato a una directory sul tuo disco rigido. L'immagine del disco dell'emulatore è memorizzata come file immagine, che puoi gestire tramite Eclipse (cerca l'icona dall'aspetto G1 nella barra degli strumenti) o tramite il binario dell'emulatore stesso (esegui "emulator -help" per una descrizione delle opzioni) .

È meglio usare adb dalla riga di comando per collegarsi a un emulatore in esecuzione. Se riesci a ottenere la directory e il nome del file specifici, puoi eseguire un "adb pull" per estrarre il file del database dall'emulatore e trasferirlo sul tuo normale disco rigido.

Modifica : rimosso il suggerimento che funziona anche per i dispositivi senza root: funziona solo per gli emulatori e i dispositivi su cui stai operando adb come root.


6
Ho rimosso il DB tramite ddms da Eclipse. Ho apportato le mie modifiche, quindi respinto. Ha funzionato come un fascino.
I82 Molto

@ I82 Molto ha funzionato anche per me, cambia la prospettiva dell'eclissi in ddms e poi puoi ottenere il file di dati da lì. Grazie.
vanzylv

Aggiornamento 2013: su un dispositivo Jelly Bean, non puoi adb pull(anche con il percorso esatto !), Se non sei root .
Bill The Ape

Questo non è un aggiornamento, fondamentalmente dall'inizio i file privati ​​dell'app sono stati privati ​​da adb su dispositivi protetti. Ma questa domanda riguarda l'emulatore, dove adb viene eseguito come root.
Chris Stratton

6
Un esempio per estrarre il database da un emulatore alla macchina locale èadb pull /data/data/com.activeandroid.test/databases/Application.db ~/Development/Application.db
Joshua Pinter

123

Un aggiornamento menzionato nei commenti qui sotto:

Non è più necessario essere nella prospettiva DDMS, basta aprire Esplora file dalla finestra Eclipse > Mostra vista> Altro ... Sembra che l'app non debba nemmeno essere in esecuzione, posso navigare in diversi file di app Contenuti. Sto eseguendo la versione 1.0.29 di ADB


Oppure puoi provare il vecchio approccio:

Apri la prospettiva DDMS sul tuo IDE Eclipse

( Finestra> Apri prospettiva> Altro> DDMS )

e il più importante:

LA TUA APPLICAZIONE DEVE ESSERE IN ESECUZIONE PER POTER VEDERE LA GERARCHIA DI CARTELLE E FILE .

Quindi nella scheda Esplora file seguirai il percorso:

dati> dati> nome-pacchetto> database> file-database .

Quindi seleziona il file, fai clic sull'icona disket nell'angolo destro dello schermo per scaricare il file .db . Se desideri caricare un file di database sull'emulatore, puoi fare clic sull'icona del telefono (accanto all'icona del disket) e scegliere il file da caricare.

Se vuoi vedere il contenuto del file .db , ti consiglio di utilizzare SQLite Database Browser, che puoi scaricare qui .

PS: se vuoi vedere il database da un dispositivo reale, devi eseguire il root del tuo telefono.


5
Se qualcuno se lo sta chiedendo, devi fare clic sulla scheda "Esplora file".
MSpeed

Ciao cyberrog, ho trovato il file del database ma puoi dirmi come aprire questo file? o come visualizzarne i contenuti?
Nilesh Nikumbh

4
@NileshNikumbh Seleziona il file, fai clic sull'icona del disket e seleziona dove vuoi salvarlo. È inoltre necessario scaricare SQLite Browser. sourceforge.net/projects/sqlitebrowser Dopo averlo installato, apri semplicemente il file .db, scegli la scheda Sfoglia dati e la colonna che vuoi vedere.
rogcg

Ottimo post! Ho problemi con il recupero del file sqlite dal dispositivo emulatore:Failed to pull selection (null)
Jan-Terje Sørensen

@OckhamsRazor Se vuoi vedere il database da un dispositivo reale (non un emulatore) devi eseguire il root del tuo telefono.
rogcg

18

Le altre risposte sono decisamente obsolete. Con Android Studio , questo è il modo per farlo:

  1. Fare clic su Strumenti> Android> Monitoraggio dispositivo Android

inserisci qui la descrizione dell'immagine

  1. Fare clic su Esplora file

inserisci qui la descrizione dell'immagine

  1. Vai al tuo file db e fai clic sul pulsante Salva .

inserisci qui la descrizione dell'immagine


1
"Android Device Monitor è stato ritirato in Android Studio 3.1 e rimosso da Android Studio 3.2. Le funzionalità che potresti utilizzare tramite Android Device Monitor sono state sostituite da nuove funzionalità ..." developer.android.com/studio/profile/monitor
Pete Alvin

8

In Android Studio 3.4.1, puoi utilizzare la funzione di ricerca di Android Studio per trovare "Device File Explorer" e quindi andare nella directory / data / data / nome_pacchetto / database del tuo emulatore.


6

Ho scritto un semplice script bash, che estrae il database dal dispositivo Android al tuo computer (utenti Linux, Mac)

nomefile: android_db_move.sh utilizzo: android_db_move.sh com.example.app nome_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

Poiché la domanda non è limitata ad Android Studio, quindi sto dando il percorso per Visual Studio 2015 (ha funzionato per Xamarin).

Strumenti-Android-Monitoraggio dispositivo Android

inserisci qui la descrizione dell'immagine

  • Individua il file di database menzionato nell'immagine sopra e fai clic sul pulsante Pull come mostrato nell'immagine 2.
  • Salva il file nella posizione desiderata.
  • Puoi aprire quel file utilizzando SQLite Studio o DB Browser per SQLite.

Un ringraziamento speciale ad altri rispondenti a questa domanda.


4

I database sono archiviati come file SQLite in / data / data / PACKAGE / databases / DATABASEFILE dove:

Puoi vedere (copiare da / al filesystem) il file di database nell'emulatore selezionando la prospettiva DDMS , nella scheda Esplora file.


3

Soluzione semplice: funziona sia per l'emulatore che per i dispositivi collegati

1 Consulta l'elenco dei dispositivi / emulatori attualmente disponibili.

$ adb devices

Lista dei dispositivi collegati

G7NZCJ015313309 dispositivo emulatore di dispositivo-5554

9885b6454e46383744 dispositivo

2 Esegui il backup sul tuo dispositivo / emulatore

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

3 Estrai data.ab

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

Troverai il database nella /dbcartella


Se sei su OS X probabilmente ti mancherà la parte zlib di openssl. Puoi usare questa soluzione: $ 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

Non funziona per me. Sto ottenendobash: adb: command not found
Matthias

0

secondo la documentazione di Android , Monitor è stato deprecato in Android Studio 3.1 e rimosso da Android Studio 3.2. Per accedere ai file, c'è una scheda in Android Studio chiamata "Device File Explorer" in basso a destra della finestra di sviluppo dalla quale è possibile accedere al file system dell'emulatore. Segui e basta

/ data / data / PACKAGE_NAME / database

in bocca al lupo.

Esplora file del dispositivo Android


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.