En un dispositivo Android no rooteado, puedo navegar a la carpeta de datos que contiene la base de datos usando el run-as
comando con el nombre de mi paquete. La mayoría de los tipos de archivos me contentan con solo verlos, pero con la base de datos que me gustaría extraer del dispositivo Android.
¿Existe un comando download
copy
or move
de esta parte de adb shell? Me gustaría descargar el archivo de la base de datos y ver su contenido usando un navegador de base de datos.
Una respuesta aquí implica convertir el paquete completo de la aplicación en un archivo comprimido, pero no hay más respuesta sobre cómo extraer ese archivo una vez que esto se hace y se mueve a la máquina, dejándome muy desviado cuando podría haber una solución más directa para empezar.
Respuestas:
Por diseño
user
de construcción de Android (que es lo que tiene en su teléfono hasta que desbloquee el gestor de arranque y el flash del teléfono conuserdebug
oeng
software) restringe el acceso al almacenamiento interno - cada aplicación sólo puede acceder a sus propios archivos. Afortunadamente para los desarrolladores de software que no están dispuestos a rootear sus teléfonos, Google proporciona una forma de acceder al almacenamiento interno de versiones depurables de sus paquetes medianterun-as
comando.Para descargar el
/data/data/debuggable.app.package.name/databases/file
desde un dispositivo Android 5.1+, ejecute el siguiente comando:Para descargar varios archivos en una carpeta de una
/data/data/debuggable.app.package.name/
vez, usetar
:fuente
run-as
para copiar el archivo a un lugar en el almacenamiento externo y extraiga el archivo de la base de datos desde allí, en lugar de jugar con los permisos del archivo.La respuesta aceptada ya no me funciona (¿bloqueada por Android?)
Entonces, en cambio, hice esto:
fuente
su
para que elrun-as
comando funcione.Si alguien que busca extraer la base de datos de la aplicación de depuración puede usar el siguiente procedimiento:
fuente
He publicado un script de shell simple para volcar bases de datos:
Realiza dos métodos distintos que se describen aquí:
\r
caracteres que algunos dispositivos envían al shell.Desde aquí puede utilizar una variedad de aplicaciones CLI o GUI SQLite, como
sqlite3
osqlitebrowser
, para explorar el contenido de la base de datos.fuente
No pude hacer que nada más funcionara para mí, pero esto:
La primera salida es salir del run-as, la segunda salida es salir del adb shell para hacer la extracción.
fuente
Para la versión de depuración de la aplicación, es muy conveniente usar el comando
adb exec-out run-as xxx.yyy.zzz cat somefile > somefile
para extraer un solo archivo. Pero tienes que hacerlo varias veces para varios archivos. Aquí hay un script simple que uso para extraer el directorio.Espero que sea de ayuda. Este script también está disponible en gist .
El uso típico es
luego extraerá todos los archivos del directorio de bases de datos de su aplicación, es decir
/data/data/com.example.myapplication/databases
, al directorio actual.fuente
Un enfoque mucho más simple para descargar el archivo en su computadora local:
En el shell de su PC, ejecute:
fuente
Puede utilizar este script para obtener la base de datos de Realm.
fuente
Si alguien está buscando otra respuesta que se pueda usar para recuperar
Database
yShared Preferences
luego siga este paso:En su
build.gradle
archivo de su aplicación, agregue una líneaahora, cuando ejecute su aplicación en
non-release
modo, su aplicación abrirá automáticamente el puerto 8080 desde su dispositivo,IP address
asegúrese de que su dispositivo esté conectado a través dewifi
ylaptop
esté compartiendo la misma red. Ahora simplemente visite la URLpara ver todos los datos de la base de datos junto con las preferencias compartidas.
fuente
Aquí hay una solución que funciona en un dispositivo con Android 5.1. El siguiente ejemplo es para Windows.
Necesita sed (o sed.exe en Windows, por ejemplo, de cygwin.) (En Unix, simplemente estará allí;)). Para eliminar los caracteres '\ r' incorrectos, al menos en Windows.
Ahora simplemente ejecute el siguiente comando:
El comando sed elimina los caracteres / r finales.
Por supuesto, debe reemplazar "com.yourcompany.yourapp" con el nombre del paquete de la aplicación y "YourDatabaseName" con el nombre de la base de datos en la aplicación.
fuente
El archivo de la base de datos está vacío cuando se usa
adb run-as
. Esto se puede resolver llamando a close () en la instancia de RoomDatabase. Llame a close () para permitir que SQLite escriba su diario en el disco. Creé este botón que cierra la conexión de la base de datos a pedido:vía GIPHY
A continuación, se explica cómo realizar una llamada de cierre en la instancia de RoomDatabase.
fuente