Ошибка error: more than one device/emulator появляется в терминале в тот момент, когда к компьютеру одновременно подключено несколько Android-устройств или запущено несколько эмуляторов, а команда adb отправлена без указания конкретного получателя. Утилита просто не понимает, к какому из подключённых девайсов относится запрос, и отказывается его выполнять. Это не сбой системы и не поломка — это защитное поведение ADB, требующее от вас явного уточнения цели.
Разобраться в проблеме можно за пару минут, если понимать логику работы Android Debug Bridge. Ниже разберём, почему возникает конфликт, как посмотреть список подключённых устройств и как нацелить команду на нужный девайс — вручную или автоматически.
Почему ADB выдаёт ошибку more than one device/emulator
ADB работает по клиент-серверной схеме: сервер на компьютере обслуживает все подключённые устройства сразу. Когда вы вводите команду вроде adb install app.apk или adb shell без дополнительных параметров, сервер ищет единственное активное устройство. Если их два и больше — выполнение прерывается с ошибкой.
Типичные ситуации, которые приводят к конфликту:
- 📱 К ПК подключён реальный смартфон по USB, и одновременно запущен эмулятор из Android Studio;
- 🖥️ Запущено два эмулятора с разными версиями Android для тестирования;
- 🔌 Устройство подключено и по USB, и по Wi-Fi (
adb connect) — ADB видит его как два отдельных девайса; - 👥 К компьютеру подсоединено несколько телефонов, например при пакетной прошивке или тестировании.
⚠️ Внимание: сообщение more than one device/emulator означает, что команда не выполнена вообще — ни на одном из устройств. Не нужно повторно вводить её «на всякий случай»: сначала укажите целевой девайс, иначе результат будет тем же.
Шаг 1. Смотрим список подключённых устройств
Первое действие при любой проблеме с ADB — проверить, что именно видит сервер. Для этого служит команда:
adb devices
В ответ вы получите таблицу из серийных номеров и статусов. Например, строка вида emulator-5554 device означает запущенный эмулятор, а буквенно-цифровой идентификатор вроде RF8N30XYZ12 — физический смартфон. Статус device говорит о готовности к работе, unauthorized — что на телефоне не подтверждена отладка, offline — о потере связи.
Если в списке присутствует устройство, которого, по вашему мнению, быть не должно, — возможная причина в «зависшем» подключении. Старые сессии adb connect по сети иногда сохраняются даже после отключения девайса. Очистить их поможет перезапуск сервера, о котором речь пойдёт ниже.
Шаг 2. Указываем целевое устройство флагом -s
Самый универсальный способ устранить конфликт — явно сказать ADB, с каким устройством работать. Для этого используется параметр -s с серийным номером из вывода adb devices:
adb -s emulator-5554 install app.apk
Такой подход работает с любой командой: adb -s RF8N30XYZ12 shell, adb -s 192.168.1.50:5555 logcat и так далее. Серийник подставляется сразу после adb, до самой команды — это важно, иначе параметр будет проигнорирован.
Когда устройств всего два и они разного типа, можно обойтись без серийных номеров. Флаг -d направляет команду на единственное USB-устройство, а флаг -e — на единственный эмулятор. Но если по USB подключено два телефона, -d тоже вернёт ошибку.
☑️ Порядок действий при ошибке more than one device/emulator
Шаг 3. Отключаем лишние устройства
Если постоянно указывать флаг -s неудобно, проще физически убрать лишние подключения. Отключите второй смартфон от USB или закройте ненужный эмулятор — после этого обычные команды adb снова будут работать без параметров.
С сетевыми подключениями ситуация тоньше. Чтобы разорвать конкретное Wi-Fi-подключение, используйте:
adb disconnect 192.168.1.50:5555
Команда adb disconnect без аргументов отключит все сетевые устройства сразу. Полный же сброс состояния делается перезапуском сервера:
adb kill-server
adb start-server
⚠️ Внимание: после adb kill-server все активные сессии обрываются, включая авторизацию сетевых подключений. При следующем подключении по USB на экране смартфона может снова появиться запрос на разрешение отладки — подтвердите его, отметив «Всегда разрешать с этого компьютера», если это ваш рабочий ПК.
Сравнение способов адресации устройств
У ADB есть несколько механизмов выбора цели, и у каждого своя область применения. Сводная таблица поможет подобрать подходящий вариант:
| Способ | Синтаксис | Когда применять |
|---|---|---|
| Флаг -s | adb -s <serial> shell | Универсально, любое число устройств |
| Флаг -d | adb -d install app.apk | Одно USB-устройство среди эмуляторов |
| Флаг -e | adb -e logcat | Один эмулятор среди USB-девайсов |
| Переменная окружения | ANDROID_SERIAL | Постоянная работа с одним девайсом в скриптах |
| Отключение лишних | adb disconnect | Разовая работа без лишних параметров |
Переменная окружения ANDROID_SERIAL заслуживает отдельного упоминания: если задать в ней серийный номер, все команды adb в текущей сессии терминала будут автоматически направляться на это устройство. Это удобно в скриптах автоматизации, где прописывать -s в каждой строке громоздко.
Особый случай: одно устройство видно как два
Нередко пользователь уверен, что подключён один смартфон, а adb devices показывает две строки. Чаще всего дело в одновременном подключении по USB и по Wi-Fi: после выполнения adb tcpip 5555 и adb connect девайс регистрируется дважды — как USB-устройство и как сетевое.
Решение простое: либо отключите кабель и работайте по сети, либо выполните adb disconnect и оставьте только USB. Ещё одна возможная причина дублирования — «зависшая» запись после некорректного отключения; она убирается перезапуском сервера через adb kill-server.
Почему у эмулятора номер вида emulator-5554
Эмуляторы Android получают последовательные чётные порты начиная с 5554: первый — emulator-5554, второй — emulator-5556 и так далее. Чётные порты используются для adb-подключения, а соседние нечётные (5555, 5557) — для консоли эмулятора. По номеру порта всегда можно понять, сколько эмуляторов запущено.
Профилактика: как не сталкиваться с ошибкой снова
Чтобы конфликт устройств не отвлекал от работы, выстройте процесс заранее. Если вы разработчик и тестируете приложение на эмуляторе, отключайте физический телефон на время отладки или сразу привыкните к синтаксису с -s — он быстро входит в привычку.
При пакетной работе с несколькими девайсами удобно обернуть команды в цикл скрипта, который перебирает серийные номера из вывода adb devices и выполняет действие на каждом по очереди. Так вы избежите и ошибки, и ручного копирования идентификаторов.
- 🧹 Периодически очищайте список сетевых подключений командой
adb disconnect; - 🏷️ Записывайте серийные номера своих рабочих устройств, чтобы не искать их каждый раз;
- ⚙️ В скриптах всегда используйте
-sилиANDROID_SERIAL— это делает их устойчивыми к изменению окружения; - 🔁 После «странного» поведения ADB первым делом перезапускайте сервер — это безопасно и решает большинство накопленных проблем.
Часто задаваемые вопросы
Можно ли выполнить команду сразу на всех подключённых устройствах?
В стандартном ADB такой встроенной опции нет. Нужно вручную перебрать серийные номера из вывода adb devices и выполнить команду с флагом -s для каждого устройства по очереди — обычно это автоматизируют скриптом.
Почему adb devices показывает статус unauthorized?
Это значит, что на смартфоне не подтверждён запрос на разрешение USB-отладки. Разблокируйте экран устройства и подтвердите диалог. Если диалог не появляется, отзовите авторизации в настройках разработчика и подключите кабель заново.
Чем отличаются флаги -d и -e?
Флаг -d направляет команду на единственное устройство, подключённое по USB, а -e — на единственный запущенный эмулятор. Если устройств соответствующего типа несколько, оба флага вернут ту же ошибку more than one device/emulator.
Помогает ли переустановка драйверов при этой ошибке?
Нет, драйверы здесь ни при чём: ADB успешно видит все устройства, проблема только в отсутствии указания цели. Переустановка драйверов нужна, когда устройство вообще не отображается в adb devices.
Что делать, если устройство отображается как offline?
Попробуйте перезапустить adb-сервер командами adb kill-server и adb start-server, затем переподключите кабель. Если не помогло — отключите и снова включите отладку по USB в настройках разработчика на смартфоне. Также проверьте сам кабель и USB-порт: нестабильный контакт — частая причина статуса offline.