¿Cómo obtener acceso root en el emulador de Android?


146

Tengo todas las versiones de Android SDK (de 1.5 a 2.3.3), y probé muchos métodos para obtener root en el emulador de Android. No uso ningún dispositivo Android y pruebo todo en el emulador (AVD).

Necesito obtener acceso de root en cualquiera de los emuladores de Android para usar la funcionalidad 'iptables' y 'busybox'. Y para usar iptables debo tener acceso de root. Al menos el comando 'su' debe ejecutarse en el emulador de terminal.

También instalé la z4rootaplicación,

Pero lleva mucho tiempo y no termina de enraizar, y se atasca. algunos dicen que si rebajamos el sistema por debajo de RC30, de esta manera podemos obtener acceso de root. Si esto es cierto, ¿cómo hacer esto? Yo uso Linux y Windows OS.

Por favor, alguien me diga cualquier método para rootear mi emulador.


Creo que puedes usar "Root.apk" almacenado en filecrop (VISIONary en el sistema Android) para rootear el emulador porque, en cada reinicio, rootea el sistema. Z4root no puede funcionar porque necesita reiniciarse para que funcione el acceso a la raíz. Lo siento por el mal inglés, soy francés.
JeremLeOuf

Dónde puedo conseguir esto ? ¿Hay un manual para esto?
Desarrollador de Android

66
Tenga en cuenta que los emuladores de Android ya están "rooteados". No necesita hacer nada para obtener un shell adb raíz, ya que ya se ejecuta como raíz de forma predeterminada. Lo que se discute aquí es instalar un "su" pirateado o una cuña similar para permitir que el código de la aplicación inicie programas auxiliares que se ejecutan como root.
Chris Stratton

2
Use Genymotion genymotion.com Es muy rápido y tiene root por defecto.
klimat

1
Instalaste la imagen incorrecta. ver aquí -> stackoverflow.com/questions/43923996/…
wwwwwwwwwwww

Respuestas:


136

Estas respuestas son todas innecesariamente complicadas :)

$ > adb shell
generic_x86:/ $
generic_x86:/ $ exit
$ > adb root
restarting adbd as root
$ > adb shell
generic_x86:/ #

52
Los adb rootresultados de ejecución en "adbd no se pueden ejecutar como root en las compilaciones de producción". ¿Estás usando un emulador particular? Por favor proporcione más detalles.
orodbhen

3
No puede usar esta raíz para ninguna aplicación.
Enyby

55
Si alguien está tratando de hacer que esto funcione en las nuevas imágenes del sistema Google Play, adbd está configurado como seguro en ramdisk.img. Pude solucionarlo usando ramdisk.img de la imagen de las API de Google. Probé en las imágenes 7.0 y 8.0.
tstaylor7

47
Si adb rootda el error adbd cannot run as root in production builds, consulte stackoverflow.com/a/45668555/1682419 : necesita una "Imagen del sistema de las API de Google" en lugar de una "Imagen del sistema de Google Play".
Jerry101

10
@JRaymond Escribí la raíz del adb pero no

75

Cómo rootear el emulador de Android (probado en Android 7.1.1 / Nougat)

Requisitos :

Instrucciones

  1. Instale el SuperSu.apk

    • Instale la aplicación SuperSu en primer lugar, simplemente arrastre y suelte (si ejecuta la última versión del emulador o carga lateral a través de adb, es decir adb -e install supersu.apk)

    • Después de instalarlo, cuando lo ejecuta, muestra una pantalla como se muestra a continuación que indica "No hay ningún binario SU instalado ...". Este error solo confirma que el dispositivo aún no está rooteado.

ingrese la descripción de la imagen aquí


  1. Hacer que la partición del sistema del emulador se pueda escribir

    • Como sugiere, debemos darle permiso al emulador para escribir archivos del sistema.

    • Escriba el siguiente código para lograr esto: emulator -avd {emulator_name} -writable-system

Si tiene más de un AVD, puede obtener una lista de avds utilizando el comando: emulator -list-avds

Nota: navegue a la carpeta de herramientas donde está instalado Android SDK y abra el símbolo del sistema presionando Mayús y haciendo clic derecho.


  1. Empujar su binary en el directorio del sistema

    • Extraiga la recuperación flashable.zip (que contiene los binarios su de diferentes arquitecturas)

¡Importante! Solo use el binario su que coincida con su arquitectura avd, por ejemplo, x86, arm, etc., y observe la ruta de acceso donde extrajo estos binarios.

  • Asegúrese de estar ejecutando adb como root y también necesita volver a montar. Solo ingrese estos códigos

adb root

adb remount

Ahora es el momento de empujar el binario su:

Este es el código que utilicé con éxito :adb -e push C:\Users\User1\Desktop\rootemu\x86\su.pie /system/bin/su

(no importa mi ubicación específica de su binary, cualquier ubicación está bien siempre que no haya espacios en blanco)

nota: Para resolver bino xbinhacer en la consola antes:> adb shell,>ls /system/xbin/su

Si esto falla, intente presionar este directorio en su lugar /system/xbin/su. También para emuladores que ejecutan Android 5.1 y versiones inferiores, use suy nosu.pie


  1. Cambiar los permisos del binario su

    • A continuación, hagamos un poco de modificación de los permisos de su binary. Tenemos que hacer esto en el dispositivo emulador a través de adb:

    adb -e shell su root cd /system/bin chmod 06755 su

¡¡Importante!! Tome nota de su ruta binaria (la mía es / system / bin)


  1. Establecer la installdirectiva en su binario y establecer undaemon

Escribe los códigos:

su --install

y para configurar daemon:

su --daemon&

¡¡Importante!! Tomar nota del espaciado


  1. Establecer SELinux en Permisivo (es decir, desactivar SE Linux)

    • Finalmente apague selinux a través de este código:

setenforce 0


  1. Abra la aplicación SuperSU y puede solicitar actualizar los archivos binarios, puede usar el método Normal.

Nota: Si está experimentando bootloops, en lugar de actualizar los archivos binarios, simplemente utilícelo como está.


¡¡Eso es practicamente todo!!

Abra cualquier aplicación que requiera permisos SU solo para verificar dos veces y, de hecho, SuperSU le preguntará si desea otorgarle permisos su.

ingrese la descripción de la imagen aquí

Para que la raíz persista, actualice su binario (usando el método Normal), luego copie system.img del directorio temporal ( Users\AppData\Local\Temp\Android Emulatorel archivo generalmente se nombra aleatoriamente, por ejemplo, 1359g.tmpcon un tamaño grande) y reemplace el predeterminado system.img.

Actualizar :

He notado que es más fácil obtener una imagen del sistema temporal en Linux que en Windows. Puedes intentar usar una imagen instantánea.

Actualización 4 de agosto de 2018

Con la aparición del emulador 27.3.x, ahora hace que la preservación de la raíz sea mucho más fácil a través de la función de instantánea (si se copia elsystem.img método no funciona):

Idealmente, es más como hibernar el dispositivo virtual con la configuración intacta, por lo tanto, todo se conserva.

Instantáneas

Ahora puede guardar múltiples instantáneas de AVD para una configuración de dispositivo determinada y elegir cuáles de las instantáneas guardadas cargar cuando inicia el emulador. Iniciar un dispositivo virtual cargando una instantánea es muy parecido a despertar un estado físico desde un estado de suspensión, en lugar de arrancarlo desde un estado apagado.

Esto implica que el único requisito para iniciar el emulador es agregar el -writable-systemparámetro al emulator -avd [avdname]comando normal para iniciar el emulador. ( Ejecutar el emulador solo emulator -avd [avdname]no inicia la versión / copia rooteada o puede generar algún error )

Probado en el nivel API 22

También para problemas de bootloop, consulte la otra publicación: Emulador de Android: ¿cómo evitar el bucle de arranque después del rooteo? y actualizaciones de los mismos.

Observaciones

La mayoría del contenido de referencia era para versiones anteriores de Android y, por lo tanto, la razón de los diferentes comandos y rutas que modifiqué.

Agradecimientos;


1
nota: para averiguar bin o xbin hacer en la consola antes de:> adb shell,> ls / system / xbin / su
djdance

1
@xavier_fakerat sí, dejé de actualizar los binarios. El problema es que, después de cada reinicio, tengo que volver a montar la máquina y ejecutarla su --install && su --daemon&en el emulador, seguido de setenforce 0para obtener la raíz. ¿Conoces alguna solución permanente para root al reiniciar?
Cristian Holdunu

1
¡Agradable! Este método también funciona para dispositivos reales a los que puede acceder root mediante adb.
Mygod

1
Me respondiste por qué el emulador de Android se cierra inesperadamente después de rootear la imagen cuando no se usa -writable-system. Es porque las instantáneas.
Rodrirokr

1
Estoy usando Pixel 2 XL: la gente parece tener el mismo problema con Pixel XL: forum.xda-developers.com/pixel-xl/how-to/…
noraj

33

Aquí está la lista de comandos que debe ejecutar mientras se ejecuta el emulador, pruebo esta solución para un avd en Android 2.2:

adb shell mount -o rw,remount -t yaffs2 /dev/block/mtdblock03 /system  
adb push su /system/xbin/su  
adb shell chmod 06755 /system  
adb shell chmod 06755 /system/xbin/su

Se supone que el binario su está ubicado en el directorio de trabajo. Puede encontrar su y superusuario aquí: http://forum.xda-developers.com/showthread.php?t=682828 . Debe ejecutar estos comandos cada vez que inicie el emulador. Puede escribir un script que inicie el emulador y lo arraigue.


15
Incluya las partes relevantes de su publicación de blog aquí. SO es un lugar para respuestas, no enlaces.
cHao

2
No existe tal archivo o directorio 'SU'
Mahendran

44
Esto no funciona en el emulador 2.2, 2.3 o 2.3.3 Solo obtengo errores para adb push: sin memoria, dir no está vacío, etc.
Puntero nulo

2
@mice: Como dice el error, no puede empujar el binario porque no hay suficiente espacio en el dispositivo virtual. Al iniciar el emulador, puede agregar la -partition-sizeopción para especificar el tamaño de la partición. Intenta iniciar tu emulador contools/emulator -avd MyAndroidVirtualDeviceName -partition-size 256
abd

2
En los emuladores más nuevos, el comando de montaje puede no funcionar, puede reemplazarlo adb shell mount -o rw,remount -t yaffs2 /dev/block/mtdblock03 /system con: adb root adb remount
Kamran Ahmed

20

Para AVD con 5.1.1 y 6.0 utilicé el siguiente script en Windows:

set adb=adb -s emulator-5558
set arch=x64
set pie=
adb start-server
%adb% root
%adb% remount
rem %adb% shell mount -o remount,rw /system
%adb% shell setenforce 0
%adb% install common/Superuser.apk
%adb% push %arch%/su%pie% /system/bin/su
%adb% shell chmod 0755 /system/bin/su
%adb% push %arch%/su%pie% /system/xbin/su
%adb% shell chmod 0755 /system/xbin/su
%adb% shell su --install
%adb% shell "su --daemon&"
rem %adb% shell mount -o remount,ro /system

exit /b

Necesita UPDATE.zip de SuperSU. Desempaquételos en cualquier carpeta. Crea un archivo bat con el contenido de arriba. No olvide especificar la arquitectura y el dispositivo necesarios: set adb=adb -s emulator-5558y set arch=x64. Si ejecuta Android arriba o igual a 5.0, cambie set pie=a set pie=.pie. Ejecutarlo. Obtiene raíz temporal para la ejecución actual.

Si recibió un error al volver a montar la partición del sistema, entonces necesita iniciar AVD desde la línea de comandos. Vea a continuación el primer paso para Android 7.

Si desea que sea persistente, actualice el binario en SuperSU y almacene system.img desde la carpeta temporal como reemplazo de system.img predeterminado.

Cómo convertir la raíz temporal resultante en un permanente

Primero, va a SuperSu. Ofrece una actualización binaria. Actualice de la manera normal. Reiniciar rechazar.

Segundo: solo relevante para emuladores. El mismo AVD. La conclusión es que los cambios en la imagen del sistema no se guardarán. Necesitas conservarlos para ellos.

Ya hay instrucciones que varían para diferentes emuladores.

Para AVD, puede intentar encontrar un archivo temporal system.img, guárdelo en algún lugar y úselo cuando inicie el emulador.

En Windows se encuentra en el %LOCALAPPDATA%\Temp\AndroidEmulatory tiene un nombre algo así comoTMP4980.tmp .

Lo copia en una carpeta avd device ( %HOMEPATH%\.android\avd\%AVD_NAME%.avd\) y cambia el nombre asystem.img .

Ahora se usará al principio, en lugar de lo habitual. Verdadero si la imagen en el SDK se actualiza, tendrá la anterior.

En este caso, deberá eliminar esto system.img y repetir la operación en su creación.

Manual más detallado en ruso: http://4pda.ru/forum/index.php?showtopic=318487&view=findpost&p=45421931


Para Android 7 necesita ejecutar pasos adicionales: 1. Necesita ejecutar el emulador manualmente. Ir a la carpeta SDK sdk\tools\lib64\qt\lib. Ejecute desde este emulador de carpeta con opciones -writable-system -selinux disabled como esta:

F:\android\sdk\tools\lib64\qt\lib>F:\android\sdk\tools\emulator.exe -avd 7.0_x86 -verbose -writable-system -selinux disabled
  1. Necesita reiniciar adbddesde la raíz:

    raíz adb -s emulator-5554

Y sistema de montaje:

adb -s emulator-5554 remount

Se puede poner solo una vez por emulador de ejecución. Y cualquier otro montaje puede romper el modo de escritura. Debido a esto, no necesita ejecutar ningún otro comando con remontaje, como mount -o remount,rw /system.

Otros pasos son los mismos: cargar binarios, ejecutar binarios como daemon, etc.

Imagen de AVD Android 7 x86 con root: AVD Android 7 x86 con root


Si ve un error sobre PIE en ejecutar subinario, entonces carga al emulador binario incorrecto. Debe cargar el su.piearchivo binario con nombre dentro del archivo, pero en el emulador debe llamarse como su, no su.pie.


¿Me puede decir los pasos para hacer que la raíz sea persistente?
Satya

update binary in SuperSU and store system.img from temp folder as replace of default system.img.
Enyby

Usé estos pasos para obtener el system.img de temp 1) cp / tmp / android / emulator-X8F7Hr ~ / Desktop / system.img 2) copié este system.img de temp en las imágenes del sistema del SDK de Android, pero cuando reinicie el emulador y luego el emulador no está en estado raíz ... Guíeme por la ruta correcta
Satya

mejor copia al directorio avd. pero primero debes actualizar el binario en SuperSu en modo normal.
Enyby

He actualizado el binario en modo normal y lo he copiado en el directorio AVD y luego la raíz no persiste
Satya

13

Creo que la forma más fácil es crear un alias para el comando sh, p. Ej.

adb shell
mount -o rw,remount -t yaffs2 /dev/block/mtdblock3 /system
cd /system/bin
cat sh > su && chmod 4775 su

Probado en Android Emulator 3.0 y superior.


Esto también funcionó para mí (en x86_64 emulador de Android 5.02), mientras que la sugerencia anterior para instalar en xbin no.
Yannick

77
Tengomount: '/system' not in /proc/mounts
Kenny Wyland

sistema falló con 72
Duna

3

Aquí mi paquete con todo lo que necesitas. O puede usar este script:

echo on
set device=emulator-5554
set avd_name=
set adb=d:\Poprygun\DevTools\Android\Android-sdk\platform-tools\adb -s %device%
set emulator=d:\Poprygun\DevTools\Android\Android-sdk\emulator\emulator
set arch=x86
set pie=

echo Close all ANDROID emulators and press any key
pause
start %emulator% -avd Nexus_One_API_25 -verbose -writable-system
echo Wait until ANDROID emulator loading and press any key
pause

%adb% start-server
%adb% root
%adb% remount
%adb% shell setenforce 0
%adb% install D:\SuperSU\SuperSU.apk
%adb% push D:\SuperSU\su\%arch%\su.pie /system/bin/su
%adb% shell chmod 0755 /system/bin/su
%adb% push D:\SuperSU\su\%arch%\su.pie /system/xbin/su
%adb% shell chmod 0755 /system/xbin/su
%adb% shell su --install
%adb% shell "su --daemon&"
pause
exit /b

2

Acabo de reemplazar y asignar atributos para su a ~ / Android / Sdk / system-images / android-22 / google_apis / x86 / system.img y ahora en Android 5 siempre tengo root incluso para sistemas nuevos, es suficiente para instalar SuperSu. apk

Android 6 is necessary only
adb root
adb shell
>/system/xbin/su --daemon &
>setenfoce 0

después de eso, SuperSu.apk ve root. Pero no actualizo el archivo binario


1

Usé parte del método de las soluciones anteriores; sin embargo, no funcionaron por completo. En la última versión de Andy, esto funcionó para mí:

En Andy (Root Shell) [Para obtener, haga clic derecho en el icono de HandyAndy y seleccione Term Shell]

Dentro del shell, ejecute estos comandos:

mount -o rw,remount -t yaffs2 /dev/block/mtdblock3 /system
cd /system/bin
cat sh > su && chmod 4775 su

Luego, instale SuperSU e instale SU binario. Esto reemplazará el binario SU que acabamos de crear. (Opcional) Elimine SuperSU e instale Superuser by CWM. Instale el binario su nuevamente. Ahora, la raíz funciona!


1

Intenté muchas de las sugerencias anteriores, incluida SuperSU y no pude hacer que ninguna funcionara, pero encontré algo mucho más simple que funcionó para mis propósitos. En mi caso, solo quería poder ejecutar sqlite en el símbolo del sistema. Simplemente hice girar un emulador con una versión anterior de Android (Lollipop) y obtuve acceso a la raíz de inmediato.


-1

Descubrí que el emulador predeterminado API 23 x86_64 está rooteado por defecto.


Por lo que sé, solo porque tienes un # cuando escribes "adb root", no significa que las aplicaciones puedan aprovechar las ventajas de los privilegios de root. Cualquier prueba para escribir en cualquier parte del sistema resultó en un error de RO, incluso tratando de volver a montarlo como RW.
Fusseldieb
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.