$ 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
?
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
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.
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.
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
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 .
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
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"
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!
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
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