sideload para lista hard descargar comandos android adb

android - para - comandos adb shell



Ejecutando comandos adb en todos los dispositivos conectados (5)

Crear un bash (adb +)

adb devices | while read line do if [ ! "$line" = "" ] && [ `echo $line | awk ''{print $2}''` = "device" ] then device=`echo $line | awk ''{print $1}''` echo "$device $@ ..." adb -s $device $@ fi done

usalo con

adb+ //+ command

¿Hay alguna forma de ejecutar comandos adb en todos los dispositivos conectados? Para desinstalar una aplicación de todos los dispositivos conectados con "adb uninstall com.example.android".

Los comandos que me interesan son principalmente instalar y desinstalar.

Estaba pensando en escribir un guión de bash para esto, pero siento que alguien ya debería haberlo hecho :)


Esta es una versión mejorada del script de 強大 な. La versión original no coincidía con algunos dispositivos.

DEVICES=`adb devices | grep -v devices | grep device | cut -f 1` for device in $DEVICES; do echo "$device $@ ..." adb -s $device $@ done


Para agregar en ~ / .bashrc o ~ / .zshrc:

alias adb-all="adb devices | awk ''NR>1{print /$1}'' | parallel -rkj0 --tagstring ''on {}: '' adb -s {}"

Ejemplos:

  • $ adb-all shell date
  • $ adb-all shell getprop net.hostname
  • $ adb-all sideload /path/to/rom.zip
  • $ adb-all install /path/filename.apk
  • $ adb-all push /usr/local/bin/frida-server-arm64 /data/local/tmp/frida-server

Explicación: awk extrae el id / host del dispositivo (primera columna: print $1 ) de todas las líneas excepto la primera ( NR>1 ) para eliminar la línea del encabezado "Lista de dispositivos adjuntos", luego gnu parallel ejecuta adb -s <HOSTNAME> <whatever-is-passed-to-the-alias> en cualquier línea no-vacía ( -r ) en el orden especificado ( -k , para evitar el orden aleatorio / orden de respuesta más rápida) y anteponer cada línea con on <DEVICE>:/t para mayor claridad, todo en paralelo ( -j0 , es posible configurar otro número para definir cuántos adb deben ejecutarse en paralelo en lugar de ilimitados).

:)


Sobre la base de la respuesta de @ Oli, esto también permitirá que los comandos se ejecuten en paralelo, utilizando xargs . Solo agrega esto a tu archivo .bashrc :

function adball() { adb devices | egrep ''/t(device|emulator)'' | cut -f 1 | xargs -t -J% -n1 -P5 / adb -s % "$@" }

y aplíquelo abriendo un nuevo terminal shell,. . ~/.bashrc , o source ~/.bashrc .

  1. Si solo desea ejecutar en dispositivos (o solo en emuladores), puede cambiar el grep (device|emulator) eliminando el que no desea. Este comando, como se escribió anteriormente, se ejecutará en todos los dispositivos y emuladores conectados.
  2. el argumento -J% especifica que desea que xargs reemplace la primera aparición de % en la utilidad con el valor del lado izquierdo de la canalización (stdin).
    NOTA : esto es para BSD (Darwin / Mac OS X) xargs . Para GNU / Linux xargs , la opción es -I% .
  3. -t hará que xargs imprima el comando que está a punto de ejecutarse inmediatamente antes de ejecutarlo.
  4. -n1 significa que -n1 solo debe usar a lo sumo 1 argumento en cada invocación del comando (a diferencia de algunas utilidades que pueden tomar múltiples argumentos, como por ejemplo rm ).
  5. -P5 permite que se ejecuten simultáneamente hasta 5 procesos paralelos. Si, en cambio, desea ejecutar los comandos secuencialmente, simplemente elimine todo el argumento -P5 . Esto también le permite tener dos variaciones del comando ( adball y adbseq , por ejemplo), una que se ejecuta en paralelo y la otra de forma secuencial.

Para probar que es paralelo, puede ejecutar un comando de shell que incluya un sueño en él, por ejemplo:

$ adball shell "getprop ro.serialno ; date ; sleep 1 ; date ; getprop ro.serialno"

Puede usar esto para ejecutar cualquier comando adb que desee (sí, ¡incluso adball logcat funcionará! Pero puede parecer un poco extraño porque ambos registros se transmitirán a su consola en paralelo, por lo que no podrá distinguir qué dispositivo una línea de registro dada viene de).

El beneficio de este enfoque sobre el enfoque de @ dtmilano & es que xargs continuará bloqueando el shell siempre que al menos uno de los procesos paralelos aún se esté ejecutando: eso significa que puede salir de ambos comandos simplemente usando ^C , al igual que estas acostumbrado a hacer Con el enfoque de dtmilano, si tuviera que ejecutar adb+ logcat , ambos procesos de logcat se incluirían en segundo plano, por lo que tendría que eliminar manualmente el proceso de logcat con ps y kill o pkill . El uso de xargs hace que se vea y se sienta como una línea de comando de bloqueo regular, y si solo tiene un dispositivo, entonces funcionará exactamente igual que adb .


adb wrapper admite la selección de múltiples destinos para los comandos adb y la ejecución paralela.

Desde su README:

# Installation ./install.sh ~/apps/android-sdk-linux # Execute adb commands on all connected devices. adb set-target all # Execute adb commands on given devices. adb set-target emulator-5554 C59KGT14263422 # Use GNU parallel for parallel install. adb set-parallel true

(Descargo de responsabilidad: he escrito la mitad de ella)