Réponses:
Utilisez l' -s
option AVANT la commande pour spécifier le périphérique, par exemple:
adb -s 7f1c864e shell
Voir également http://developer.android.com/tools/help/adb.html#directingcommands
adb -e shell
ou adb emu <command>
. Ils échoueront s'il y a plus d'un émulateur en cours et vous devrez vous replier sur-s
-s
option avant shell
. C'est une très mauvaise expérience utilisateur que vous ne pouvez pas faire l'inverse ...
adb -d shell
(ou adb -e shell
).
Cette commande vous aidera dans la plupart des cas, si vous êtes trop paresseux pour taper l'ID complet.
Depuis 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.
-d
c'est pour "appareil" et -e
pour "émulateur" . Et si vous l'avez déjà compris, donnez-vous une tape dans le dos. ;)
Une autre alternative serait de définir la variable d'environnement ANDROID_SERIAL sur la série appropriée, en supposant ici que vous utilisez Windows:
set ANDROID_SERIAL="7f1c864e"
echo %ANDROID_SERIAL%
"7f1c864e"
Ensuite, vous pouvez utiliser adb.exe shell
sans aucun problème.
set ANDROID_SERIAL=7f1c864e
, à savoir. sans citations.
export ANDROID_SERIAL=7f1c864e
.
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 supprimer les connexions hors ligne:
adb kill-server
adb devices
adb kill-server
résout le problème avec les émulateurs hors ligne
Cet essentiel fera la plupart du travail pour vous en affichant un menu lorsque plusieurs appareils 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 qui incluait la sélection de périphérique comme expliqué ici .
L'utilisateur l' @janot
a déjà mentionné ci-dessus, mais cela m'a pris un certain temps pour filtrer la meilleure solution.
Il existe deux cas d'utilisation généraux:
1) 2 matériels sont connectés, le premier est l'émulateur et l'autre est un périphérique.
Solution : adb -e shell....whatever-command
pour émulateur et adb -d shell....whatever-command
pour appareil.
2) n nombre d'appareils sont connectés (tous les émulateurs ou téléphones / tablettes) via USB / ADB-WiFi:
Solution : Étape 1) exécutez adb devices
Cela vous donnera la liste des appareils actuellement connectés (via USB ou ADBoverWiFI) Étape 2)
exécutez maintenant, adb -s <device-id/IP-address> shell....whatever-command
peu importe comment de nombreux appareils dont vous disposez.
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é USB, j'exécuterais:
adb -s 5210d21be2a5643d shell pm clear com.package-id
Pour installer un apk sur l'un de vos émulateurs:
Obtenez d'abord la liste des appareils:
-> adb devices
List of devices attached
25sdfsfb3801745eg device
emulator-0954 device
Installez ensuite l'apk sur votre émulateur avec le -s
drapeau:
-> adb -s "25sdfsfb3801745eg" install "C:\Users\joel.joel\Downloads\release.apk"
Performing Streamed Install
Success
J'espère que cela aide quelqu'un!
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
l'utiliser avec
Commande adb + // +
Pour Windows, voici un exemple rapide 1 de comment installer un fichier ... sur plusieurs appareils
FOR /F "skip=1" %x IN ('adb devices') DO start adb -s %x install -r myandroidapp.apk
Si vous prévoyez 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
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 peut 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 le terminal MacOS, mais je pense qu'il peut être utilisé sur les fenêtres de Git Bash Terminal.
N'oubliez pas également de configurer les variables d'environnement et les chemins du SDK Android dans le .bash_profile
fichier:
export ANDROID_HOME="/usr/local/opt/android-sdk/"
export PATH="$ANDROID_HOME/platform-tools:$PATH"
export PATH="$ANDROID_HOME/tools:$PATH"
fxMenu
et fxValidatonNumberMenu
sont juste pour référence. Je l'avais commenté pour éviter les codes d'erreur. Vous pouvez voir une implémentation complète sur mon référentiel: github.com/equiman/hardhatmac/blob/master/tools.sh
La meilleure façon d'exécuter le shell sur un appareil particulier est d'utiliser:
adb -s << emulator UDID >> shell
For Example:
adb -s emulator-5554 shell
Fonctionne à 100%
S'il vous plaît donnez-lui un coup
Voici un script shell que je me suis fait:
#! /bin/sh
for device in `adb devices | awk '{print $1}'`; do
if [ ! "$device" = "" ] && [ ! "$device" = "List" ]
then
echo " "
echo "adb -s $device $@"
echo "------------------------------------------------------"
adb -s $device $@
fi
done
adb -s 192.168.56.101:5555 shell