¿Acceso ADB denegado a la carpeta de datos?

11 minutos de lectura

avatar de usuario de gregm
gregm

Me conecté a mi dispositivo en vivo usando adb y los siguientes comandos:

C:\>adb -s HT829GZ52000 shell
$ ls
ls
sqlite_stmt_journals
cache
sdcard
etc
system
sys
sbin
proc
logo.rle
init.trout.rc
init.rc
init.goldfish.rc
init
default.prop
data
root
dev
$ cd data
cd data
$ ls
ls
opendir failed, Permission denied

Me sorprendió ver que tengo acceso denegado. ¿Cómo es que no puedo navegar por los directorios usando la línea de comandos de esta manera?

¿Cómo obtengo acceso de root en mi teléfono?

  • Simple… asegúrese de que la pantalla de su teléfono esté encendida. Haga clic en “Permitir” cuando le pregunte si desea que Desconocido tenga acceso a la raíz. Hecho.

    usuario457909

    25 de septiembre de 2010 a las 2:21

  • decidió crear un avd simple para tener acceso a la base de datos. ¿Alguien tiene enlaces a guías, sin destellos y gráficos “personalizados” para desarrolladores? Cómo obtener Android simple y sencillo en un dispositivo comprado.

    – bgs

    6 de enero de 2011 a las 19:20


  • No aparece tal aviso en mi dispositivo Android 7.1.1. Pero adb sigue adelante y enumera el contenido del directorio. El problema es que los contenidos en realidad no existen. Estoy usando adb-sync para agregar contenido. Es bastante raro.

    –Tom Russell

    29 de julio de 2018 a las 6:04


Avatar de usuario de Idolon
ídolo

Actualización 2023; acceder a los datos es no incluso a través de USB (modo de transferencia de archivos) ya es posible (desde hace algunas actualizaciones de dispositivos Android y/o Samsung). Rootea tu dispositivo.

Respuesta original;

A partir del nivel 8 de la API (Android 2.2), para la aplicación depurable (la creada por Android Studio todas las veces, a menos que se haya solicitado la versión de lanzamiento), puede usar el shell run-as comando para ejecutar un comando o ejecutable como un usuario/aplicación específico o simplemente cambiar a la UID de su aplicación para que pueda acceder a su datos directorio.

Listar el contenido del directorio de su aplicación:

run-as com.yourapp ls -l /data/data/com.yourapp

Cambiar a UID de com.tuaplicación y ejecute todos los comandos adicionales usando ese uid (hasta que llame exit):

run-as com.yourapp
cd /data/data/com.yourapp
ls -l
exit

Nota 1: hay un problema conocido con algunos teléfonos HTC Desire. Debido a un propietario/permisos no estándar del /data/data directorio, run-as el comando no se ejecuta en esos teléfonos.

Nota 2: Como se señala en los comentarios de @Avio:
run-as también tiene problemas con los teléfonos Samsung Galaxy S que ejecutan Cyanogenmod en cualquier versión (de 7 a 10.1) porque en esta plataforma /data/data es un enlace simbólico a /datadata. Una forma de resolver el problema es reemplazar el enlace simbólico con el directorio real (desafortunadamente, esto generalmente requiere acceso de root).

  • Esto funciona como explicaste dónde run-as com.mypackage. El problema con el que me encontré es sqlite3 /data/data/com.mypackage/databases/mydb dice “sqlite3: permiso denegado”. ¿Se puede ejecutar sqlite3 solo por root?

    – estilo

    27 de noviembre de 2011 a las 6:28

  • Funciona de maravilla cuando se trata de enumerar archivos almacenados en el almacenamiento interno.

    – zaplec

    21 de junio de 2012 a las 13:10

  • Tuve que cambiar los permisos en el archivo para poder moverlo a mi tarjeta SD, porque no podía ejecutarlo como mi aplicación. Entonces, 1) ejecute como com.package.example, chmod 777 databasefile.db. 2) salga, vaya a sdcard, cp /data/data/com.package.example/databases/databasefile.db . Y el paso 3 debería ser revertir los permisos 777

    – Maragües

    30 de abril de 2013 a las 7:45

  • Mi paquete es desconocido sin importar cuán correctamente lo deletree en mi terminal: (

    – Costa Michailidis

    24 de junio de 2014 a las 1:10

  • Esta debería ser la respuesta marcada como correcta, ya que este es el método correcto para usar en teléfonos no rooteados.

    – LNI

    27 de abril de 2016 a las 16:43

Avatar de usuario de Reto Meier
Reto Meier

Si desea explorar todo en su dispositivo, debe hacer dos cosas:

  1. Debe tener un teléfono con acceso raíz para explorar la carpeta de datos en un teléfono Android. Eso significa que tiene un dispositivo de desarrollador (ADP1 o un ION de Google I/O) o ha encontrado una manera de ‘rootear’ su teléfono de alguna otra manera.
  2. Debe ejecutar ADB en modo raíz, haga esto ejecutando: adb root

Nota que si el paso 1 se realiza correctamente, el paso 2 simplemente funciona (no es necesario reconstruir nada a partir de los códigos fuente).

  • Y “adb root” requiere una compilación personalizada de adb; de lo contrario, “adbd no puede ejecutarse como root en compilaciones de producción”

    – bortzmeyer

    31 de enero de 2011 a las 13:55

  • compilación personalizada de adb? de donde puedo sacarlo

    – Gopinat

    2 de mayo de 2011 a las 11:09

  • @Gopinath: creo que debe compilarlo desde la fuente para el dispositivo de destino, configurarlo para permitir la raíz usando el ndk y luego mostrarlo en el dispositivo junto con una imagen de los archivos binarios.

    –Ben Jaguar Marshall

    2 de noviembre de 2012 a las 2:00

  • AFAIK, no es necesario tener una compilación personalizada de adb. ES necesario tener adbd admite la ejecución como root, pero este adbd está en el dispositivo, por lo que cualquier modificación que se haya realizado para que el dispositivo tenga acceso de root es suficiente.

    – nitzanms

    1 oct 2014 a las 11:14

  • Esta no debería ser la respuesta aceptada. Vea la respuesta de Idolon a continuación.

    – Brill Pappin

    15 de noviembre de 2017 a las 15:20

avatar de usuario de abbood
abad

antes que empecemos, Tienes un arraigado ¿teléfono? si no, le sugiero enfáticamente que es hora de que dé el salto. El 99% de los tutoriales que te ayudan a hacer esto requieren que tengas un teléfono rooteado (lo sé porque pasé alrededor de una hora buscando una manera de hacerlo sin tener un teléfono rooteado… no pude encontrar ninguna… ) además si lo piensas bien, tu iPhone también tiene que estar rooteado para hacer esta misma tarea. Así que es totalmente razonable. Más sobre enraizamiento al final de la respuesta.

desde su línea de comando escriba:

adb shell

esto lo lleva a la línea de comandos de su shell de Android (debería ver algo como esto: shell@android:/ $ ahora escriba:

shell@android:/ $run-as com.domain.yourapp

esto debería llevarlo directamente al directorio de datos de com.domain.yourapp:

shell@android:/data/data/com.domain.yourapp $ 

si no es así (es decir, si obtiene un error), probablemente no tenga un teléfono rooteado o no haya usado sus privilegios de usuario root. Para usar sus privilegios de usuario raíz, escriba su en la línea de comando adb y vea qué sucede, si obtiene un error, entonces su teléfono no está rooteado. Si no es así, enraícelo primero y luego continúe con estas instrucciones.

desde allí puedes escribir ls y verá todos los directorios, incluido el dbs:

shell@android:/data/data/com.domain.yourapp $ ls

cache
databases
lib
shared_prefs   

después de eso, puede usar sqlite3 para navegar por la base de datos … si no lo tiene instalado (puede encontrarlo escribiendo sqlite3Si lo consigues command not found entonces tendrás que instalarlo. Para instalar sqlite, siga las instrucciones aquí.

sobre el enraizamiento: Si nunca antes ha rooteado su teléfono y le preocupa que lo arruine, puedo decirle con total confianza que no hay nada de qué preocuparse. hay toneladas de tutoriales rápidos y fáciles de enraizamiento de teléfonos para casi todos los modelos nuevos y antiguos que existen, y puedes rootear tu teléfono incluso si tienes una mac (Rooteé mi s3 con mi mac).

  • No necesitas un teléfono rooteado para run-as trabajar. Acabo de probarlo en un Galaxy Nexus S de producción.

    –Ted Hopp

    10 de octubre de 2013 a las 2:44

  • @TedHopp y, por lo tanto, b/c funciona bien en su Galaxy Nexus S construido en producción… funcionará bien en todos los teléfonos Android, ¿verdad?

    – abad

    2 de abril de 2014 a las 5:19

  • @TedHopp personalmente, no soy un gran desarrollador de Android… así que instrucciones como build the application as debuggable (either by building it with the Eclipse, or ant debug command) Puede sonar trivial para ti, pero me intimidan un poco. Supongo que mi respuesta es más para las personas que se sienten cómodas rooteando sus teléfonos Android, pero que no están bien versadas en el mundo de los desarrolladores de Android. Pero me alegro de que tengamos esta discusión. Quiero que los lectores de mi respuesta estén al tanto de las otras alternativas que no son de enraizamiento.

    – abad

    02/04/2014 a las 11:51

  • también ten en cuenta que nunca dije eso todo los teléfonos deben estar rooteados… en la respuesta original dije que el 99% de los tutoriales requieren un teléfono rooteado… 😉

    – abad

    2 abr 2014 a las 11:53

  • Gran respuesta hombre. Estoy usando algunos teléfonos diferentes aquí (MotoX, nexus4, LG G3, SGIII) y esto es bastante bueno para todos.

    – Chad Bingham

    03/10/2014 a las 22:58

$ shell adb

$ cd /datos

$ ls

opendir falló, Permiso denegado


Usted debe hacer esto:

$ adb shell

$ cd /data

shell@android:/data $ run-as com.your.package 

shell@android:/data/data/com.your.package $ ls

¡DE ACUERDO!

avatar de usuario de rytis
rytis

Tuve un problema similar al intentar operar en un Samsung Galaxy S rooteado. Emitir un comando desde el shell de la computadora

> adb root

falla con un mensaje “no se puede ejecutar como root en compilaciones de producción”. Aquí hay un método simple que permite convertirse en root.

En lugar de lo anterior, emita los siguientes dos comandos uno tras otro

> adb shell
$ su

Después del primer comando, si el indicador ha cambiado de ‘>’ a ‘$’ como se muestra arriba, significa que ha ingresado al entorno de shell adb. Si posteriormente el indicador ha cambiado a ‘#’ después de emitir el segundo comando, eso significa que ahora es root. Ahora, como root, puede hacer lo que quiera con su dispositivo.

Para volver al shell ‘seguro’, emita

# exit

Verá que vuelve a aparecer el indicador ‘$’, lo que significa que está en el shell adb como usuario y no como root.

  • Recibo un error de que ‘adb root’ no funciona en compilaciones de producción.

    – Igor Ganapolski

    20 de abril de 2012 a las 16:58

  • ¡Genial gracias! Por cierto, necesitas tener un teléfono rooteado para hacer esto. ¿También puede necesitar SuperSU o algo similar? Al menos cuando traté de usar “su”, SuperSU me dio un diálogo en mi teléfono.

    -Richard Fung

    25 de octubre de 2013 a las 4:50


  • /sistema/bin/sh: su: no encontrado

    – matt lohkamp

    25 de junio de 2014 a las 23:58

  • gracias 🙂 el adb shell + su resolvió el molesto asunto del permiso para siempre. tuve un problema sobre su: not found en Android 4.3 pero desde que actualicé a 4.4.2 el problema desapareció. 4.3 parece tener problemas.

    usuario1299518

    6 de noviembre de 2014 a las 1:21

  • su no está disponible para mí, Nexus 5 / Android 5.1 – ¿hay alguna solución?

    – CodeManX

    14/04/2015 a las 17:24

Avatar de usuario de MSquare
mcuadrado

Tuve muchos problemas con esto también. Todavía no entiendo completamente el permiso y la ejecución de la raíz, pero esto funcionó para mí (una de las respuestas anteriores en parte) para copiar el archivo de la base de datos de /data/data/[package name]/bases de datos/mi_db.db. Correr root shello su en shell por alguna razón no funcionó, ni copiar el archivo db (aunque pude navegar al directorio), ni tampoco sqlite3.

Entonces, ¡esto funcionó! En el símbolo del sistema de DOS:

C:\Program Files\Android\android-sdk\platform-tools>adb shell
1|shell@android:/ $ run-as de.vogella.android.locationapi.maps
run-as de.vogella.android.locationapi.maps
1|shell@android:/data/data/de.vogella.android.locationapi.maps $ cd /data
cd /data
shell@android:/data $ cd data
cd data
shell@android:/data/data $ cd de.vogella.android.locationapi.maps
cd de.vogella.android.locationapi.maps
shell@android:/data/data/de.vogella.android.locationapi.maps $ cd databases
cd databases
shell@android:/data/data/de.vogella.android.locationapi.maps/databases $ ls
ls
bus_timetable_lines.db
bus_timetable_lines.db-journal
shell@android:/data/data/de.vogella.android.locationapi.maps/databases $ cat bus
_timetable_lines.db > /sdcard/db_copy.db
 bus_timetable_lines.db > /sdcard/db_copy.db                                   <
shell@android:/data/data/de.vogella.android.locationapi.maps/databases $exit   ^
exit
shell@android:/ $ exit
exit

C:\Program Files\Android\android-sdk\platform-tools>

Ahora vaya al directorio SDCARD y obtenga su archivo db_copy.db. Incluso eso estaba oculto, pero logré enviarlo por correo electrónico. De vuelta en Windows, pude abrir el archivo db con SQLite Database Browser. 🙂

  • Recibo un error de que ‘adb root’ no funciona en compilaciones de producción.

    – Igor Ganapolski

    20 de abril de 2012 a las 16:58

  • ¡Genial gracias! Por cierto, necesitas tener un teléfono rooteado para hacer esto. ¿También puede necesitar SuperSU o algo similar? Al menos cuando traté de usar “su”, SuperSU me dio un diálogo en mi teléfono.

    -Richard Fung

    25 de octubre de 2013 a las 4:50


  • /sistema/bin/sh: su: no encontrado

    – matt lohkamp

    25 de junio de 2014 a las 23:58

  • gracias 🙂 el adb shell + su resolvió el molesto asunto del permiso para siempre. tuve un problema sobre su: not found en Android 4.3 pero desde que actualicé a 4.4.2 el problema desapareció. 4.3 parece tener problemas.

    usuario1299518

    6 de noviembre de 2014 a las 1:21

  • su no está disponible para mí, Nexus 5 / Android 5.1 – ¿hay alguna solución?

    – CodeManX

    14/04/2015 a las 17:24

avatar de usuario de roshnet
roshnet

Esto funciona si su dispositivo Android está rooteado de alguna manera (no estoy seguro si funciona para no rooteados).

  1. adb shell – acceder a la concha
  2. su – convertirse en el superusuario.

Ahora puede leer todos los archivos en todos los directorios.

¿Ha sido útil esta solución?