adb shell su funciona pero adb root no

93

Arrastré mi Galaxy S3 desbloqueado (SGH-T999)

Ahora, estoy tratando de ejecutar adb rootdesde el símbolo del sistema de Windows , sin embargo, obtengo un adbd cannot run as root in production buildserror. Entonces, lo primero que verifiqué fue si mi teléfono estaba realmente rooteado.

Entonces probé lo siguiente:

Abrir símbolo del sistema

$adb devices // lists my device
$adb shell //goes to shell
$su // opens a 'SuperSu' prompt on my phone and I 'Grant' permission
# // Before following the rooting instructions, I was getting 'no su command found' in the previous step. So, I believe my phone is ROOTED. **Correct me if I'm wrong.**

Sin embargo, cuando lo hago adb root, aparece un adbd cannot run as root in production buildserror. Entonces, pensé, podría tener que hacer algunas cosas adicionales más allá de lo que hice anteriormente. Probé todas las soluciones en las siguientes preguntas SO:

Ninguno de los anteriores funcionó para mí. Todo lo que hacen es dar acceso a la raíz DENTRO de SHELL. Quiero adb roottrabajar para poder ejecutar varios comandos adb SIN entrar en el shell.

rumit patel
fuente
5
no funciona en android> 4.3. falta su.
drdrej

Respuestas:

35

Por diseño, el adb rootcomando funciona solo en compilaciones de desarrollo (es decir, engy userdebugque tienen ro.debuggable=1por defecto). Entonces, para habilitar el adb rootcomando en su dispositivo de otro modo rooteado , simplemente agregue la ro.debuggable=1línea a uno de los siguientes archivos:

/system/build.prop
/system/default.prop
/data/local.prop

Si desea adb shellcomenzar como rootpredeterminado, agregue ro.secure=0también.

Alternativamente, puede usar adbdbinario modificado (que no busca ro.debuggable)

De https://android.googlesource.com/platform/system/core/+/master/adb/daemon/main.cpp

#if defined(ALLOW_ADBD_ROOT)
// The properties that affect `adb root` and `adb unroot` are ro.secure and
// ro.debuggable. In this context the names don't make the expected behavior
// particularly obvious.
//
// ro.debuggable:
//   Allowed to become root, but not necessarily the default. Set to 1 on
//   eng and userdebug builds.
//
// ro.secure:
//   Drop privileges by default. Set to 1 on userdebug and user builds.
Alex P.
fuente
9
¿Dónde puedo obtener el ejecutable compilado de lo anterior?
Waqas Bukhary
3
Agrego los nuevos valores para ro.debuggable y ro.secure a los archivos que ha especificado, pero aún así se sobrescriben en cada reinicio y los cambios no tienen ningún efecto.
Patryk Czachurski
31

En algunas ROM amigables para desarrolladores, puede habilitar el acceso raíz en Configuración> opción de desarrollador> Acceso raíz . Después de que adb rootesté disponible. Desafortunadamente, no funciona para la mayoría de las ROM estándar del mercado.

NgaNguyenDuy
fuente
64
No veo una opción de "Acceso raíz" en las opciones de desarrollo.
Amalgovinus
2
@Amalgovinus Creo que depende de la habitación que estés usando. :)
NgaNguyenDuy
@NgaNguyenDuy ¿Puede identificar qué rom está utilizando?
Lobster Fighter
22

Me encontré con este problema al intentar rootear el emulador, descubrí que era porque estaba ejecutando el emulador Nexus 5x que tenía Google Play. Creó un emulador diferente que no tenía Google Play y adb rootrooteará el dispositivo por usted. Espero que esto ayude a alguien.

Andrew Steinmetz
fuente
¿Cómo podemos diferenciar ambos emuladores?
Sanjay
@Sanjay cuando abre el Administrador de dispositivos virtuales de Android, debería ver una pestaña para Play Store y desea asegurarse de que no haya un icono de Play Store presente en el dispositivo que está intentando rootear.
Andrew Steinmetz
1
2020, esto me ayudó, pero necesito una forma de hacerlo en dispositivos con Play Store habilitado sin un teléfono rooteado, pero no estoy seguro de si es posible
trigster
8

Lo uso para ingresar al modo su en abd shell

adb shell "su"

Samuel Ivan
fuente
2
En Mac OS, aparece el error "/ system / bin / sh: su: no encontrado". ¿Alguna sugerencia por favor?
Sachin G
@SachinG ¿Quizás usaste el tipo incorrecto de citas? intente ejecutar estoadb shell "su -c whoami"
gkpln3
@ gkpln3 Sigue recibiendo el mismo error. / system / bin / sh: su: no encontrado
Sachin G
Tengo el mismo error
Jack
8

Tengo un Samsung Galaxy Trend Plus rooteado (GT-S7580).

Ejecutar 'adb root' me da el mismo error de 'adbd no se puede ejecutar como root en las compilaciones de producción'.

Para los dispositivos que tienen Opciones de desarrollador -> Acceso raíz, elija "Solo ADB" para proporcionar acceso de raíz adb al dispositivo (como lo sugiere NgaNguyenDuy ).

Luego intente ejecutar el comando según la solución en Iniciar un script como root a través de ADB . En mi caso, solo quería ejecutar el comando 'netcfg rndis0 dhcp', y lo hice de esta manera:

adb shell "su -c netcfg rndis0 dhcp"

Compruebe si está cometiendo algún error al ejecutarlo de esta manera.

Si aún no funciona, verifique si ha rooteado el dispositivo correctamente. Si aún no tiene suerte, intente instalar una ROM personalizada como Cyanogen Mod para que funcione 'adb root'.

Antonio
fuente
7

Debe reemplazar el binario adbd en la carpeta boot.img / sbin / por uno que sea compatible con su. También tendrá que hacer algunas ediciones default.prop.

Samsung parece hacer esto más difícil que otros proveedores. Tengo algunos binarios adbd que puede probar, pero requerirá el conocimiento de descompilar y volver a compilar el archivo boot.img con el nuevo binario. Además, si tiene un gestor de arranque bloqueado ... esto no sucederá.

Además, Chainfire tiene una aplicación que otorgará permiso de raíz adbd en la tienda de juegos: https://play.google.com/store/apps/details?id=eu.chainfire.adbd&hl=en

Por último, si está intentando escribir un script de Windows con permisos SU, puede hacer esta compra usando el siguiente estilo de comando ... Sin embargo, al menos necesitará otorgar (en el teléfono) permisos SU la primera vez que se ejecute. .

adb shell "su -c ls" <-list directorio de trabajo con derechos su. adb shell "su -c echo anytext> /data/test.file"

Estos son solo algunos ejemplos. Si indica específicamente lo que está tratando de lograr, es posible que pueda darle un consejo más específico.

-cosler

scrosler
fuente
5

adbd tiene un indicador / opción de compilación para habilitar el acceso de root: ALLOW_ADBD_ROOT=1 .

Hasta Android 9: si adbden su dispositivo se compila sin esa bandera, siempre perderá los privilegios al iniciarse y, por lo tanto, "adb root" no ayudará en absoluto. Tenía que parchear las llamadas a setuid(), setgid(),setgroups() y la capacidad de las gotas del mismo binario para obtener un ADBD arraigado de forma permanente en mi lector de libros electrónicos.

Con Android 10 esto cambió; cuando el teléfono / tableta está desbloqueado ( ro.boot.verifiedbootstate == "orange"), el modo raíz adb es posible en cualquier caso.

cweiske
fuente
1

Si realmente necesita ADBejecutar como root, la forma más rápida y fácil es instalar las ROM personalizadas de Android y la más popular es CyanogenModque tiene las Root Accessopciones en el menú de opciones del desarrollador donde puede elegir otorgar acceso de root apps and ADB. Usé CM antes, pero como ya no estaba desarrollado, intenté buscar algunas soluciones. Aunque CyanogenMod sigue siendo una buena alternativa porque no tiene bloatware.

Una alternativa que descubrí de un amigo es usar la adbd insecureaplicación que puedes probar desde aquí: https://forum.xda-developers.com/showthread.php?t=1687590 . En mi caso, funciona perfectamente con un kernel personalizado de Android, pero no con la ROM estándar de Android (solo Android de vanilla). También puede probar otras alternativas como modificar boot.imgla ROM de Android.

warfreak92
fuente