Pregunta

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 como esta?

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

¿Fue útil?

Solución

Hay dos cosas para recordar si desea explorar todo en su dispositivo.

  1. Debe tener un teléfono con acceso de root 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 has encontrado un manera de 'rootear' tu teléfono de otra manera.
  2. Necesita ejecutar ADB en modo raíz, haga esto ejecutando: adb root

Otros consejos

A partir del nivel de API 8 (Android 2.2), para la aplicación depurable (la creada por Android Studio todo el tiempo a menos que se solicite 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 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

Cambie al UID de com.yourapp y ejecute todos los comandos adicionales usando ese uid (hasta que llame a exit ):

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

& nbsp;
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ñaló 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 la 7 a la 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).

antes de comenzar, ¿tiene un teléfono rooteado ? si no, sugiero que es hora de que hagas el salto. El 99% de los tutoriales que lo ayudan a hacer esto requieren que tenga un teléfono rooteado (sé que b / c pasé aproximadamente una hora buscando la forma de hacerlo sin tener un teléfono rooteado ... no pude encontrar ninguno ... ) también si lo piensa, su iPhone también debe estar rooteado para hacer esta misma tarea. Entonces es totalmente razonable. Más información sobre el enraizamiento al final de la respuesta.

desde su tipo de línea de comando:

adb shell

esto lo lleva a su línea de comando de 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 lo tiene (es decir, si obtiene un error), entonces probablemente no tenga un teléfono rooteado o no haya utilizado sus privilegios de usuario root. Para usar sus privilegios de usuario root, escriba su en la línea de comando de adb y vea qué sucede, si obtiene un error, entonces su teléfono no está rooteado. Si no es así, rootearlo primero y luego continuar con estas instrucciones.

desde allí puede 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 explorar la base de datos ... si no lo tiene instalado (puede averiguarlo escribiendo sqlite3 , si obtiene el comando no encontrado entonces tendrás que instalarlo. Para instalar sqlite, sigue las instrucciones aquí .

sobre el enraizamiento: si nunca has rooteado tu teléfono antes y te preocupa que arruine tu teléfono, puedo decirte con total confianza que no hay nada de qué preocuparse. Hay toneladas de tutoriales rápidos y fáciles de enrutamiento telefónico 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) .

$ adb shell

$ cd / data

$ ls

opendir fallido, Permiso denegado


Deberías hacer esto:

$ adb shell

$ cd /data

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

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

¡OK!

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 que no se puede ejecutar como raíz en las 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 la solicitud ha cambiado de '>' a '$' como se muestra arriba, significa que ha ingresado al entorno adb shell. Si posteriormente la solicitud ha cambiado a '#' después de emitir el segundo comando, eso significa que ahora es root. Ahora, como root, puedes hacer lo que quieras con tu dispositivo.

Para volver al shell 'seguro', emita

# exit

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

También tuve muchos problemas con esto. 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 base de datos de / data / data / [nombre del paquete] /databases/my_db.db. Ejecutar shell root o su en shell por alguna razón no funcionó, ni copiar el archivo db (aunque podría navegar al directorio), ni 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 un archivo db con SQLite Database Browser. :)

Los siguientes son los dos pasos para obtener acceso de root:

  1. Sus dispositivos Android deben estar rooteados.
  2. En ADB shell, escriba su y el dispositivo Android le preguntará y / n. Usted elige permitir.

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 al propietario correcto para operarlo.

El problema podría ser que necesitamos dar acceso a la raíz adb específicamente en las opciones de desarrollo en los últimos CM. Esto es lo que hice.

  

abc @ abc-L655: ~ $ sudo adb kill-server
  abc @ abc-L655: ~ $ sudo adb root start-server   * Daemon no se está ejecutando. comenzando ahora en el puerto 5037 *   * el demonio se inició con éxito * el acceso a la raíz está deshabilitado por la configuración del sistema - habilitar en la 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.. 

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

por ejemplo, cd data / data / com.yourapp

esto lo colocará en un directorio que es read / writable para que pueda cambiar los archivos según sea necesario. Como la carpeta es la misma en el emulator , puede usarla para obtener la ruta de la carpeta.

Si solo quiere ver su DB & amp; Tablas , entonces la mejor manera es usar Stetho . Una herramienta genial para todos los desarrolladores de Android que usan SQLite creado por Facobook desarrollado .

Pasos para usar la herramienta

  1. Agregue a continuación la dependencia en el archivo gradle de su aplicación (Módulo: aplicación)
  

'compilar' com.facebook.stetho: stetho: 1.4.2 '

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

Ahora, construya su aplicación & amp; Cuando la aplicación se está ejecutando, puede navegar por la base de datos de su aplicación abriendo Chrome en la URL:

chrome://inspect/#devices

Las capturas de pantalla de la misma son las siguientes:

  

ChromeInspact

 ChromeInspact

  

Tu base de datos

 Tu base de datos

¡Espero que esto ayude a todos! :)

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

  1. inicie el adb usando cmd desde la carpeta de herramientas de la plataforma 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 instaló.

  2. muestra los dispositivos de trabajo.

    adb devices
    

    para decir la respuesta del comando es

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

        adb -s 0123456789ABCDEF shell "su"
    

    se abrirá en

        root@theDeviceName:/ #
    

4.Acceso a los archivos, enumere todos los archivos

ls

y así sucesivamente, cambie el directorio a cualquier otro lugar como la carpeta de datos

cd data/data

Cuando está en el directorio de shell del dispositivo. Solo ejecuta

su - root

Entonces debería poder acceder a los datos / carpeta.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top