¿Cómo usar ADB Shell cuando están conectados varios dispositivos? Error con “error: más de un dispositivo y emulador”

$ adb --help 

 -s SERIAL use device with given serial (overrides $ANDROID_SERIAL) 

 $ adb devices List of devices attached emulator-5554 device 7f1c864e device 

 $ adb shell -s 7f1c864e error: more than one device and emulator 

?

¿No deberías ingresar?

 adb -s 7f1c864e shell 

?
http://developer.android.com/tools/help/adb.html#directingcommands

adb -d shell (o adb -e shell si te estás conectando a un emulador).

Este comando lo ayudará en la mayoría de los casos, si es demasiado vago para escribir la identificación completa.

Desde http://developer.android.com/tools/help/adb.html#commandsummary :

-d – Dirige un comando adb al único dispositivo USB conectado. Devuelve un error cuando se conecta más de un dispositivo USB.

-e – Dirige un comando adb al único emulador en ejecución. Devuelve un error cuando se está ejecutando más de un emulador.

Otra alternativa sería establecer la variable de entorno ANDROID_SERIAL en la serie correspondiente, suponiendo que está utilizando Windows:

 set ANDROID_SERIAL="7f1c864e" echo %ANDROID_SERIAL% "7f1c864e" 

Entonces puede usar el adb.exe shell sin ningún problema.

Encontré esta pregunta después de ver el error ‘más de un dispositivo’, con 2 teléfonos fuera de línea que muestran:

 C:\Program Files (x86)\Android\android-sdk\android-tools>adb devices List of devices attached SH436WM01785 offline SH436WM01785 offline SH436WM01785 sideload 

Si solo tiene un dispositivo conectado, ejecute los siguientes comandos para deshacerse de las conexiones fuera de línea:

 adb kill-server adb devices 

Esta esencia hará la mayor parte del trabajo para que muestre un menú cuando haya múltiples dispositivos conectados:

 $ adb $(android-select-device) shell 1) 02783201431feeee device 3) emulator-5554 2) 3832380FA5F30000 device 4) emulator-5556 Select the device to use,  to quit: 

Para evitar escribir, puede crear un alias que incluya la selección del dispositivo como se explica aquí .

Ejecutar comandos adb en todos los dispositivos conectados

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 

hecho de usarlo con

comando adb + // +

Para Windows, aquí hay un ejemplo rápido de 1 línea de cómo instalar un archivo … en múltiples dispositivos

 FOR /F "skip=1" %x IN ('adb devices') DO start adb -s %x install -r myandroidapp.apk 

Si planea incluir esto en un archivo por lotes, reemplace% x con %% x, como se muestra a continuación

 FOR /F "skip=1" %%x IN ('adb devices') DO start adb -s %%x install -r myandroidapp.apk 

Cree un Bash (tools.sh) para seleccionar una serie de dispositivos (o emulador):

 clear; echo "===================================================================================================="; echo " ADB DEVICES"; echo "===================================================================================================="; echo ""; adb_devices=( $(adb devices | grep -v devices | grep device | cut -f 1)#$(adb devices | grep -v devices | grep device | cut -f 2) ); if [ $((${#adb_devices[@]})) -eq "1" ] && [ "${adb_devices[0]}" == "#" ] then echo "No device found"; echo ""; echo "===================================================================================================="; device="" // Call Main Menu function fxMenu; else read -p "$( f=0 for dev in "${adb_devices[@]}"; do nm="$(echo ${dev} | cut -f1 -d#)"; tp="$(echo ${dev} | cut -f2 -d#)"; echo " $((++f)). ${nm} [${tp}]"; done echo ""; echo " 0. Quit" echo ""; echo "===================================================================================================="; echo ""; echo ' Please select a device: ' )" selection error="You think it's over just because I am dead. It's not over. The games have just begun."; // Call Validation Numbers fxValidationNumberMenu ${#adb_devices[@]} ${selection} "${error}" case "${selection}" in 0) // Call Main Menu function fxMenu; *) device="$(echo ${adb_devices[$((selection-1))]} | cut -f1 -d#)"; // Call Main Menu function fxMenu; esac fi 

Luego, en otra opción, puede usar adb -s (las opciones globales usan un dispositivo con un número de serie dado que anula $ ANDROID_SERIAL):

 adb -s ${device}  

Probé este código en la terminal MacOS, pero creo que se puede usar en Windows a través de la Terminal Git Bash.

También recuerde configurar las variables de entorno y las rutas de Android SDK en el archivo .bash_profile :

 export ANDROID_HOME="/usr/local/opt/android-sdk/" export PATH="$ANDROID_HOME/platform-tools:$PATH" export PATH="$ANDROID_HOME/tools:$PATH"