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
?
9 réponses
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 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.
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.
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
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 .
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
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
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"
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