¿Dónde almacena el emulador de Android la base de datos SQLite?

108

Estoy trabajando en una aplicación de Android que almacena datos en una base de datos SQLite. Mi pregunta es, ¿dónde se almacena este archivo de base de datos en el sistema de archivos cuando está usando un emulador?

He visto que está almacenado en

/data/data/package_name/databases

pero necesito saber en qué parte del disco duro de mi máquina local se asigna realmente. La base de datos persiste en múltiples ejecuciones del emulador, incluso después de haber apagado la máquina, por lo que no puede residir simplemente en la RAM ...

I82Mucho
fuente

Respuestas:

55

El sistema de archivos del emulador no se asigna a un directorio en su disco duro. La imagen del disco del emulador se almacena como un archivo de imagen, que puede administrar a través de Eclipse (busque el icono con apariencia de G1 en la barra de herramientas) o mediante el propio binario del emulador (ejecute "emulator -help" para obtener una descripción de las opciones) .

Lo mejor es usar adb desde la línea de comandos para conectarse a un emulador en ejecución. Si puede obtener el directorio y el nombre de archivo específicos, puede hacer un "adb pull" para sacar el archivo de la base de datos del emulador y colocarlo en su disco duro habitual.

Editar : Se eliminó la sugerencia de que esto también funciona para dispositivos no rooteados; solo funciona para emuladores y dispositivos en los que está operando adb como root.

Eric Mill
fuente
6
Saqué la base de datos a través de ddms de Eclipse. Hice mis cambios y luego retrocedí. Trabajado como un encanto.
I82Much
@ I82Much funcionó para mí también, cambie la perspectiva del eclipse a ddms y luego puede obtener el archivo de datos allí.Gracias.
vanzylv
Actualización de 2013: en un dispositivo Jelly Bean, no puede adb pull(¡incluso con la ruta exacta !), Si no es root .
Bill The Ape
Eso no es una actualización, básicamente, desde el principio, los archivos privados de la aplicación han sido privados de adb en dispositivos seguros. Pero esta pregunta es sobre el emulador, donde adb se ejecuta como root.
Chris Stratton
6
Un ejemplo para extraer la base de datos de un emulador a su máquina local esadb pull /data/data/com.activeandroid.test/databases/Application.db ~/Development/Application.db
Joshua Pinter
123

Una actualización mencionada en los comentarios a continuación:

Ya no necesita estar en la perspectiva de DDMS, simplemente abra el Explorador de archivos desde la ventana de Eclipse > Mostrar vista> Otro ... Parece que la aplicación no necesita estar ejecutándose, puedo navegar en diferentes archivos de aplicaciones contenido. Estoy ejecutando ADB versión 1.0.29


O puede probar el enfoque anterior:

Abra la perspectiva DDMS en su Eclipse IDE

( Ventana> Abrir perspectiva> Otro> DDMS )

y lo mas importante:

SU APLICACIÓN DEBE ESTAR EJECUTANDO PARA QUE PUEDA VER LA JERARQUÍA DE CARPETAS Y ARCHIVOS .

Luego, en la pestaña Explorador de archivos , seguirá la ruta:

datos> datos> nombre-de-su-paquete> bases de datos> archivo-de-su-base de datos .

Luego seleccione el archivo, haga clic en el ícono del disquete en la esquina derecha de la pantalla para descargar el archivo .db . Si desea cargar un archivo de base de datos en el emulador, puede hacer clic en el icono del teléfono (junto al icono del disquete) y elegir el archivo que desea cargar.

Si desea ver el contenido del archivo .db , le aconsejo que utilice el Explorador de base de datos SQLite, que puede descargar aquí .

PD: Si desea ver la base de datos desde un dispositivo real, debe rootear su teléfono.

rogcg
fuente
5
Si alguien se pregunta, debe hacer clic en la pestaña 'Explorador de archivos'.
MSpeed
Hola cyberrog, encontré un archivo de base de datos, pero ¿puedes decirme cómo abrir este archivo? o cómo ver su contenido?
Nilesh Nikumbh
4
@NileshNikumbh Seleccione el archivo, haga clic en el icono del disquete y seleccione dónde desea almacenarlo. También necesita descargar el navegador SQLite. sourceforge.net/projects/sqlitebrowser Después de instalarlo, basta con abrir el archivo .db, chooose la pestaña Examinar datos, y la columna que desea ver.
rogcg
¡Buena publicación! Tengo problemas para obtener el archivo sqlite desde el dispositivo emulador:Failed to pull selection (null)
Jan-Terje Sørensen
@OckhamsRazor Si quieres ver la base de datos desde un dispositivo real (no un emulador) debes rootear tu teléfono.
rogcg
18

Las otras respuestas están muy desactualizadas. Con Android Studio , esta es la forma de hacerlo:

  1. Haga clic en Herramientas> Android> Monitor de dispositivo Android

ingrese la descripción de la imagen aquí

  1. Haga clic en Explorador de archivos

ingrese la descripción de la imagen aquí

  1. Navegue hasta su archivo db y haga clic en el botón Guardar .

ingrese la descripción de la imagen aquí

Yuchen Zhong
fuente
1
"Android Device Monitor quedó obsoleto en Android Studio 3.1 y se eliminó de Android Studio 3.2. Las funciones que podía utilizar a través de Android Device Monitor se han reemplazado por nuevas funciones ..." developer.android.com/studio/profile/monitor
Pete Alvin
8

En Android Studio 3.4.1, puede usar la función de búsqueda de Android Studio para encontrar "Device File Explorer" y luego ir al directorio / data / data / package_name / database de su emulador.

S. Miller
fuente
6

Escribí un script bash simple, que extrae la base de datos del dispositivo Android a su computadora (usuarios de Linux, Mac)

nombre de archivo: android_db_move.sh uso: 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
fuente
6

Dado que la pregunta no está restringida a Android Studio, estoy dando la ruta para Visual Studio 2015 (funcionó para Xamarin).

Herramientas-Android-Monitor de dispositivo Android

ingrese la descripción de la imagen aquí

  • Localice el archivo de base de datos mencionado en la imagen anterior y haga clic en el botón Extraer como se muestra en la imagen 2.
  • Guarde el archivo en la ubicación deseada.
  • Puede abrir ese archivo usando SQLite Studio o DB Browser para SQLite.

Un agradecimiento especial a otras personas que respondieron esta pregunta.

Foyzul Karim
fuente
4

Las bases de datos se almacenan como archivos SQLite en / data / data / PACKAGE /bases / DATABASEFILE donde:

Puede ver (copiar desde / hacia el sistema de archivos) el archivo de la base de datos en el emulador seleccionando la perspectiva DDMS , en la pestaña Explorador de archivos.

caligari
fuente
3

Solución simple: funciona tanto para emulador como para dispositivos conectados

1 Consulte la lista de dispositivos / emuladores disponibles actualmente.

$ adb devices

Lista de dispositivos conectados

Emulador de dispositivo G7NZCJ015313309 dispositivo 5554

9885b6454e46383744 dispositivo

2 Ejecute una copia de seguridad en su dispositivo / emulador

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

3 Extraer data.ab

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

Encontrarás la base de datos en la /dbcarpeta

Mick
fuente
Si está en OS X, probablemente se perderá la parte zlib de openssl. Puede utilizar esta $ 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
No me funciona. Estoy recibiendobash: adb: command not found
Matthias
0

Según los documentos de Android , Monitor quedó obsoleto en Android Studio 3.1 y se eliminó de Android Studio 3.2. Para acceder a los archivos, hay una pestaña en el estudio de Android llamada "Explorador de archivos del dispositivo" en la parte inferior derecha de la ventana de desarrollo a la que puede acceder a su sistema de archivos del emulador. Solo sigue

/ data / data / nombre_paquete / bases de datos

buena suerte.

Explorador de archivos del dispositivo Android

vahid sabet
fuente