Как использовать оболочку ADB при подключении нескольких устройств? Ошибка с «ошибкой: более одного устройства и эмулятора»
$ adb --help
…
-s SERIAL use device with given serial (overrides $ANDROID_SERIAL)
…
$ adb devices List of devices attached emulator-5554 device 7f1c864e device
…
- Ошибка из памяти с помощью Bitmap
- Как сохранить данные с камеры на диск с помощью MediaStore на Android?
- EditText, очистить фокус при касании снаружи
- Сделать Android WebView не хранить cookies или пароли
- Альтернативы PreferenceFragment с поддержкой android-v4
$ adb shell -s 7f1c864e error: more than one device and emulator
?
- В чем разница между различными методами получения контекста?
- Как скрыть строку состояния в Android
- Как программно установить maxLength в Android TextView?
- Не удалось получить соединение с заводским клиентом
- Отладка Android InetAddress.isReachable
- Android listview с проблемой флажка
- Загрузите простой текстовый файл в Android Studio
- Dx bad class file magic (cafebabe) или версия (0033.0000) с ADK14
Не следует вводить:
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
– Направить команду adb на единственный запущенный эмулятор. Возвращает ошибку при запуске более одного эмулятора.
Другой альтернативой было бы установить переменную окружения ANDROID_SERIAL для соответствующего серийного номера, при условии, что вы используете Windows:
set ANDROID_SERIAL="7f1c864e" echo %ANDROID_SERIAL% "7f1c864e"
Тогда вы можете использовать adb.exe shell
без каких-либо проблем.
Я нашел этот вопрос, увидев ошибку «более одного устройства», с двумя автономными телефонами, показывающими:
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, to quit:
Чтобы избежать ввода, вы можете просто создать псевдоним, включающий выбор устройства, как описано здесь .
Выполнение команд adb на всех подключенных устройствах
Создайте 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 [email protected] ..." adb -s $device [email protected] fi
сделать это с помощью
команда adb + // +
Для Windows, это быстрый пример 1 лайнера о том, как установить файл на нескольких устройствах
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
Создайте Bash (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}
Я протестировал этот код на терминале MacOS, но я думаю, что он может использоваться на windowsх через терминал Git Bash.
Также помните, как настроить параметры среды и пути Android SDK в файле .bash_profile
:
export ANDROID_HOME="/usr/local/opt/android-sdk/" export PATH="$ANDROID_HOME/platform-tools:$PATH" export PATH="$ANDROID_HOME/tools:$PATH"