¿Por qué obtengo acceso denegado a la carpeta de datos cuando uso adb?


Me conecté a mi dispositivo en vivo usando el 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 root en mi teléfono?

 151
Author: Nick, 2009-06-25

13 answers

Hay dos cosas que debe recordar si desea navegar por todo en su dispositivo.

  1. Necesita tener un teléfono con acceso root para navegar por la carpeta de datos en un teléfono Android. Eso significa que tienes un dispositivo desarrollador (ADP1 o un ION de Google I/O) o has encontrado una manera de 'rootear' tu teléfono de otra manera.
  2. Necesita ejecutar ADB en modo root, haga esto ejecutando: adb root
 119
Author: Reto Meier,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-10-07 07:19:07

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

Listar el contenido del directorio de yourapp:

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

Cambiar a UID de com.yourapp y ejecutar todo otros comandos 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 directorio /data/data, el comando run-as 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).

 177
Author: Idolon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-10-18 13:17:54

Antes de empezar, ¿tienes un teléfono rooteado? si no, te sugiero encarecidamente que es hora de dar el salto. el 99% de los tutoriales que te ayudan a hacer esto requieren que tengas un teléfono rooteado (sé que b/c pasé alrededor de una hora buscando una manera de hacerlo sin tener un teléfono rooteado.. no pude encontrar ninguno..) también si lo piensas, tu iPhone también tiene que ser rooteado para hacer esta misma tarea. Así que es totalmente razonable. Más sobre enraizamiento al final de respuesta.

Desde la línea de comandos escriba:

adb shell

Esto te lleva a tu línea de comandos de shell de Android (deberías ver algo como esto: shell@android:/ $ ahora escribe:

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

Esto debería llevarte directamente al directorio de datos de com.domain.yourapp:

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

si no lo hace (es decir, si obtiene un error), entonces probablemente no tiene un teléfono rooteado, o no ha utilizado sus privilegios de usuario root. Para usar sus privilegios de usuario root, escriba su en la línea de comandos de adb y vea qué sucede, si obtiene un error, entonces su teléfono no está arraigado. Si no lo es, raíz primero y luego continuar estas instrucciones.

Desde allí puedes escribir ls y verás todos los directorios incluyendo 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 dbase.. si no lo tiene instalado (puede encontrarlo escribiendo sqlite3, si obtiene command not found entonces tendrá que instalarlo. Para instalar sqlite, siga las instrucciones aquí.

acerca de rooting: si nunca has rooteado tu teléfono antes, y te preocupa que se atornille tu teléfono, puedo decirte con plena confianza que no hay nada de qué preocuparse. hay toneladas de tutoriales de rooteo de teléfonos rápidos y fáciles para casi todos los modelos nuevos y antiguos que hay, y puedes rootear tu teléfono incluso si tienes una mac (rooteé mi s3 con mi mac).

 40
Author: abbood,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 11:47:09

Ad adb shell

Cd cd /data

Ls 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

OK!

 31
Author: HelloWorld,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-03-06 03:13:32

Tuve un problema similar al intentar operar en un Samsung Galaxy S arraigado. 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 del anterior, ejecute los siguientes dos comandos uno tras otro

> adb shell
$ su

Después del primer comando, si el prompt ha cambiado de '>' a 'above' como se muestra arriba, significa que ha ingresado al shell de adb ambiente. Si posteriormente el prompt ha cambiado a ' # ' después de emitir el segundo comando, eso significa que ahora eres root. Ahora, como root, puedes hacer lo que quieras con tu dispositivo.

Para volver al shell 'seguro', issue

# exit

Verás que el prompt '$' reaparece lo que significa que estás en el shell de adb como usuario y no como root.

 27
Author: rytis,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-04-05 13:18:17

También tuve muchos problemas con esto. Todavía no entiendo completamente el permiso y la ejecución de root, pero esto funcionó para mí (una de las respuestas anteriores en parte) para copiar el archivo de base de datos de /data/data/[nombre del paquete]/databases/my_db.db . Ejecutar shell root, o suen shell por alguna razón no funcionó, ni copió el archivo db (aunque pude navegar al directorio), ni sqlite3.

Por lo tanto, esto funcionó! En el símbolo del sistema 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 me las arreglé para enviarlo por correo electrónico. De vuelta en Windows, pude abrir el archivo db con SQLite Database Browser. :)

 19
Author: MSquare,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-05-11 18:24:15

Los siguientes son los dos pasos para obtener acceso root:

  1. Sus dispositivos Android deben tener sus raíces.
  2. En ADB shell, escriba su y el dispositivo Android le pedirá y/n? Usted elige permitir.
 2
Author: VietHuong,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-10-08 11:54:17

El problema podría ser que necesitamos dar específicamente acceso root a adb en las opciones de developnent en el último CMs.. Esto es lo que hice.

Abc@abc-L655:~ server sudo adb kill-server
abc@abc-L655:~ server sudo adb root start-server * el demonio no se está ejecutando. comenzando ahora en el puerto 5037 * * daemon iniciado con éxito * el acceso root está deshabilitado por la configuración del sistema-habilitar en configuración - > opciones de desarrollo

Después de alterar las opciones de desarrollo...

abc@abc-L655:~$ sudo adb kill-server
abc@abc-L655:~$ sudo adb root start-server
* daemon not running. starting it now on port 5037 *
* daemon started successfully *
restarting adbd as root
abc@abc-L655:~$ adb shell
root@android:/ # ls /data/ .... good to go.. 
 2
Author: ashishsony,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-06-02 02:01:27

Las compilaciones de producción no pueden ingresar /data/app

drwxrwx--- system   cache             1970-01-01 08:00 cache
drwxrwxr-x root     system            1970-01-01 08:00 mnt 
drwxrwx--x system   system            1970-01-01 08:15 data

Podría necesitar cambiar a propietario del derecho para operarlo.

 1
Author: keith,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-09-16 14:17:06

Si conoce el paquete de aplicación, puede cd directamente a esa carpeta..

Eg cd data/data/com.yourapp

Esto lo llevará a un directorio que es read/writable para que pueda cambiar los archivos según sea necesario. Dado que la carpeta es la misma en emulator, puede usarla para obtener la ruta de la carpeta.

 0
Author: Mark,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-05-21 04:35:46

Si solo desea ver su DB y tablas entonces la forma más sencilla es usar Stetho. Bastante buena herramienta para todos los desarrolladores de Android que utiliza SQLite buit por Facobook developed.

Steps to use the tool

  1. Agregue a continuación dependeccy en el archivo gradle de su aplicación (Module: app)

'compile' com.Facebook.stetho: stetho: 1.4.2 '

  1. Agregue las siguientes líneas de código en el método onCreate() de su Actividad
@Override
 protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 Stetho.initializeWithDefaults(this);
 setContentView(R.layout.activity_main);
 }

Ahora, construye tu aplicación & Cuando la aplicación se esté ejecutando, puede navegar por su base de datos de aplicaciones, abriendo chrome en la url:

chrome://inspect/#devices

Capturas de pantalla de la misma son como below_

ChromeInspact

ChromeInspact

Su DB

Su DB

Espero que esto ayude a todos! :)

 0
Author: Rupesh Yadav,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-12-18 15:55:17

Sin enraizamiento el dispositivo puede acceder a los archivos de la siguiente manera La captura de pantalla de cmd:

  1. Inicie el adb utilizando cmd desde la carpeta platform-tools de acuerdo con su usuario

    cd C:\Users\YourUserName\AppData\Local\Android\sdk\platform-tools
    

    Puede estar en otra carpeta depende de dónde lo haya instalado.

  2. Muestra los dispositivos de trabajo.

    adb devices
    

    Para decir el sistema operativo respond el comando es

    List of devices attached
    0123456789ABCDEF     device
    
  3. Escribe el comando

        adb -s 0123456789ABCDEF shell "su"
    

    Se abrirá en

        root@theDeviceName:/ #
    

4.Acceder a los archivos, lista todos los archivos

ls

Y así-en el directorio chang a cualquier otro lugar como la carpeta de datos

cd data/data
 -1
Author: Mahmoud Ashraf,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-04-16 23:25:14

Cuando se encuentra en el directorio shell del dispositivo. Basta con ejecutar

su - root

Entonces debería poder acceder a la carpeta data/.

 -5
Author: Petsome,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-10-02 11:26:03