Ошибка «error: more than one device/emulator» в ADB: причины и решение

Ошибка error: more than one device/emulator появляется в терминале сразу после ввода команды adb install, adb shell или adb push, когда к компьютеру одновременно подключено несколько Android-устройств или запущено несколько эмуляторов. ADB не может сам решить, какому из них адресована команда, и прерывает выполнение.

Проблема не является сбоем системы — это штатное поведение Android Debug Bridge. Утилита требует однозначного указания цели, если видит больше одного подключённого устройства. Ниже разберём, как определить список подключений, указать нужное устройство и устранить причину, чтобы ошибка не повторялась.

Почему ADB выдаёт ошибку more than one device/emulator

Команда adb работает через фоновый сервер, который отслеживает все подключения: по USB, по Wi-Fi и через виртуальные устройства. Когда целей больше одной, любая команда без явного указания адресата завершается ошибкой. Типичные ситуации:

  • 📱 К ПК подключены два смартфона или планшета одновременно;
  • 🖥️ Запущен эмулятор (Android Emulator, BlueStacks, Genymotion) вместе с реальным устройством;
  • 📡 Устройство подключено по Wi-Fi через adb connect и при этом подсоединено по USB;
  • 👻 «Зависшее» подключение осталось в списке после отключения кабеля или закрытия эмулятора.

Последний вариант особенно коварен: физически устройство одно, но сервер ADB помнит старую сессию и считает, что целей две. В этом случае помогает перезапуск сервера, о котором ниже.

Шаг 1. Проверяем список подключённых устройств

Первое действие — посмотреть, что именно видит ADB. Выполните в терминале или командной строке:

adb devices

В ответ вы получите список серийных номеров и состояние каждого подключения. Возможные статусы: device (готово к работе), unauthorized (на смартфоне не подтверждена отладка), offline (связь потеряна). Если строк две и больше — причина ошибки подтверждена.

Обратите внимание на записи вида emulator-5554 — это виртуальные устройства, а также на адреса формата 192.168.x.x:5555 — это подключения по сети. Запишите серийный номер нужного устройства, он понадобится на следующем шаге.

Шаг 2. Указываем конкретное устройство через флаг -s

Самый прямой способ обойти ошибку — сказать ADB, с каким устройством работать. Для этого служит параметр -s с серийным номером из вывода adb devices:

adb -s XXXXXXX install app.apk

Вместо XXXXXXX подставьте реальный идентификатор. Этот приём работает с любой командой: adb -s emulator-5554 shell, adb -s 192.168.1.50:5555 push file.zip /sdcard/ и так далее.

Есть и сокращённые варианты, когда тип цели один: флаг -d направляет команду единственному USB-устройству, а -e — единственному эмулятору. Но если в каждой категории по несколько целей, эти флаги тоже вернут ошибку — тогда только -s.

КомандаНазначение
adb devicesПоказать все подключённые устройства и эмуляторы
adb -s ID командаВыполнить команду на устройстве с указанным серийником
adb -d командаНаправить команду единственному USB-устройству
adb -e командаНаправить команду единственному эмулятору
adb kill-serverОстановить сервер ADB и сбросить зависшие сессии

Шаг 3. Отключаем лишние устройства и эмуляторы

Если постоянно указывать -s неудобно, проще оставить одно подключение. Физически отсоедините второй смартфон от USB-порта либо закройте эмулятор, который сейчас не нужен. Для сетевых подключений выполните adb disconnect 192.168.x.x:5555 или adb disconnect без аргументов, чтобы разорвать все Wi-Fi-сессии сразу.

После отключения снова запустите adb devices и убедитесь, что в списке осталась одна строка со статусом device. Теперь команды будут выполняться без дополнительных флагов.

⚠️ Внимание: команда adb disconnect без указания адреса разрывает все сетевые подключения. Если вы работаете с устройством только по Wi-Fi, после этой команды его придётся подключать заново через adb connect.

Шаг 4. Перезапускаем сервер ADB при «фантомных» подключениях

Бывает, что устройство одно, а ошибка всё равно выскакивает — виновата зависшая сессия в памяти сервера. Помогает полный перезапуск:

adb kill-server

adb start-server

adb devices

Первая команда останавливает фоновый процесс, вторая запускает его заново, третья показывает «чистый» список подключений. После этого фантомные записи обычно исчезают.

☑️ Устранение ошибки more than one device/emulator

Выполнено: 0 / 5
⚠️ Внимание: если после перезапуска сервера устройство вообще пропало из списка, проверьте кабель, USB-порт и включён ли режим «Отладка по USB» в настройках разработчика смартфона. Порядок включения этого режима зависит от оболочки и версии Android — сверьтесь с инструкцией для вашей модели.
📊 Что стало причиной ошибки more than one device/emulator в вашем случае?
Подключено два и более устройства по USB
Запущен эмулятор вместе с реальным смартфоном
Дублирующееся подключение по USB и Wi-Fi
Зависшая сессия после отключения устройства

Автоматизация: как не указывать -s каждый раз

Разработчикам, которые постоянно работают с несколькими устройствами, удобнее задать цель по умолчанию через переменную окружения ANDROID_SERIAL. В Linux и macOS это делается командой export ANDROID_SERIAL=XXXXXXX, в Windows — через set ANDROID_SERIAL=XXXXXXX в текущей сессии командной строки. После этого все команды adb в этом терминале будут адресоваться выбранному устройству.

Ещё один вариант — псевдонимы команд в shell-конфигурации, например отдельные алиасы для телефона и эмулятора. Это избавляет от ручного ввода длинных серийных номеров.

Почему появляются записи emulator-5554 и emulator-5556

Каждый запущенный эмулятор Android занимает пару портов: чётный — для консоли, следующий нечётный — для ADB. Первый эмулятор обычно получает 5554, второй — 5556 и так далее. Поэтому два открытых виртуальных устройства гарантированно вызовут ошибку more than one device/emulator при команде без флага -s.

Когда ошибка возникает в Android Studio и других IDE

Среда разработки Android Studio сама вызывает ADB при установке приложения на устройство. Если подключений несколько, IDE обычно показывает диалог выбора цели, но при пакетных запусках или работе через терминал внутри студии ошибка может всплыть в консоли. Решение то же: выбрать целевое устройство в выпадающем списке на панели инструментов или закрыть лишние эмуляторы через Device Manager.

Сторонние эмуляторы вроде BlueStacks или LDPlayer тоже регистрируются в ADB как отдельные устройства и могут провоцировать конфликт, даже если вы ими давно не пользовались, но процесс остался в фоне. Проверьте диспетчер задач и завершите лишние процессы эмуляторов.

FAQ: частые вопросы об ошибке more than one device/emulator

Что означает error: more than one device/emulator?

ADB обнаружил два и более подключённых устройства (физических, виртуальных или сетевых) и не может определить, какому из них предназначена команда. Нужно явно указать цель флагом -s с серийным номером.

Как узнать серийный номер устройства для флага -s?

Выполните adb devices — первая колонка вывода содержит идентификаторы всех подключений: серийники USB-устройств, имена вида emulator-5554 и адреса сетевых подключений.

Устройство одно, но ошибка всё равно появляется. Что делать?

Вероятно, в списке зависла старая сессия. Выполните adb kill-server, затем adb start-server и проверьте вывод adb devices. Также убедитесь, что устройство не подключено одновременно по USB и по Wi-Fi.

Можно ли выполнить команду сразу на всех устройствах?

Штатного флага «для всех» в ADB нет. Обычно команды прогоняют в цикле по списку серийных номеров из adb devices с помощью скрипта, подставляя каждый идентификатор в adb -s.

Эмулятор закрыт, но adb devices его показывает. Почему?

Процесс эмулятора мог завершиться некорректно, и запись осталась в сервере ADB. Перезапуск сервера командами adb kill-server и adb start-server очищает такие «фантомные» подключения.