Comment utiliser adb Shell lorsque plusieurs appareils sont connectés? Echoue avec " erreur: plus d'un dispositif 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

?

329
demandé sur Mark Amery 2013-02-02 00:46:47

9 réponses

ne devriez-vous pas entrer:

adb -s 7f1c864e shell

?

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

571
répondu janot 2016-08-07 09:18:43

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

Cette commande va vous aider dans la plupart des cas, si vous êtes trop paresseux pour taper l'ID.

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

-d - dirigez une commande adb vers le seul périphérique USB attaché. Renvoie une erreur lorsque plus de un périphérique USB est attaché.

-e - dirigez une commande adb vers le seul émulateur en marche. Renvoie une erreur lorsque plus d'un émulateur est en cours d'exécution.

223
répondu Sazzad Hissain Khan 2017-12-22 18:31:48

une autre alternative serait de définir la variable D'environnement ANDROID_SERIAL à la série correspondante, en supposant que vous utilisez Windows:

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

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

30
répondu monotux 2014-02-28 08:39:58

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 appareil connecté, exécutez les commandes suivantes pour vous débarrasser des connexions hors ligne:

adb kill-server
adb devices
24
répondu Danny Beckett 2014-12-31 01:37:36

Ce gist on va le faire la plupart du travail pour vous montrer un menu lorsqu'il y a plusieurs appareils 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 juste créer un alias qui incluait la sélection de périphérique comme expliqué ici .

5
répondu Diego Torres Milano 2017-06-16 17:38:50

exécuter des commandes adb sur tous les dispositifs connectés

créer un bash (adb+)

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

fait utilisez-le avec

bad+ //+ commande

4
répondu Shivaraj Patil 2017-05-23 11:47:36

Pour Windows, voici un exemple rapide de 1 liner pour installer un fichier..sur plusieurs dispositifs

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

si vous prévoyez l'inclure dans un fichier de lot, remplacez %x par %%x, comme ci-dessous

FOR /F "skip=1"  %%x IN ('adb devices') DO start adb -s %%x install -r myandroidapp.apk
0
répondu zingh 2018-03-14 19:19:06

créer un Bash (tools.sh) pour sélectionner une série à partir de dispositifs (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

puis dans une autre option peut utiliser adb -s (global option-s utiliser le périphérique avec un numéro de série donné qui l'emporte sur $ANDROID_SERIAL):

adb -s ${device} <command>

j'ai testé ce code sur MacOS terminal, mais je pense qu'il peut être utilisé sur windows à travers Git Bash Terminal.

se souvenir également de configurer les variables environnementales et Android SDK chemins sur .bash_profile fichier:

export ANDROID_HOME="/usr/local/opt/android-sdk/"
export PATH="$ANDROID_HOME/platform-tools:$PATH"
export PATH="$ANDROID_HOME/tools:$PATH"
0
répondu equiman 2018-03-21 19:47:58

User @janot a déjà mentionné ceci ci-dessus, mais cela m'a pris un certain temps pour filtrer la meilleure solution.

il existe deux cas D'utilisation large:



1) 2 le matériel sont connectés, le premier est l'émulateur et l'autre est un dispositif.

Solution : adb -e shell....whatever-command pour émulateur et adb -d shell....whatever-command pour dispositif.

2) N nombre des appareils sont connectés (tous les émulateurs ou téléphones/tablettes) via USB / ADB-WiFi:



Solution : Étape 1) Lancez adb devices cela vous donnera la liste des périphériques actuellement connectés (via USB ou ADBoverWiFI)

Step2) maintenant, Lancez adb -s <device-id/IP-address> shell....whatever-command peu importe le nombre d'appareils que vous avez.

exemple

pour effacer les données de l'app sur un appareil connecté sur wifi ADB Je l'exécuterais:

adb -s 172.16.34.89:5555 shell pm clear com.package-id

pour effacer les données de l'application connectée sur mon périphérique usb, j'exécuterais:

adb -s 5210d21be2a5643d shell pm clear com.package-id

0
répondu sud007 2018-09-07 07:28:59