Iniciar un script como root a través de ADB

He creado un script para montar particiones y hacer algunas cosas en mi sistema Android. He guardado el script como install.sh en la carpeta / bin de Android.

Quiero llamar a la secuencia de comandos de ADB, que se llama de un archivo por lotes en Windows, pero tiene que ser ejecutado como root.

La primera solución que intenté fue llamar al script usando

adb shell "su -c sh /bin/script.sh" 

Pero no funciona ya que me da un acceso de shell (con permisos de root), pero no se ejecuta nada. También traté de llamar

 adb root "sh /bin/script.sh" 

Pero tengo el siguiente error

 adbd cannot run as root in production builds 

Entonces traté de escribir

 su -c "command" 

Para todos los comandos que necesitan un acceso root en mi script, pero tengo el mismo problema. Cuando ejecuto el script sólo obtengo un shell de raíz y no se ejecuta nada.

Si utilizo la primera solución a mano (por ejemplo, llamo adb shell su, entonces mi script), funciona. Sin embargo, todo el punto es automatizar el proceso, de modo que el shell de adb puede ser llamado desde otro script.

¿Tiene alguna idea de cómo podría lograr esto?

Gracias !

Esto funciona para mí:

Crear myscript.bat y poner en él (tenga en cuenta las comillas simples en torno a los comandos que se ejecutará en modo superusuario):

 adb shell "su -c 'command1; command2; command3'" 

Entonces ejecuta myscript.bat desde un shell de DOS.

Nota: no parece que el carácter de continuación de línea DOS (^) funcione en esta situación. En otras palabras, lo siguiente no funciona para mí:

 adb shell "su -c '^ command1; ^ command2; ^ command3'" 

Esto resulta en "Error de sintaxis: Cadena entre comillas no terminada"

Esto funciona :

 adb shell echo command which needs root privileges \| su 

Si necesita redirección:

 adb shell echo 'echo anytext > /data/data/aforbiddenfolder/file' \| su 

Para "copiar" un archivo local a una ruta de android que necesita privilegios de root (pero alocalfile no debe contener ' ):

 cat alocalfile | adb shell echo "echo '`cat`' > /data/data/aforbiddenfolder/file" \| su 

Si usted tiene una mejor manera (incluso para las versiones su que no tienen -c ), estoy interesado.

Esto funciona para mí:

 adb shell "su -c ./data/local/tcpdump-arm -s 0 -v -w /data/local/appxpress_dump.pcap" 

Pero no funciona ya que me da un acceso de shell (con permisos de root), pero no se ejecuta nada.

¿Cómo sabes que te dan permisos de root? Supongo que está intentando ejecutar el script en un dispositivo? ¿Su dispositivo ha sido arraigado?

Puede que tenga que dar permisos de ejecución a través de chmod al archivo.

 chmod ugo=rwx /bin/script.sh 

Parece que estaba usando una versión muy simple de su que no aceptó el argumento -c. Copié otro su que funcionó. AndyD es totalmente correcto, así que estoy aceptando su respuesta en vez de la mía 🙂

  • Android Shell EOF
  • Cambiar el usuario y el grupo de archivos de la aplicación de Android para replicar el problema que el usuario está teniendo
  • FFMPEG para Android en Windows no se compila correctamente
  • Acceso a variables de entorno desde Android Studio gradle build
  • ¿Existe un equivalente a 'adb shell texto de teclado de entrada' para iOS?
  • ¿Dónde encontrar información sobre el comando de shell de "llamada de servicio" de Android?
  • Cómo obtener la versión SDK de Android de un dispositivo desde la línea de comandos
  • Copiar archivos en el shell de ADB con run-as
  • Comando shell de shell de adb y permanecer en shell
  • ¿Cómo resolver el dispositivo ADB no autorizado en Android dispositivo ADB host?
  • Android Studios: Android Device Manager no muestra archivos para Nougat 7.0 en el Explorador de archivos
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.