data - como entrar ala raiz de android sin ser root
¿Por qué obtengo acceso denegado a la carpeta de datos cuando uso adb? (13)
$ adb shell
$ cd / data
$ 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!
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 el acceso raíz en mi teléfono?
A partir del API nivel 8 (Android 2.2), para la aplicación depurable (la que construye Android Studio todo el tiempo a menos que se solicite la versión de lanzamiento), puede usar el comando shell run-as
para ejecutar un comando o ejecutable como un específico usuario / aplicación o simplemente cambie al UID de su aplicación para que pueda acceder a su directorio de datos .
Lista el contenido del directorio de yourapp:
run-as com.yourapp ls -l /data/data/com.yourapp
Cambie a 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
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 indicó en los comentarios de @Avio: run-as
también tiene problemas con los teléfonos Samsung Galaxy S con Cyanogenmod en cualquier versión (del 7 al 10.1) porque en esta plataforma /data/data
hay 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 raíz).
Cuando estás en el directorio de shell para el dispositivo. Solo corre
su - root
Entonces deberías poder acceder a la carpeta / datos.
El problema podría ser que tenemos que otorgar acceso root a 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 * * daemon started successfully * 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..
Hay dos cosas que debe recordar si desea explorar todo en su dispositivo.
- Necesita tener un teléfono con acceso de administrador para navegar por la carpeta de datos en un teléfono con Android. Eso significa que o tiene un dispositivo desarrollador ( ADP1 o ION de Google I / O) o ha encontrado la forma de "rootear" su teléfono de otra forma.
- Necesita ejecutar ADB en modo raíz, haga esto ejecutando:
adb root
Los siguientes son los dos pasos para obtener acceso a la raíz:
- Sus dispositivos Android deben estar rooteados.
- En shell ADB, escriba su y el dispositivo Android mostrará y / n? Tú eliges permitir.
Si solo quieres ver tus Tablas y DB, entonces la mejor manera es usar Stetho
. Se desarrolló una herramienta genial para todos los desarrolladores de Android que utilizan SQLite
buit de Facobook developed
.
Steps to use the tool
- Añádalo a continuación en el archivo gradle de su aplicación (Módulo: aplicación)
''compilar'' com.facebook.stetho: stetho: 1.4.2 ''
- Agregue líneas de código debajo en su método Activity onCreate ()
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Stetho.initializeWithDefaults(this); setContentView(R.layout.activity_main); }
Ahora, crea tu aplicación. Cuando la aplicación se está ejecutando, puedes navegar por la base de datos de tu aplicación abriendo Chrome en la url:
chrome://inspect/#devices
Las capturas de pantalla de los mismos son las siguientes_
ChromeInspact
Tu DB
Espero que esto ayude a todos! :)
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 la base de datos de / data / data / [nombre del paquete] /databases/my_db.db. Ejecutar shell root , o su in shell por alguna razón no funcionó, ni copió el archivo db (aunque pude navegar hasta el directorio), ni lo hizo 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 el navegador de la base de datos SQLite. :)
Tuve un problema similar al intentar operar con 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 raíz 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 después del otro
> adb shell
$ su
Después del primer comando, si el mensaje ha cambiado de ''>'' a ''$'' como se muestra arriba, significa que ha ingresado al entorno del shell adb. Si posteriormente el aviso ha cambiado a ''#'' después de emitir el segundo comando, eso significa que ahora eres root. Ahora, como root, puede hacer lo que quiera con su dispositivo.
Para volver al shell ''seguro'', emita
# exit
Verás que reaparece el mensaje ''$'', lo que significa que estás en el shell adb como usuario y no como raíz.
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.
si conoce el paquete de la aplicación, puede cd
directamente a esa carpeta.
por ejemplo, cd data/data/com.yourapp
esto lo llevará a un directorio que es de read/writable
para que pueda cambiar los archivos según sea necesario. Dado que la carpeta es la misma en el emulator
, puede usar eso para obtener la ruta de la carpeta.
antes de comenzar, ¿tienes un teléfono rooteado ? si no, le sugiero encarecidamente que es hora de que haga el salto. El 99% de los tutoriales que te ayudan a hacer esto requieren que tengas un teléfono rooteado (sé b / c Pasé aproximadamente una hora buscando una forma de hacerlo sin tener un teléfono rooteado ... no pude encontrar ninguno ... ) también, si lo piensas, tu iPhone también tiene que estar rooteado para hacer esta misma tarea. Entonces es totalmente razonable. Más sobre rooting al final de la respuesta.
desde tu línea de comando escribe:
adb shell
esto te lleva a la línea de comandos del shell de Android (deberías ver algo como esto: shell@android:/ $
ahora escribe:
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 hace (es decir, si obtiene un error), entonces probablemente no tenga un teléfono rooteado o no haya utilizado sus privilegios de usuario raíz. Para usar sus privilegios de usuario raíz, 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í, enraícelo primero y luego continúe con estas instrucciones.
a partir de ahí, puede escribir ls
y verá todos los directorios, incluidos los dbs:
shell@android:/data/data/com.domain.yourapp $ ls
cache
databases
lib
shared_prefs
luego puede usar sqlite3 para explorar dbase ... si no lo tiene instalado (puede encontrarlo escribiendo sqlite3
, si obtiene el command not found
entonces tendrá que instalarlo. Para instalar sqlite, siga instrucciones here .
acerca del enraizamiento: si nunca has rooteado tu teléfono con anterioridad y te preocupa que pueda enloquecer tu teléfono, puedo decirte con plena confianza que no hay nada de qué preocuparse. hay toneladas de tutoriales de rooteo telefónicos rápidos y fáciles para casi todos los modelos nuevos y antiguos, y puedes rootear tu teléfono incluso si tienes un mac (he rooteado mi s3 con mi mac).
sin rootear el dispositivo, puede acceder a los archivos con la siguiente captura de pantalla de cmd:
inicia el adb usando cmd desde la carpeta platform-tools según tu usuario
cd C:/Users/YourUserName/AppData/Local/Android/sdk/platform-tools
puede estar en otra carpeta depende de dónde lo instaló.
mostrar los dispositivos de trabajo.
adb devices
para decir que responde el comando es
List of devices attached 0123456789ABCDEF device
escribe el comando
adb -s 0123456789ABCDEF shell "su"
se abrirá en
root@theDeviceName:/ #
4. Acceder a los archivos, enumerar todos los archivos
ls
y así sucesivamente chang directorio a cualquier otro lugar como la carpeta de datos
cd data/data