¿Dónde se almacena la base de datos SQLite en el emulador de Android?
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 se utiliza un emulador?
He visto que está almacenado en
- Cursor finalizado sin cerrar antes () en ListFragment
- ¿Cómo obtener el valor de la columna desde el cursor sqlite?
- Obtención del tipo de una columna en SQLite
- SQLiteOpenHelper vs ContentProvider
- Uso de la palabra clave IN en android sqlite
/data/data/package_name/databases
Pero necesito saber dónde en el disco duro de mi máquina local que en realidad se mapea. 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 en RAM …
- Extraño SQLiteException no en todos los dispositivos
- sqlite Android - cómo obtener el valor de col / fila específica
- Consulta de actualización de Android SQlite
- SQLite de Android que elimina una fila específica de la base de datos
- Android Sqlite - "No hay tal tabla" Error
- ¿Cómo aceptar cadenas aproximadamente correctas como correctas, al comparar?
- EditText afterTextChanged no funciona
- Se ha eliminado una columna no válida al intentar consultar una columna.
El sistema de archivos del emulador no se asigna a un directorio en su disco duro. La imagen de disco del emulador se almacena como un archivo de imagen, que puede administrar a través de Eclipse (busque el icono de G1 en la barra de herramientas), o bien a través del emulador binario (ejecute "emulator -help" para 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 realizar un "pull de adb" para obtener el archivo de base de datos del emulador y en su disco duro normal.
Editar : Se ha suprimido la sugerencia de que esto también funciona para dispositivos no conectados – sólo funciona para emuladores y dispositivos en los que se está ejecutando adb como root.
Por favor, consulte este enlace o siga la respuesta a continuación.
Una actualización mencionada en los comentarios a continuación:
No es necesario que esté en la perspectiva de DDMS, simplemente abra el Explorador de archivos desde la ventana de Eclipse > Mostrar vista> Otros … Parece que la aplicación no necesita estar ejecutándose ni siquiera, puedo navegar por diferentes archivos de aplicaciones contenido. Estoy ejecutando ADB versión 1.0.29
O, puede probar el viejo enfoque:
Abra la perspectiva DDMS en su Eclipse IDE
( Ventana> Perspectiva abierta> Otros> DDMS )
y lo mas importante:
SU APLICACIÓN DEBE ESTAR FUNCIONANDO PARA QUE PUEDA VER LA JERARQUÍA DE CARPETAS Y ARCHIVOS .
A continuación, en la pestaña Explorador de archivos , seguirá la ruta:
Datos> datos> su-paquete-nombre> bases de datos> su archivo de base de datos .
A continuación, seleccione el archivo, haga clic en el icono de disket 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 ícono del teléfono (junto al icono del disket) y elegir el archivo que desea cargar.
Si desea ver el contenido del archivo .db , le aconsejo que utilice SQLite Database Browser, que puede descargar aquí .
PS: Si quieres ver la base de datos desde un dispositivo real, debes root tu teléfono.
Las otras respuestas están muy anticuadas. Con Android Studio , así es como lo haces:
- Haga clic en Toos> Android> Android Device Monidtor
- Haga clic en Explorador de archivos
- Vaya a su archivo db y haga clic en el botón Guardar .
Escribí un script bash simple, que extrae la base de datos del dispositivo android a su computadora (Linux, usuarios de 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
Las bases de datos se almacenan como archivos SQLite en / data / data / PACKAGE / databases / DATABASEFILE donde:
- PACKAGE es el paquete declarado en el archivo AndroidManifest.xml (etiqueta "manifiesto", atributo "paquete")
- DATABASEFILE es el nombre pasado cuando se llama al constructor SQLiteOpenHelper como se explica aquí: http://developer.android.com/guide/topics/data/data-storage.html#db
Puede ver (copiar desde / al sistema de archivos) el archivo de base de datos en el emulador que selecciona la perspectiva DDMS , en la pestaña Explorador de archivos.
Dado que la pregunta no se limita a Android Studio, por lo que estoy dando el camino para Visual Studio 2015 (trabajado para Xamarin).
Gracias especiales a otros respondedores de esta pregunta.
Solución simple: funciona tanto para dispositivos emuladores como para dispositivos conectados
1 Consulte la lista de dispositivos / emuladores actualmente disponibles.
$ adb devices
Lista de dispositivos conectados
G7NZCJ015313309 dispositivo emulador-5554 dispositivo
9885b6454e46383744 dispositivo
2 Ejecutar copia de seguridad en el 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á la base de datos en la carpeta /db