Ошибка 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 — причина ошибки подтверждена. Дальше есть два пути: явно указывать устройство в каждой команде или убрать лишние подключения.
Шаг 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
Есть и сокращённые варианты выбора без серийника:
- 📱
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 работает всегда.