miércoles, 15 de octubre de 2014

Encontrar base de datos SQLite en dispositivo android

Cuando se está trabajando en una aplicación de Android que hace uso de una base de datos SQLite, puede resultar necesario buscar el archivo de esta dentro del sistema de archivos del dispositivo en el que se están realizando pruebas, ya sea para verificar si esta se creó correctamente, si los datos se están almacenando, entre otras cosas.

La base de datos de cada aplicación se ubica en la siguiente ruta dentro del dispositivo:

/data/data/[mi.paquete.app]/databases/

En donde [mi.paquete.app] es el nombre del paquete principal de nuestra aplicación Android. En dicho directorio se almacena el archivo de la base de datos en sí, que posee el nombre especificado en el constructor de la clase SQLiteOpenHelper. También puede contener el “rollback journal” de la base de datos, que posee el mismo nombre, pero añadiendo el prefijo “-journal”. Por ejemplo, si la base de datos se llama “BDPrueba.db”, entonces los archivos que encontraremos serían “BDPrueba.db”, y posiblemente “BDPrueba.db-Journal”.



¡La carpeta data está vacía!

Si estamos usando el File Explorer del Android Device Monitor/DDMS para consultar los archivos del dispositivo Android, en algunos casos puede resultar que el directorio /data en apariencia no posee ningún contenido. Sin embargo, esto sucede debido a que esta carpeta no posee los permisos necesarios para ver su contenido.



Si esto sucede, lo que hay que hacer es otorgar los permisos necesarios para acceder a los archivos. Esto se puede hacer en dispositivos rooted y emuladores a través del ADB Shell, para entrar en modo terminal a nuestro dispositivo.

Para iniciar el ABD Shell, se ejecuta el siguiente comando en la terminal:

adb shell

Si hay varios dispositivos conectados, es necesario indicar el serial del dispositivo, de la siguiente forma:

adb -s [serial] shell

En donde [serial] es el serial del dispositivo deseado.

El serial del dispositivo se puede obtener ejecutando el comando adb devices
El serial del dispositivo aparece en la primera columna a la izquierda, al ejecutar el comando.
El serial del dispositivo aparece en la primera columna a la izquierda, al ejecutar el comando.

Una vez estando en la terminal del dispositivo, se deben iniciar modo super-usuario (usuario root):

$ su

Luego, hay que ejecutar el siguiente comando, para otorgar permiso completo de acceso a la rama de carpetas y archivos para todos los usuarios:

# chmod 777 /data /data/data /data/data/[mi.paquete.app] /data/data/[mi.paquete.app]/databases /data/data/[mi.paquete.app]/databases/*

Finalmente, para salir de la terminal:

#exit
$exit

Puede que no sea necesario otorgar control total sobre las carpetas, habría que probar cuáles serían los permisos mínimos dependiendo de lo que se necesite hacer con los archivos.
Con la tecnología de Blogger.