Ошибка «more than one device/emulator» в ADB: как исправить

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

Проблема особенно часто возникает у разработчиков, которые тестируют приложение одновременно на физическом смартфоне и эмуляторе Android Studio, а также у пользователей, у которых в фоне остался запущенным эмулятор BlueStacks, Nox или LDPlayer. Ниже разберём, как проверить список подключённых устройств, как адресовать команды конкретному девайсу и что делать, если в списке «зависло» лишнее устройство.

Как проверить, какие устройства видит ADB

Первый шаг диагностики — посмотреть полный список устройств, которые сервер ADB считает подключёнными. Для этого выполните в терминале или командной строке:

adb devices

В выводе вы увидите одну или несколько строк вида emulator-5554 device или серийный номер физического устройства со статусом device. Если строк две и больше — причина ошибки подтверждена: ADB не знает, какое из них использовать.

Обратите внимание на статус каждой строки. Значение device означает нормальное подключение, unauthorized — что на смартфоне не подтверждён запрос на отладку по USB, а offline — что соединение потеряно или зависло. Записи со статусом offline нередко остаются в списке после некорректного отключения кабеля или падения эмулятора и тоже провоцируют ошибку.

Способ 1: указать устройство явно через флаг -s

Самый универсальный метод — добавить к любой команде флаг -s с серийным номером целевого устройства, взятым из вывода adb devices. Например:

adb -s emulator-5554 install app.apk

Такой синтаксис работает для всех команд ADB: shell, push, pull, logcat, reboot и других. Серийный номер физического устройства обычно представляет собой буквенно-цифровую строку, а эмуляторы обозначаются как emulator-5554, emulator-5556 и так далее — номер порта увеличивается с каждым запущенным экземпляром.

Если вы работаете с командами постоянно, вводить флаг каждый раз утомительно. В Linux и macOS можно задать переменную окружения ANDROID_SERIAL со значением серийного номера — тогда ADB будет по умолчанию использовать именно это устройство, пока переменная установлена в текущей сессии терминала.

Способ 2: отключить лишние устройства и эмуляторы

Если второе устройство вам сейчас не нужно, проще всего убрать его из списка. Для физического смартфона достаточно отсоединить USB-кабель или отключить беспроводную отладку. С эмуляторами ситуация чуть сложнее: часто пользователь даже не подозревает, что в фоне работает второй экземпляр.

  • 📱 Закройте все окна эмуляторов BlueStacks, Nox, LDPlayer, MuMu — некоторые из них продолжают держать ADB-подключение даже после закрытия главного окна.
  • 🖥️ Проверьте диспетчер задач Windows на наличие фоновых процессов эмуляторов и завершите лишние.
  • 🔌 Отключите физические устройства, которые не участвуют в текущей задаче.
  • 📡 Проверьте устройства, подключённые по Wi-Fi через adb connect — они тоже попадают в общий список.

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

📊 В какой ситуации вы столкнулись с ошибкой more than one device/emulator?
Смартфон + эмулятор Android Studio
Запущено несколько эмуляторов (BlueStacks, Nox и др.)
Несколько физических устройств по USB
Устройство зависло в статусе offline

Способ 3: перезапуск сервера ADB при «зависших» записях

Иногда в списке остаётся запись об устройстве, которое физически уже отключено: оно висит со статусом offline и мешает выполнению команд. Такое случается после внезапного обрыва соединения, сбоя эмулятора или конфликта версий ADB. Помогает перезапуск сервера:

adb kill-server

adb start-server

adb devices

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

⚠️ Внимание: если после перезапуска сервера физическое устройство не появляется в списке вообще, проверьте, включена ли отладка по USB в настройках разработчика на смартфоне и подтверждён ли запрос на разрешение отладки на экране устройства.

☑️ Порядок действий при ошибке more than one device/emulator

Выполнено: 0 / 4

Конфликт версий ADB: скрытая причина проблемы

Менее очевидный сценарий — на компьютере установлено несколько копий ADB разных версий: одна поставляется с Android SDK Platform-Tools, другая встроена в эмуляторы вроде BlueStacks или LDPlayer, третья может идти в составе сторонних утилит. Когда версии клиента и сервера не совпадают, сервер перезапускается, а подключения могут дублироваться или зависать.

Проверить, какая именно копия ADB выполняется, можно командой where adb в Windows или which adb в Linux и macOS. Если путей несколько, имеет смысл оставить в переменной PATH только актуальную версию из официальных Platform-Tools и перезапустить терминал. Точные пути установки зависят от того, как размещён SDK на конкретной машине, поэтому сверяйтесь со своей конфигурацией.

Почему эмуляторы создают «лишние» устройства

Многие сторонние эмуляторы (BlueStacks, Nox, LDPlayer, MuMu) при запуске автоматически подключаются к локальному ADB-серверу и регистрируются как устройство с адресом вида 127.0.0.1:5555 или emulator-5554. Даже если окно эмулятора свёрнуто, подключение остаётся активным, и ADB учитывает его в общем списке. Поэтому ошибка часто возникает у пользователей, которые вообще не запускали эмулятор осознанно — он мог стартовать вместе с системой.

Работа с несколькими устройствами в Android Studio

Внутри Android Studio ошибка встречается реже, поскольку среда сама предлагает выбрать целевое устройство в выпадающем списке перед запуском приложения. Однако при использовании встроенного терминала действуют те же правила, что и в обычной командной строке: без флага -s команды будут завершаться ошибкой.

Если вы запускаете несколько эмуляторов через AVD Manager, каждому присваивается свой порт — emulator-5554, emulator-5556 и далее с шагом в два. Это нормальное поведение, и адресация по серийному номеру позволяет работать с каждым экземпляром независимо: устанавливать разные сборки приложения, снимать логи, перезагружать конкретный эмулятор.

⚠️ Внимание: не пытайтесь «починить» ошибку удалением или переустановкой драйверов устройства — она никак не связана с драйверами. Переустановка нужна только если устройство вообще не определяется системой, что проявляется иначе.

Сводная таблица способов решения

СитуацияРешениеКоманда / действие
Нужны оба устройстваАдресация по серийному номеруadb -s <serial> <команда>
Лишнее устройство не нужноОтключить кабель или закрыть эмуляторФизическое отключение, закрытие процессов
Запись зависла в статусе offlineПерезапуск сервера ADBadb kill-server, затем adb start-server
Постоянная работа с одним устройствомПеременная окруженияЗадать ANDROID_SERIAL
Конфликт копий ADBОставить одну версию в PATHwhere adb / which adb

Выбор способа зависит от вашего сценария. Разработчику, тестирующему на нескольких девайсах одновременно, удобнее флаг -s или переменная окружения. Обычному пользователю, которому нужно один раз установить приложение, проще просто закрыть лишний эмулятор.

Часто задаваемые вопросы

Опасна ли ошибка more than one device/emulator для устройства?

Нет, это исключительно информационное сообщение клиента ADB. Оно означает, что команда не была выполнена, потому что цель не определена. Никаких изменений на устройствах при этом не происходит.

Почему в списке adb devices есть устройство, которое я не подключал?

Наиболее вероятная причина — работающий в фоне эмулятор (BlueStacks, Nox, LDPlayer и подобные), который автоматически регистрируется в ADB при запуске. Также проверьте, не осталось ли подключение по Wi-Fi, созданное ранее командой adb connect. Перезапуск сервера через adb kill-server помогает увидеть актуальную картину.

Как выполнить команду сразу на всех подключённых устройствах?

Штатной опции «для всех устройств» у ADB нет — поэтому и существует требование указывать цель. На практике используют цикл в скрипте, который перебирает серийные номера из вывода adb devices и выполняет команду с флагом -s для каждого. Такой скрипт пишется под конкретную оболочку (bash, PowerShell).

Что означает статус unauthorized рядом с устройством?

Статус unauthorized говорит о том, что на смартфоне не подтверждён диалог «Разрешить отладку по USB?». Разблокируйте экран устройства и подтвердите запрос. Если диалог не появляется, отключите и снова включите отладку по USB в настройках разработчика и переподключите кабель.

Можно ли переименовать устройство, чтобы не запоминать серийный номер?

Стандартного механизма переименования в ADB нет — серийный номер формируется самим устройством или эмулятором. Практическая альтернатива — использовать переменную окружения ANDROID_SERIAL или псевдонимы (alias) в вашей командной оболочке, подставляющие нужный серийный номер автоматически.