Сообщение error: closed в ответ на команду adb shell означает, что демон ADB на устройстве разорвал сессию до того, как удалось открыть интерактивный терминал: устройство в списке adb devices при этом может отображаться, но любая команда мгновенно завершается с той же ошибкой. Чаще всего причина кроется не в самой команде, а в состоянии соединения: сброшенная авторизация RSA-ключа, конфликт запущенных экземпляров ADB-сервера, нестабильный USB-порт или несовместимость версий утилиты и прошивки устройства.
Разберёмся, что именно означает эта ошибка, как быстро локализовать источник проблемы и какие действия помогают восстановить соединение без переустановки всей цепочки инструментов. Материал ориентирован на Windows, но большинство шагов применимы и к Linux, и к macOS — отличается только способ перезапуска сервера и работы с драйверами.
Что означает ошибка error: closed
ADB работает по клиент-серверной схеме: на компьютере запущен ADB-сервер, который держит соединение с демоном adbd на Android-устройстве. Когда вы вводите adb shell, клиент просит сервер открыть поток к демону. Сообщение error: closed говорит о том, что этот поток был закрыт удалённой стороной — то есть самим устройством или оборвавшимся транспортом.
Важно отличать эту ошибку от похожих сообщений. device unauthorized означает, что на смартфоне не подтверждён запрос на отладку, а device offline — что устройство отвечает, но сессия не установлена. Ошибка closed появляется уже после попытки открыть канал, поэтому диагностика строится вокруг стабильности соединения и работы демона на устройстве.
Типичный признак: команда adb devices показывает устройство со статусом device, но adb shell, adb pull или adb install завершаются с error: closed. Иногда ошибка возникает не сразу, а через несколько секунд работы — это указывает на физическую нестабильность канала.
Первичная диагностика: с чего начать
Прежде чем менять настройки, выполните короткую проверку, которая локализует проблему. Начните с перезапуска сервера — это безопасно и часто снимает зависшие сессии:
adb kill-server
adb start-server
adb devices
Если после перезапуска устройство видно, но adb shell снова возвращает error: closed, проверьте саму команду отдельно от интерактивного режима. Команда adb shell echo test выполняет одно действие без открытия терминала: если она работает, а интерактивный adb shell — нет, проблема может быть связана с эмуляцией терминала или оболочкой на устройстве.
- 🔌 Подключите кабель напрямую к порту компьютера, минуя хабы и удлинители.
- 📱 Проверьте, что на экране устройства нет неподтверждённого запроса «Разрешить отладку по USB».
- 🔄 Перезапустите ADB-сервер командами
adb kill-serverиadb start-server. - 🔎 Выполните
adb devicesи убедитесь, что статус устройства —device, а неofflineилиunauthorized. - 💻 Попробуйте другой USB-порт, желательно на задней панели ПК.
☑️ Быстрая проверка при error
Сброс авторизации USB-отладки
Одна из частых причин — повреждённая или устаревшая пара ключей авторизации. Устройство хранит отпечаток RSA-ключа компьютера, и если ключи рассинхронизировались (например, после обновления платформенных инструментов), демон может закрывать соединение при попытке открыть shell.
Порядок действий такой: на устройстве откройте Настройки → Для разработчиков и найдите пункт вроде Отозвать авторизацию USB-отладки (точное название зависит от оболочки производителя). Затем отключите и снова включите USB-отладку, переподключите кабель и подтвердите запрос на экране, отметив «Всегда разрешать с этого компьютера».
Если запрос не появляется, удалите старые ключи на компьютере. Они хранятся в папке .android в профиле пользователя — файлы adbkey и adbkey.pub. После их удаления и перезапуска сервера ключи сгенерируются заново, а устройство снова покажет диалог авторизации.
⚠️ Внимание: отзыв авторизации и удаление ключей затронут все подключённые ранее компьютеры и устройства. Если вы используете ADB на нескольких машинах, процедуру подтверждения придётся повторить на каждой.
Проверка кабеля, портов и драйверов
Физический уровень — недооценённый источник проблем. Кабель, который нормально заряжает телефон, может не иметь стабильных линий данных или иметь повреждение, из-за которого соединение рвётся под нагрузкой. Если error: closed появляется через несколько секунд после начала передачи данных, первым делом замените кабель на заведомо исправный.
На Windows отдельно проверьте драйвер. Откройте Диспетчер устройств и найдите устройство при подключённом кабеле: оно должно определяться как Android ADB Interface или аналогичная запись без жёлтого восклицательного знака. Если устройство отображается с ошибкой, установите драйвер от производителя смартфона или универсальный Google USB Driver из состава SDK.
Стоит учитывать и питание порта. На некоторых ноутбуках энергосбережение USB отключает порт в момент простоя, что выглядит как внезапный обрыв сессии. Проверьте в настройках электропитания Windows, что отключение USB для экономии энергии выключено, либо протестируйте соединение на другом компьютере — так вы быстро отделите аппаратную проблему от программной.
Конфликты ADB-серверов и версий
Ошибка closed нередко возникает, когда на компьютере работают два экземпляра ADB разных версий: например, один из состава Android Studio, а другой — из отдельно скачанных Platform Tools или комплекта какой-либо программы для прошивки. Сервер, запущенный первым, занимает порт, а клиент другой версии не может корректно с ним работать.
Проверьте, какая версия используется, командой adb version и сравните её с тем, что лежит в переменной PATH. В диспетчере задач завершите все процессы adb.exe, затем запустите сервер из одного конкретного каталога Platform Tools. Сторонние утилиты (менеджеры смартфонов, прошивальщики, эмуляторы) могут запускать свой ADB в фоне — временно закройте их и проверьте соединение снова.
Обновление самих Platform Tools тоже имеет смысл: старые версии клиента могут некорректно работать с демоном на новых версиях Android. Скачивайте пакет только с официального сайта для разработчиков Android — сторонние сборки иногда содержат устаревшие или модифицированные бинарные файлы.
| Симптом | Вероятная причина | Что проверить |
|---|---|---|
error: closed сразу при adb shell | Сброшенная авторизация, конфликт версий | Отзыв авторизации, adb version |
| Ошибка через несколько секунд работы | Кабель, порт, энергосбережение USB | Другой кабель и порт, настройки питания |
Устройство offline в списке | Устаревший клиент ADB | Обновление Platform Tools |
Работает adb shell echo, но не интерактивный shell | Проблема оболочки на устройстве | Перезагрузка устройства, другая команда |
| Ошибка только при запущенных сторонних программах | Конфликт экземпляров adb.exe | Завершить лишние процессы, один сервер |
Когда проблема на стороне устройства
Иногда виноват не компьютер, а сам смартфон. Демон adbd может зависнуть после сбоя прошивки, конфликта с root-утилитами или неудачного обновления системы. Самое простое действие — перезагрузка устройства: она перезапускает демон и очищает зависшие сессии.
Если перезагрузка не помогает, временно отключите и снова включите режим разработчика целиком, а затем заново активируйте USB-отладку. На устройствах с root-доступом проверьте, не блокируют ли соединение модули типа Magisk или сторонние ADB-надстройки — попробуйте временно отключить их и повторить подключение.
⚠️ Внимание: не выполняйте сброс настроек устройства и не перепрошивайте его только из-за ошибки ADB. Это крайняя мера, оправданная лишь тогда, когда ошибка воспроизводится с разными компьютерами, кабелями и после всех программных проверок.
ADB по Wi-Fi как обходной вариант
Если USB-соединение стабильно не работает, на Android 11 и новее доступна беспроводная отладка: включите её в настройках разработчика и выполните сопряжение через adb pair с кодом из меню устройства. Это позволяет работать с shell без кабеля, но требует, чтобы оба устройства были в одной сети. Точные названия пунктов зависят от версии системы.
Дополнительные методы и логирование
Для глубокой диагностики полезно посмотреть, что происходит на транспортном уровне. Запуск сервера с расширенным логом иногда показывает, на каком этапе рвётся соединение:
adb kill-server
set ADB_TRACE=all
adb start-server
Переменная ADB_TRACE включает подробный вывод в консоль (в Linux и macOS используйте export ADB_TRACE=all). После диагностики не забудьте отключить трассировку, иначе вывод будет замедлять работу. Если в логе видны ошибки чтения/записи по USB, это дополнительный аргумент в пользу аппаратной причины.
Ещё один вариант — проверить устройство с другого компьютера или с другой операционной системы. Если там adb shell работает без ошибок, проблема точно локализована в конфигурации вашего ПК: драйверах, антивирусе, блокирующем локальные порты, или конфликтующем ПО.
- 🧪 Протестируйте устройство на другом компьютере — это разделяет аппаратную и программную причины.
- 🛡️ Временно отключите антивирус или добавьте
adb.exeв исключения — некоторые защитные решения рвут локальные соединения. - 📋 Включите
ADB_TRACE=allи изучите, на каком этапе закрывается канал. - 📶 Попробуйте беспроводную отладку, если она поддерживается вашей версией Android.
Частые вопросы
Почему adb devices показывает устройство, но adb shell выдаёт error: closed?
Команда adb devices лишь опрашивает транспорт, а adb shell открывает полноценный канал к демону на устройстве. Если авторизация сброшена, версии клиента и демона конфликтуют или соединение нестабильно, канал закрывается сразу после открытия — отсюда и ошибка.
Помогает ли переустановка драйверов при этой ошибке?
Да, если проблема на стороне Windows. Удалите устройство в диспетчере устройств, отключите кабель, перезагрузите ПК и установите драйвер заново — от производителя смартфона или Google USB Driver. Если ошибка воспроизводится на другом компьютере, драйверы ни при чём.
Может ли антивирус вызывать error: closed?
Может. Некоторые антивирусы и файрволы контролируют локальные соединения и могут обрывать связь между ADB-клиентом и сервером. Проверьте, добавив adb.exe в исключения или временно отключив защиту на время диагностики.
Ошибка появляется только через несколько секунд работы shell — что это?
Такой симптом почти всегда указывает на физический уровень: кабель с повреждёнными линиями данных, нестабильный порт или энергосбережение USB, отключающее порт. Замените кабель, подключитесь к другому порту и отключите экономию энергии для USB в настройках Windows.
Что делать, если ничего не помогло?
Проверьте устройство на другом компьютере с другим кабелем. Если ошибка воспроизводится везде — вероятно, проблема в прошивке или демоне adbd: попробуйте перезагрузку, сброс настроек разработчика и, как крайний вариант после резервной копии, обратитесь к документации производителя вашей модели.