sábado, 23 de enero de 2016

Extraer archivo base de datos de móvil Android (sin root) a ordenador


Extraer una copia de una base de datos de un teléfono móvil Android (sin root) a ordenador


Imagen 1. Extraer archivo base de datos de móvil Android (sin root) a ordenador


Tras realizar una aplicación Android que utiliza una base de datos (db) SQLite, necesitaba comprobar que la db se creaba correctamente y guardaba los datos. ¿Cómo verificarlo?

Al conectar el teléfono por usb en el ordenador; mi aplicación no aparecía en ninguna carpeta.

En una primera búsqueda por internet la recomendación es rootear el teléfono para acceder a sus carpetas y datos. Por suerte, conseguí dar con una solución que no implicara modificar/alterar el teléfono.

A continuación se explican dos métodos, en el primero se toma una copia del archivo base de datos, y en el segundo se muestra el archivo directamente.

Extraer una copia de la db


En mi caso, el móvil en el que pruebo la aplicación tiene estas características:

  • Versión del sistema operativo: Android 4.1.1
  • Teléfono rooteado: no


Después de conectar el teléfono por usb al ordenador, desde la terminal (he utilizado sistema operativo MAC OS X) escribo dos líneas:

adb shell run-as com.example.carlos.practicafinal_cm chmod 666 databases/DBWifi

adb pull /data/data/com.example.carlos.practicafinal_cm/databases/DBWifi /Users/xxx/Desktop 


Imagen 2. Líneas para extraer una copia del archivo deseado


Respecto a la primera línea:

  • adb shell: para acceder al dispositivo móvil. En caso de haber varios dispositivos (aunque sean emuladores), buscar el código que lo identifica con adb devices e incluirlo en la línea anterior junto con -s (ejm. adb -s 5xx00xxb shell).

Imagen 3. Consultar dispositivos Android

  • run-as com.example.carlos.practicafinal_cm: para acceder al paquete de la aplicación que he creado. El nombre del paquete puede verse en el entorno de desarrollo Android Studio, tras ejecutar la opción 'Run app' (icono de play en la parte superior de la ventana):
Imagen 4. Ver el nombre del paquete de nuestra aplicación


  • chmod 666 database/DBWifi: se cambian los permisos del archivo base de datos (en mi caso lo llamé 'DBWifi') para poder copiarlo más tarde en el ordenador. El archivo DBWifi está dentro de la carpeta 'database'. Una explicación de los permisos de archivos y carpetas puede verse en este enlace http://superuser.com/questions/295591/what-is-the-meaning-of-chmod-666.

Tras ejecutar la primera línea, la segunda consiste en:

  • adb pull: con esta orden se extrae el archivo deseado.
  • /data/data/com.example.carlos.practicafinal_cm/databases/DBWifi: ruta al archivo en cuestión.
  • /Users/xxx/Desktop: ruta donde extraer una copia del archivo.

IMPORTANTE: de existir el archivo en la ruta especificada, será sobrescrito.


Ya con el archivo en el ordenador, puede abrirse con cualquier programa que lea bases de datos.


Imagen 5. Abrir archivo base de datos

Ver archivo db desde terminal


En caso de querer ver la base de datos desde la terminal puede ejecutarse esta línea:

adb shell cat /data/data/com.example.carlos.practicafinal_cm/databases/DBWifi


Imagen 6. Ver archivo desde terminal

Tiene la ventaja de no ser necesario modificar ningún permiso; más rápido.

La desventaja, visualmente es mas cómodo abrir la base de datos con un programa externo al quedar la información bien estructurada.

Un saludo,

Carlos A. Molina

Páginas webs utilizadas


Para dar con la solución, he consultado las siguientes páginas:

Tutorial donde explica cómo realizar la aplicación Android que cree la base de datos.

Extraer una copia del archivo al escritorio.

Leer db desde la terminal.

http://superuser.com/questions/295591/what-is-the-meaning-of-chmod-666
Explicación de los permisos de archivos y carpetas; así como su modificación.

https://pixabay.com
Imágenes de uso libre; para la imagen de esta entrada.

2 comentarios:

  1. El metodo mas efectivo por consola de Android Studio...Gran ejemplo, pues no me funcionó usar apps de consola en el móvil. Ni usar algoritmos para guardar en la memoria del móvil(no para mi caso)

    ResponderEliminar
    Respuestas
    1. Gracias Jerson. Me alegra mucho que esta entrada ayudara.
      Saludos.

      Eliminar