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

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

Типичный сценарий: к ПК подключён смартфон по USB, параллельно запущен эмулятор из Android Studio или сторонний эмулятор вроде BlueStacks, либо телефон одновременно доступен по USB и по Wi-Fi. Во всех этих случаях любая команда без флага выбора устройства вернёт эту ошибку. Ниже разберём, как быстро проверить список подключений и указать ADB нужное устройство.

Почему возникает ошибка more than one device/emulator

ADB ведёт список всех активных подключений: физических устройств по USB, устройств по сети (TCP/IP) и эмуляторов. Каждое подключение получает свой серийный номер — уникальный идентификатор. Когда в списке больше одной записи, а команда не содержит указания на конкретный серийник, утилита отказывается гадать и выводит ошибку.

Наиболее частые источники «лишних» устройств в списке:

  • 📱 Подключённый по USB смартфон или планшет с включённой отладкой по USB;
  • 🖥️ Запущенный эмулятор Android Emulator (AVD) из Android Studio;
  • 🎮 Сторонние эмуляторы — BlueStacks, Nox, LDPlayer, MuMu, которые сами поднимают ADB-подключение;
  • 📶 То же устройство, подключённое одновременно по USB и по Wi-Fi (две записи с разными идентификаторами);
  • 👓 Другие гаджеты с ADB-интерфейсом: Android TV, приставки, умные часы Wear OS.

Отдельный случай — «зависшие» записи. Если устройство отключили некорректно или ADB-сервер работает давно, в списке могут остаться записи со статусом offline или unauthorized, которые тоже считаются за отдельное устройство.

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

Первое действие при этой ошибке — посмотреть, что именно видит ADB. Откройте командную строку или терминал в папке с adb.exe (или в любом месте, если путь прописан в переменной PATH) и выполните:

adb devices

Команда выведет таблицу из двух колонок: идентификатор устройства и его состояние. Нормальное рабочее состояние — device. Записи со статусом offline, unauthorized или no permissions указывают на проблемные подключения.

Статус в adb devicesЧто означаетЧто делать
deviceУстройство подключено и готово к работеИспользовать его серийник в командах
offlineСвязь потеряна или завислаПерезапустить ADB-сервер, переподключить кабель
unauthorizedНа устройстве не подтверждён запрос на отладкуРазблокировать экран и подтвердить RSA-запрос
no permissionsНет прав доступа (часто в Linux)Настроить udev-правила или запустить с правами

Если в списке две и более строки со статусом device — причина ошибки подтверждена. Дальше есть два пути: явно указывать устройство в каждой команде или убрать лишние подключения.

📊 Как у вас возникла ошибка more than one device/emulator?
Подключены телефон и эмулятор одновременно
Несколько телефонов по USB
Устройство по USB и Wi-Fi одновременно
Запущен сторонний эмулятор (BlueStacks, Nox и т.п.)

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

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

adb -s СЕРИЙНЫЙ_НОМЕР команда

Например, если в списке есть устройство emulator-5554 и смартфон ABCD12345678, то установка APK на смартфон будет выглядеть так:

adb -s ABCD12345678 install app.apk

Флаг -s ставится сразу после adb и перед основной командой — это касается любых операций: install, shell, push, pull, logcat и других.

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

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

Есть и сокращённые варианты выбора без серийника:

  • 📱 adb -d команда — выполнить на единственном физическом устройстве по USB (ошибка, если их несколько);
  • 🖥️ adb -e команда — выполнить на единственном запущенном эмуляторе;
  • 🔌 adb -t ID команда — выбрать устройство по идентификатору транспорта (используется реже).
⚠️ Внимание: флаги -d и -e работают только если устройств соответствующего типа ровно одно. При двух смартфонах по USB команда adb -d вернёт ту же ошибку — используйте -s с серийным номером.

Шаг 3. Убираем лишние подключения

Если постоянно указывать серийник неудобно, проще оставить в списке одно устройство. Способ зависит от того, что является источником лишней записи.

Запущенный эмулятор можно закрыть штатно — через интерфейс AVD Manager или кнопку закрытия окна эмулятора. Сторонние эмуляторы (BlueStacks, Nox и подобные) иногда держат ADB-подключение даже в свёрнутом виде, поэтому их стоит закрыть полностью, включая фоновые процессы в диспетчере задач.

Для сетевого подключения по Wi-Fi есть прямая команда отключения:

adb disconnect IP_АДРЕС:ПОРТ

Команда adb disconnect без аргументов разрывает все TCP-подключения сразу — USB-устройства это не затронет.

Шаг 4. Перезапуск ADB-сервера при «зависших» записях

Бывает, что устройство физически отключено, а в adb devices оно числится со статусом offline. Такие фантомные записи тоже провоцируют ошибку more than one device/emulator, хотя реально подключено одно устройство. Лечится перезапуском ADB-сервера:

adb kill-server

adb start-server

После перезапуска снова выполните adb devices и проверьте список. На устройствах может повторно появиться запрос на разрешение отладки по USB — его нужно подтвердить на экране, при желании отметив пункт «Всегда разрешать с этого компьютера».

⚠️ Внимание: если после перезапуска сервера устройство остаётся в статусе unauthorized, проверьте, не скрыто ли окно запроса на отладку за блокировкой экрана. Разблокируйте устройство и переподключите кабель.
Почему одно устройство отображается дважды

Такое происходит, когда смартфон подключён по USB и одновременно по Wi-Fi через adb connect. У каждого способа подключения свой идентификатор: по USB это серийный номер, по сети — адрес вида 192.168.x.x:5555. Для ADB это два разных устройства. Решение — отключить сетевое подключение командой adb disconnect или работать только по одному каналу.

Ошибка в скриптах, Gradle и Android Studio

Не только ручные команды страдают от этой проблемы. Сборка проекта в Android Studio, запуск тестов через Gradle или собственные bat/sh-скрипты с вызовами ADB тоже падают, если подключений несколько. IDE обычно предлагает выбрать устройство в диалоге, но фоновые вызовы adb install могут завершиться ошибкой молча или с той же записью в логе.

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

Когда ошибка не уходит: дополнительная диагностика

Если устройство в списке одно, а ошибка всё равно появляется, проверьте несколько менее очевидных моментов. Возможно, в системе работает второй экземпляр ADB-сервера — например, свой встроенный ADB у стороннего эмулятора или у программы для прошивки. Разные версии adb.exe могут конфликтовать: сервер, запущенный одной версией, перехватывает подключения другой.

Проверьте диспетчер задач на наличие нескольких процессов adb.exe и завершите лишние. Также убедитесь, что в PATH нет нескольких путей к разным копиям platform-tools — команда where adb в Windows покажет все найденные экземпляры.

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

Частые вопросы

Что означает ошибка adb: more than one device/emulator?

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

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

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

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

Да. Установите переменную окружения ANDROID_SERIAL со значением серийного номера нужного устройства. Пока переменная задана, все команды ADB будут направляться на него. Учтите, что флаг -s в команде имеет приоритет над переменной.

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

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

Чем отличаются флаги -d, -e и -s?

-d направляет команду на единственное USB-устройство, -e — на единственный эмулятор, а -s — на устройство с конкретным серийным номером. Флаги -d и -e удобны, но срабатывают только при ровно одном устройстве соответствующего типа; -s работает всегда.