Как использовать оболочку ADB при подключении нескольких устройств? Выдает "Ошибка: более одного устройства и эмулятора"
$ 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 ответов:
разве вы не должны ввести:
adb -s 7f1c864e shell
?
http://developer.android.com/tools/help/adb.html#directingcommands
adb -d shell
(илиadb -e shell
Если вы подключаетесь к эмулятору).эта команда поможет вам в большинстве случаев, если вы слишком ленивы, чтобы ввести полный код.
от http://developer.android.com/tools/help/adb.html#commandsummary:
-d
- направьте команду adb на единственное подключенное USB-устройство. Возвращает сообщение об ошибке, когда более одного USB-устройства прилагается.
-e
- прямые АБР команда для единственного работающего эмулятора. Возвращает ошибку при запуске нескольких эмуляторов.
Другой альтернативой было бы установить переменную среды ANDROID_SERIAL в соответствующий сериал, здесь предполагая, что вы используете Windows:
set ANDROID_SERIAL="7f1c864e" echo %ANDROID_SERIAL% "7f1c864e"
затем вы можете использовать
adb.exe shell
без каких-либо проблем.
Я нашел этот вопрос, увидев ошибку "более одного устройства", с 2 автономными телефонами, показывающими:
C:\Program Files (x86)\Android\android-sdk\android-tools>adb devices List of devices attached SH436WM01785 offline SH436WM01785 offline SH436WM01785 sideload
Если у вас подключено только одно устройство, выполните следующие команды, чтобы избавиться от автономных подключений:
adb kill-server adb devices
этой суть будет делать большую часть работы для вас, показывая меню, когда есть несколько подключенных устройств:
$ 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:
чтобы избежать ввода, вы можете просто создать псевдоним, который включал выбор устройства, как описано здесь.
запуск команд adb на всех подключенных устройствах
создать 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
готово используйте его с
adb + / / + command
для Windows, вот быстрый пример 1 liner о том, как установить файл..на нескольких устройствах
FOR /F "skip=1" %x IN ('adb devices') DO start adb -s %x install -r myandroidapp.apk
Если вы планируете включить это в пакетный файл, замените %x на %%x, как показано ниже
FOR /F "skip=1" %%x IN ('adb devices') DO start adb -s %%x install -r myandroidapp.apk
создать Баш (tools.sh) чтобы выбрать последовательный из устройств (или эмулятор):
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
тогда в другом варианте можно использовать
adb -s
(глобальная опция-s использовать устройство с заданным серийным номером, который переопределяет $ANDROID_SERIAL):adb -s ${device} <command>
Я тестировал этот код на терминале MacOS, но я думаю, что его можно использовать в windows через терминал Git Bash.
также помните, настроить переменные среды и пути Android SDK на
.bash_profile
file:export ANDROID_HOME="/usr/local/opt/android-sdk/" export PATH="$ANDROID_HOME/platform-tools:$PATH" export PATH="$ANDROID_HOME/tools:$PATH"
пользователей
@janot
уже упоминал об этом выше, но это заняло у меня некоторое время, чтобы отфильтровать лучшее решение.есть два широких варианта использования:
1) подключено 2 аппаратных средства, первый-эмулятор, а другой-устройство.
решение:adb -e shell....whatever-command
для эмулятора иadb -d shell....whatever-command
для устройства.2) n количество подключенных устройств (все эмуляторы или телефоны / планшеты) через USB / ADB-WiFi:
решение: Шаг 1) запуститьadb devices
Это даст вам список устройств, подключенных в настоящее время (через USB или ADBoverWiFI)
Шаг 2) Теперь запуститеadb -s <device-id/IP-address> shell....whatever-command
независимо от того, сколько устройств у вас есть.пример
чтобы очистить данные приложения на устройстве, подключенном к wifi ADB, я бы выполнил:adb -s 172.16.34.89:5555 shell pm clear com.package-id
чтобы очистить данные приложения, подключенные к моему usb-устройству, я бы выполнил:
adb -s 5210d21be2a5643d shell pm clear com.package-id