Comment utiliser ADB Shell lorsque plusieurs périphériques sont connectés? Échec avec “erreur: plus d’un périphérique et émulateur”

$ 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 

?

    Ne devriez-vous pas entrer:

     adb -s 7f1c864e shell 

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

    adb -d shell (ou adb -e shell si vous vous connectez à un émulateur).

    Cette commande vous aidera dans la plupart des cas si vous êtes trop paresseux pour saisir l’ID complet.

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

    -d – Dirige une commande adb sur le seul périphérique USB connecté. Renvoie une erreur lorsque plusieurs périphériques USB sont connectés.

    -e – Dirige une commande adb vers le seul émulateur en cours d’exécution. Renvoie une erreur lorsque plusieurs émulateurs sont en cours d’exécution.

    Une autre alternative serait de définir la variable d’environnement ANDROID_SERIAL sur le numéro de série approprié, en supposant que vous utilisez Windows:

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

    Ensuite, vous pouvez utiliser le adb.exe shell sans aucun problème.

    J’ai trouvé cette question après avoir vu l’erreur «plus d’un appareil», avec 2 téléphones hors ligne montrant:

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

    Si vous n’avez qu’un seul périphérique connecté, exécutez les commandes suivantes pour supprimer les connexions hors connexion:

     adb kill-server adb devices 

    Cet aperçu fera la plupart du travail pour vous en montrant un menu lorsque plusieurs périphériques sont connectés:

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

    Pour éviter de taper, vous pouvez simplement créer un alias incluant la sélection du périphérique, comme expliqué ici .

    Exécution de commandes adb sur tous les appareils connectés

    Créer 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 

    fait l’utiliser avec

    adb + // + commande

    Pour Windows, voici un exemple rapide de la façon d’installer un fichier sur plusieurs périphériques.

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

    Si vous prévoyez d’inclure ceci dans un fichier de commandes, remplacez% x par %% x, comme ci-dessous

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

    Créez un Bash (tools.sh) pour sélectionner une série à partir de périphériques (ou émulateur):

     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 

    Ensuite, dans une autre option, vous pouvez utiliser adb -s (l’option -s utilise un périphérique avec un numéro de série donné qui remplace $ ANDROID_SERIAL):

     adb -s ${device}  

    J’ai testé ce code sur le terminal MacOS, mais je pense qu’il peut être utilisé sur les fenêtres du terminal Git Bash.

    Rappelez-vous également de configurer les variables d’environnement et les chemins du SDK Android sur le fichier .bash_profile :

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