ADB shell error: closed — почему соединение обрывается и как это исправить

Сообщение 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

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

Сброс авторизации USB-отладки

Одна из частых причин — повреждённая или устаревшая пара ключей авторизации. Устройство хранит отпечаток RSA-ключа компьютера, и если ключи рассинхронизировались (например, после обновления платформенных инструментов), демон может закрывать соединение при попытке открыть shell.

Порядок действий такой: на устройстве откройте Настройки → Для разработчиков и найдите пункт вроде Отозвать авторизацию USB-отладки (точное название зависит от оболочки производителя). Затем отключите и снова включите USB-отладку, переподключите кабель и подтвердите запрос на экране, отметив «Всегда разрешать с этого компьютера».

Если запрос не появляется, удалите старые ключи на компьютере. Они хранятся в папке .android в профиле пользователя — файлы adbkey и adbkey.pub. После их удаления и перезапуска сервера ключи сгенерируются заново, а устройство снова покажет диалог авторизации.

⚠️ Внимание: отзыв авторизации и удаление ключей затронут все подключённые ранее компьютеры и устройства. Если вы используете ADB на нескольких машинах, процедуру подтверждения придётся повторить на каждой.
📊 Что помогло вам устранить error
closed?:Перезапуск ADB-сервера
Отзыв авторизации и повторное подтверждение
Замена кабеля или порта
Обновление Platform Tools

Проверка кабеля, портов и драйверов

Физический уровень — недооценённый источник проблем. Кабель, который нормально заряжает телефон, может не иметь стабильных линий данных или иметь повреждение, из-за которого соединение рвётся под нагрузкой. Если 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: попробуйте перезагрузку, сброс настроек разработчика и, как крайний вариант после резервной копии, обратитесь к документации производителя вашей модели.