web-dev-qa-db-fra.com

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

356
Jackie

Utilisez l'option -s AVANT la commande pour spécifier le périphérique, par exemple:

adb -s 7f1c864e Shell

Voir aussi http://developer.Android.com/tools/help/adb.html#directingcommands

620
janot

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 taper l'ID complet.

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

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

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

235

Une autre solution consisterait à définir la variable d’environnement Android_SERIAL sur le numéro de série correspondant, en supposant que vous utilisez Windows:

set Android_SERIAL="7f1c864e"
echo %Android_SERIAL%
"7f1c864e"

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

31
monotux

J'ai trouvé cette question après avoir constaté l'erreur «plus d'un périphérique», avec 2 téléphones hors ligne affichant:

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
25
Danny Beckett

Ce Gist fera le gros du travail en affichant 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, <Q> to quit:

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

5

Exécuter des 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

done l'utiliser avec

adb + // + commande

3
Shivaraj Patil

Créez un Bash (tools.sh) pour sélectionner une série de périphériques (ou d'é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 globale -s utilise un périphérique avec un numéro de série donné qui remplace $ Android_SERIAL):

adb -s ${device} <command>

J'ai testé ce code sur un terminal MacOS, mais je pense qu'il peut être utilisé sous Windows via Git Bash Terminal.

N'oubliez pas non plus 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"
1
equiman

Pour installer un apk sur l’un de vos émulateurs:

Commencez par obtenir la liste des périphériques:

-> adb devices
List of devices attached
25sdfsfb3801745eg        device
emulator-0954   device

Puis installez l'apk sur votre émulateur avec l'indicateur -s:

-> adb -s "25sdfsfb3801745eg" install "C:\Users\joel.joel\Downloads\release.apk"
Performing Streamed Install
Success

J'espère que cela aide quelqu'un!

1
pelican

Pour Windows, voici un exemple rapide montrant comment 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 envisagez de l'inclure 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
1
zingh

L'utilisateur @janot a déjà mentionné ce qui précède, mais cela m'a pris du temps pour filtrer la meilleure solution.

Il existe deux grands cas d'utilisation:

1) 2 matériels sont connectés, le premier est un émulateur et le second est un périphérique.
Solution : adb -e Shell....whatever-command pour l’émulateur et adb -d Shell....whatever-command pour le périphérique.

2) n périphériques connectés (émulateurs ou téléphones/tablettes) via USB/ADB-WiFi:

Solution : Step1) run adb devices Ceci vous donnera la liste des périphériques actuellement connectés (via USB ou ADBoverWiFI)
Étape 2) exécutez maintenant adb -s <device-id/IP-address> Shell....whatever-command Peu importe le nombre de périphériques que vous possédez.

Exemple
pour effacer les données d'application sur un appareil connecté sur wifi ADB j'exécuterais:
adb -s 172.16.34.89:5555 Shell pm clear com.package-id

pour effacer les données d'application connectées sur mon appareil connecté par USB, j'exécuterais:
adb -s 5210d21be2a5643d Shell pm clear com.package-id

0
sud007