Recupere la base de datos o cualquier otro archivo del almacenamiento interno utilizando ejecutar como

7 minutos de lectura

Recupere la base de datos o cualquier otro archivo del
CQM

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 me gustaría extraerlos del dispositivo Android.

Hay un download copy o move comando 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 todo el paquete de la aplicación en un archivo comprimido, pero no hay más respuestas sobre cómo extraer ese archivo una vez que se hace esto y se mueve a la máquina, lo que me deja muy desviado cuando podría haber una solución más directa para empezar.

  • Pruebe adb pull stackoverflow.com/questions/8650407/…

    – Indoloro

    27 de agosto de 2013 a las 17:28

  • stackoverflow.com/questions/13006315 Extracción de base de datos sin dispositivo de enraizamiento

    – Príncipe Naveen P

    20 de mayo de 2016 a las 6:56


1646760194 538 Recupere la base de datos o cualquier otro archivo del
alex p

Por diseño user compilación de Android (eso es lo que tiene en su teléfono hasta que desbloquee el gestor de arranque y flashear el teléfono con userdebug o eng software) restringe el acceso al Almacenamiento interno – cada aplicación solo puede acceder a sus propios archivos. Afortunadamente para los desarrolladores de software que no están dispuestos a raíz sus teléfonos Google proporciona una manera de acceder a la Almacenamiento interno de depurable versiones de sus paquetes usando run-as mando.

Para descargar el /data/data/debuggable.app.package.name/databases/file desde un dispositivo Android 5.1+ ejecute el siguiente comando:

adb exec-out run-as debuggable.app.package.name cat databases/file > file

Para descargar varios archivos en una carpeta bajo el /data/data/debuggable.app.package.name/ a la vez – uso tar:

adb exec-out run-as debuggable.app.package.name tar c databases/ > databases.tar
adb exec-out run-as debuggable.app.package.name tar c shared_prefs/ > shared_prefs.tar

  • O simplemente usa run-as para copiar el archivo a un lugar en el almacenamiento externo y extraer el archivo de la base de datos desde allí, en lugar de perder el tiempo con los permisos del archivo.

    – CommonsWare

    4 de julio de 2014 a las 11:02


  • Run-as no tiene permiso para escribir en la tarjeta SD; se agregó algo nuevo con la última actualización… 🙁

    – ranura

    13 de enero de 2015 a las 11:09

  • Cuando ejecuto adb shell “run-as package.name chmod 666 /data/data/package.name/databases/file” adb me termina el error –>run-as: exec falló para chmod666 Error: Permiso denegado. estoy en nexus 7 sin root

    – Shudy

    13 de enero de 2015 a las 12:02

  • El acceso de escritura a la tarjeta SD externa ya no es posible con adb.

    – ranura

    13 de enero de 2015 a las 13:40

  • Si encuentra que está recuperando un archivo en blanco o casi en blanco, es posible que el archivo sea simplemente un error de la consola que ha sido redirigido a este archivo que ha creado. Un problema frecuente aquí es que está intentando copiar una base de datos de la variante de lanzamiento de su aplicación. Solo puede copiar bases de datos de la variante de depuración de su aplicación. Si esto sucede, simplemente instale la variante de depuración y vuelva a intentar el comando. Espero que esto ayude a alguien.

    – Aonghus Shortt

    14 de abril de 2017 a las 18:02


1646760195 745 Recupere la base de datos o cualquier otro archivo del
mármol

La respuesta aceptada ya no me funciona (¿bloqueada por Android?)

Entonces, en cambio, hice esto:

> adb shell
shell $ run-as com.example.package
shell $ chmod 666 databases/file
shell $ exit                                               ## exit out of 'run-as'
shell $ cp /data/data/package.name/databases/file /sdcard/
shell $ run-as com.example.package
shell $ chmod 600 databases/file
> adb pull /sdcard/file .

  • Esta debería ser la nueva respuesta correcta O @Alex P. Debe agregar esta respuesta para las versiones más nuevas de Android. También en mi caso tuve que usar 777 y aplicarlo al directorio de la base de datos primero/también antes de poder acceder al archivo db.

    – muetzenflo

    31 de marzo de 2015 a las 9:10

  • Mi dispositivo está rooteado, pero descubrí que todavía necesito ejecutar su para obtener el run-as mando funcionando.

    – ThomasW

    9 de abril de 2015 a las 8:26

  • ¿Qué pasa si no tienes una tarjeta SD?

    – Zorro Gyum

    23 de septiembre de 2015 a las 12:19

  • si no tiene una tarjeta SD, todavía hay un directorio “sdcard” de todos modos.

    – los árboles están en todas partes

    23/09/2015 a las 22:50

  • ¡Genial!. funcionó para mí también. ¿Podemos hacer un archivo por lotes/shell? simplemente pasando el nombre del archivo db como parámetro y tenemos el archivo db.

    – Qadir Hussein

    18 de agosto de 2017 a las 11:09


Si alguien busca extraer la base de datos de aplicación de depuración puede usar el siguiente procedimiento:

  1. buscar y abrir el explorador de archivos del dispositivo

buscar y abrir el explorador de archivos del dispositivo

  1. Seleccione su teléfono y luego navegue hasta data/data directorio

ir al directorio de datos/datos

  1. Ahora busque su paquete de aplicación y vaya a la carpeta de bases de datos. Puede ver las bases de datos allí y al hacer clic derecho, obtendrá la opción de guardar esto en su disco.

ingrese la descripción de la imagen aquí

  • Guau, mucho más fácil y seguro en comparación con el uso de adb-shell

    – usuario1708860

    10 de marzo de 2019 a las 12:43

  • En Android Studio 4.1.3 Ver->Herramientas de Windows->Explorador de archivos del dispositivo

    – redocodificador

    23 de marzo de 2021 a las 9:26

  • ¡La manera más fácil! ¡Gracias!

    – Joel Nieman

    27 de agosto de 2021 a las 9:45

Recupere la base de datos o cualquier otro archivo del
Pablo Lammertsma

He publicado un script de shell simple para volcar bases de datos:

https://github.com/Pixplicity/humpty-dumpty-android

Realiza dos métodos distintos descritos aquí:

  1. Primero, intenta hacer que el archivo sea accesible para otros usuarios e intenta extraerlo del dispositivo.
  2. Si eso falla, transmite el contenido del archivo a través de la terminal a la máquina local. Realiza un truco adicional para eliminar \r caracteres que algunos dispositivos envían al shell.

Desde aquí puede usar una variedad de aplicaciones CLI o GUI SQLite, como sqlite3 o sqlitebrowserpara navegar por el contenido de la base de datos.

1646760200 49 Recupere la base de datos o cualquier otro archivo del
Triplee121

No pude hacer que nada más funcionara para mí, excepto esto:

adb shell
run-as package.name
cat /databases/databaseFileName.db > /sdcard/copiedDatabaseFileName.db
exit
exit
adb pull /sdcard/copiedDatabaseFileName.db /file/location/on/computer/

La primera salida es salir de run-as, la segunda salida es salir de adb shell para hacer el pull.

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.

#!/bin/bash
P=
F=
D=

function usage()
{
    echo "$(basename $0) [-f file] [-d directory] -p package"
    exit 1
}

while getopts ":p:f:d:" opt
do
    case $opt in
        p)
            P=$OPTARG
            echo package is $OPTARG
            ;;
        f)
            F=$OPTARG
            echo file is $OPTARG
            ;;
        d)
            D=$OPTARG
            echo directory is $OPTARG
            ;;
        \?)
            echo Unknown option -$OPTARG
            usage
            ;;
        \:)
            echo Required argument not found -$OPTARG
            usage
            ;;
    esac
done

[ x$P == x ] && {
    echo "package can not be empty"
    usage
    exit 1
}

[[ x$F == x  &&  x$D == x ]] && {
    echo "file or directory can not be empty"
    usage
    exit 1
}

function file_type()
{
    # use printf to avoid carriage return
    __t=$(adb shell run-as $P "sh -c \"[ -f $1 ] && printf f || printf d\"")
    echo $__t
}

function list_and_pull()
{
    t=$(file_type $1)
    if [ $t == d ]; then
        for f in $(adb shell run-as $P ls $1)
        do
            # the carriage return output from adb shell should
            # be removed
            mkdir -p $(echo -e $1 |sed $'s/\r//')
            list_and_pull $(echo -e $1/$f |sed $'s/\r//')
        done
    else
        echo pull file $1
        [ ! -e $(dirname $1) ] && mkdir -p $(dirname $1)
        $(adb exec-out run-as $P cat $1 > $1)
    fi
}

[ ! -z $D ] && list_and_pull $D
[ ! -z $F ] && list_and_pull $F

Espero que sea útil. Este guión también está disponible en esencia.

El uso típico es

$ ./exec_out.sh -p com.example.myapplication -d databases

luego extraerá todos los archivos en el directorio de bases de datos de su aplicación, que es /data/data/com.example.myapplication/databasesen el directorio actual.

1646760201 5 Recupere la base de datos o cualquier otro archivo del
emre

Un enfoque mucho más simple para descargar el archivo en su computadora local:

En el shell de su PC, ejecute:

adb -d shell 'run-as <package_name> cat /data/data/<package_name>/databases/<db_name>' > <local_file_name>

  • Bastante cerca, pero esto me saca una base de datos mal formada.

    – No

    15 de marzo de 2019 a las 13:13

  • Tuve que saltarme el -d en mi caso, de lo contrario, esta es la forma en que siempre busco (es decir, google) cuando intento extraer un archivo.

    – Krøllebølle

    13 oct 2020 a las 10:47

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad