Команда adb install app.apk завершается строкой error: more than one device/emulator — это значит, что утилита adb.exe видит два и более подключённых Android-устройства и не может понять, к какому из них адресована команда. Ошибка не связана с поломкой смартфона или драйверов: ADB просто отказывается выполнять действие, пока вы явно не укажете целевое устройство.
Типичные сценарии — одновременно запущенный эмулятор и подключённый по USB смартфон, два телефона на одном ПК, устройство, доступное и по USB, и по Wi-Fi, либо «зависший» виртуальный девайс, который остался в списке после закрытия эмулятора. Ниже разберём, как проверить список подключений и как правильно адресовать команды.
Почему ADB сообщает о нескольких устройствах
Утилита Android Debug Bridge работает по принципу «один сервер — много клиентов». Сервер ADB на компьютере ведёт список всех видимых ему устройств: физических (по USB или TCP/IP) и виртуальных (эмуляторы Android Studio, BlueStacks, LDPlayer и другие). Когда в списке больше одной записи, любая команда без явного указания адресата считается неоднозначной.
К возможным причинам появления лишних записей относятся:
- 📱 Одновременно подключены смартфон и запущен эмулятор Android Studio;
- 🔌 К ПК подключено два и более физических устройства;
- 🌐 Устройство видно дважды — по USB и по Wi-Fi (
adb connect); - 👻 «Призрачное» устройство осталось в списке после некорректного закрытия эмулятора;
- 🛠️ Сторонний эмулятор (например, BlueStacks или Nox) держит собственное ADB-подключение.
Отдельный случай — запись со статусом offline или unauthorized. Она тоже считается устройством и провоцирует ошибку, хотя фактически недоступна для команд.
Шаг 1. Проверяем список подключённых устройств
Первая диагностическая проверка — команда, показывающая всё, что видит сервер ADB:
adb devices
В ответ вы получите список вида серийный номер — статус. Нормальный рабочий статус — device. Если строк две и больше, именно это и является причиной ошибки. Запишите или скопируйте серийные номера (для эмуляторов они выглядят как emulator-5554, для TCP/IP-подключений — как 192.168.x.x:5555).
Если в списке есть устройство со статусом unauthorized, проверьте экран смартфона: там должен быть запрос на разрешение отладки по USB. Подтвердите его, при желании отметив «Всегда разрешать с этого компьютера». Статус offline обычно лечится перезапуском сервера, о чём ниже.
Шаг 2. Указываем целевое устройство явно
Самый универсальный способ устранить неоднозначность — флаг -s с серийным номером нужного устройства. Он ставится сразу после adb и перед основной командой:
adb -s emulator-5554 install app.apk
adb -s 1234567890ABCDEF shell
Для частых сценариев есть сокращённые варианты. Флаг -d направляет команду единственному USB-устройству, а -e — единственному эмулятору. Они удобны, когда подключений ровно два и они разного типа; если устройств одного типа несколько, сработает только -s.
| Команда | Куда направлена | Когда использовать |
|---|---|---|
adb -s <serial> | Устройство с указанным серийником | Универсальный способ, работает всегда |
adb -d | Единственное USB-устройство | Один смартфон по USB + эмулятор |
adb -e | Единственный эмулятор | Один эмулятор + смартфон |
adb devices | — | Просмотр списка и серийных номеров |
Шаг 3. Убираем лишние и «зависшие» подключения
Если постоянно писать серийный номер неудобно, проще сократить список до одного устройства. Начните с безопасных действий: отключите второй смартфон от USB, закройте ненужный эмулятор, разорвите Wi-Fi-подключение командой adb disconnect.
Когда запись остаётся в списке даже после отключения устройства, помогает перезапуск сервера ADB:
adb kill-server
adb start-server
adb devices
Для TCP/IP-подключений, которые «зависли», используйте точечное отключение: adb disconnect 192.168.x.x:5555. Если эмулятор закрыт, но запись emulator-5554 не исчезает, проверьте, не остался ли в диспетчере задач процесс эмулятора, и завершите его.
☑️ Порядок действий при ошибке more than one device/emulator
⚠️ Внимание: команда adb kill-server разрывает все текущие ADB-сессии, включая те, что используются Android Studio или другими инструментами. Активные операции (установка, прошивка, логирование) прервутся — завершите их заранее.
Конфликты с эмуляторами и сторонними программами
Эмуляторы вроде BlueStacks, LDPlayer, Nox и MuMu используют собственные экземпляры ADB и могут держать подключение даже в свёрнутом состоянии. Из-за этого в adb devices появляются записи, которых вы «не подключали». Проверьте системный трей и диспетчер задач: если эмулятор работает в фоне, закройте его полностью.
Ещё один источник проблем — конфликт версий adb.exe. Если в системе несколько копий утилиты (из Android SDK, из папки эмулятора, из сторонних инструментов), разные серверы могут «драться» за порт 5037. Признак — сервер постоянно перезапускается или список устройств ведёт себя непредсказуемо. В таком случае оставьте одну актуальную версию ADB из Android SDK Platform-Tools и вызывайте её по полному пути или через переменную PATH.
Автоматизация: как не указывать устройство каждый раз
Для скриптов и регулярной работы удобно задать устройство по умолчанию через переменную окружения ANDROID_SERIAL. Пока она установлена, все команды adb без флага -s будут адресоваться именно этому устройству. В Windows переменная задаётся через «Параметры → Система → О системе → Дополнительные параметры системы → Переменные среды» или командой set ANDROID_SERIAL=серийный_номер в текущей сессии командной строки.
Учтите ограничение: переменная действует до конца сессии (при задании через set) либо до её удаления из системы. Если вы часто переключаетесь между устройствами, надёжнее явный флаг -s в каждой команде — так скрипт не «выстрелит» командой не в тот смартфон.
Почему эмуляторы занимают порты 5554–5585
Эмулятор Android резервирует пару портов: чётный (5554, 5556...) для консоли и следующий нечётный для ADB. Серийное имя emulator-5554 как раз отражает номер консольного порта. Поэтому при нескольких запущенных эмуляторах вы увидите emulator-5554, emulator-5556 и так далее — каждый из них для ADB является отдельным устройством.
⚠️ Внимание: не выполняйте деструктивные команды (adb shell pm uninstall,adb reboot bootloader, wipe-команды) «вслепую», пока в списке несколько устройств. Сначала добейтесь однозначности через-s, иначе есть риск применить действие не к тому аппарату.
Когда ошибка не исчезает
Если после всех шагов ADB по-прежнему видит лишнее устройство, проверьте следующее. Убедитесь, что работаете с актуальной версией Platform-Tools — старые сборки хуже обрабатывают переподключения. Попробуйте другой USB-порт и кабель: нестабильное соединение порождает «двойные» записи при переподключении. На смартфоне можно отозвать авторизацию отладки («Отменить авторизацию USB-отладки» в параметрах разработчика) и подключиться заново.
В качестве крайней меры перезагрузите компьютер: это гарантированно завершит все зависшие процессы adb.exe и эмуляторов. После перезагрузки подключите только одно устройство и проверьте вывод adb devices — список должен содержать ровно одну строку со статусом device.
Частые вопросы
Что означает ошибка more than one device/emulator?
ADB обнаружил несколько подключённых устройств (физических или виртуальных) и не может выбрать, к какому применить команду. Нужно указать устройство явно через adb -s <серийный номер> или оставить подключённым только одно.
Как узнать серийный номер устройства для флага -s?
Выполните adb devices — в первом столбце будут перечислены серийные номера всех подключений. Для эмулятора это emulator-5554, для Wi-Fi-подключения — адрес вида IP:порт, для USB — буквенно-цифровой идентификатор.
Устройство одно, но ошибка всё равно появляется. Почему?
Скорее всего, в списке есть «невидимое» второе подключение: фоновый эмулятор, зависшая TCP/IP-сессия или запись со статусом offline. Проверьте adb devices, закройте эмуляторы и перезапустите сервер командами adb kill-server и adb start-server.
Чем отличаются флаги -d, -e и -s?
-d направляет команду единственному USB-устройству, -e — единственному эмулятору, а -s — устройству с конкретным серийным номером. Флаги -d и -e работают, только если устройств данного типа ровно одно; -s универсален.
Можно ли задать устройство по умолчанию, чтобы не писать -s каждый раз?
Да, через переменную окружения ANDROID_SERIAL с серийным номером нужного устройства. Все команды adb без флага будут адресоваться ему, пока переменная установлена.