Подключение устройства (проводное и беспроводное)

Рейтинг: 60.1% · 14 голосов
Полный курс по Android Debug Bridge: установка, подключение, shell, логи, dumpsys, автоматизация, root, беспроводная отладка. Уроки по главам с обсуждением.
Ответить
Аватара пользователя
android_roman
Сообщения: 45
Зарегистрирован: 11 май 2026, 05:31

Подключение устройства (проводное и беспроводное)

Сообщение android_roman »

АкадемияADB: Android Debug BridgeГлава 3 из 29
Оглавление курса (29)
  1. Введение в Android Debug Bridge
  2. Установка и настройка рабочей среды
  3. Подключение устройства (проводное и беспроводное) (вы здесь)
  4. Базовые команды ADB и управление сервером
  5. Команды состояния и перезагрузки
  6. Навигация по файловой системе
  7. Управление пакетами приложений
  8. Логирование с помощью logcat
  9. Системные дампы и диагностика (dumpsys)
  10. Анализ производительности в реальном времени
  11. Эмуляция ввода (input)
  12. Управление Activity и Intent (am)
  13. Работа с оконным менеджером (wm)
  14. Захват экрана и запись видео
  15. Root-доступ и его применение
  16. Модификация системных настроек через settings
  17. Команды для поставщиков контента (content)
  18. Резервное копирование и восстановление (backup)
  19. Проброс портов и туннелирование
  20. Беспроводная отладка (Wi-Fi)
  21. Взаимодействие с эмуляторами
  22. Написание скриптов на Bash/CMD/PowerShell
  23. ADB в языках программирования
  24. Автоматизация тестирования с ADB
  25. Безопасность и лучшие практики
  26. ADB на Android TV, Wear OS и IoT
  27. Восстановление и низкоуровневые операции
  28. Расширенные возможности оболочки и инструменты
  29. Отладка самого ADB и устранение неполадок
В прошлой главе вы поставили Platform Tools и убедились, что

Код: Выделить всё

adb version
отвечает чем-то вроде

Код: Выделить всё

Android Debug Bridge version 1.0.41
Version 37.0.0-14910828
. Клиент и сервер есть, не хватает третьего участника, демона adbd на самом устройстве. Эта глава про то, как телефон решает, пускать ли ваш компьютер внутрь, и что делать, когда устройств на столе несколько.

Включение режима отладки по USB:

По умолчанию Android с adb не разговаривает вообще. Сначала открываем скрытый раздел "Для разработчиков". Алгоритм не меняется лет десять: Настройки > О телефоне > семь раз подряд тапнуть по пункту "Номер сборки". После третьего-четвертого тапа появится счетчик, в конце тост "Вы стали разработчиком!". Дальше нюансы прошивок:

- Чистый Android 14/15 (Pixel): раздел появляется в Настройки > Система > Для разработчиков.
- Samsung One UI: "Номер сборки" спрятан глубже, О телефоне > Сведения о ПО, а сам раздел вылезает в корне настроек.
- Xiaomi (HyperOS/MIUI): тапать нужно по пункту "Версия ОС" (на старых MIUI по "Версия MIUI"), раздел живет в Расширенные настройки > Для разработчиков. Отдельная боль Xiaomi: пункт "Отладка по USB (Настройки безопасности)" требует входа в Mi-аккаунт и SIM-карту в слоте, иначе он серый. Для обычной отладки он не нужен, но без него не работает эмуляция ввода из главы 11.

В разделе включаем переключатель "Отладка по USB", подтверждаем предупреждение, втыкаем кабель. Проверяем:

Код: Выделить всё

adb devices
List of devices attached
RF8N20YJ4XZ	unauthorized
Статус unauthorized на этом этапе нормален, к нему вернемся через минуту.

Опции разработчика, которые стоит включить сразу:

- "Не выключать экран" (Stay awake): экран не гаснет на зарядке. Экономит нервы, потому что диалог авторизации показывается только на разблокированном экране.
- "Конфигурация USB по умолчанию" > "Передача файлов". Часть кабелей и хабов в режиме "Только зарядка" вообще не дают линии данных, а некоторые прошивки не показывают диалог авторизации, пока USB-режим не переключен на MTP.
- "Отключить тайм-аут авторизации ADB" (Android 11+). По умолчанию система отзывает авторизацию хоста, который не подключался 7 дней. Для личного ноутбука удобно отключить, для общего стенда лучше оставить.
- "Беспроводная отладка": отдельный переключатель (Android 11+), он не дублируется тумблером отладки по USB.

Авторизация через RSA-отпечаток:

При первом запуске adb-клиент генерирует пару ключей RSA-2048:

Код: Выделить всё

~/.android/adbkey        приватный ключ (PEM)
~/.android/adbkey.pub    публичный ключ
На Windows это %USERPROFILE%\.android\. При первом подключении adbd шлет челлендж, хост подписывает его приватным ключом, а на экране устройства появляется диалог "Разрешить отладку по USB?" с отпечатком ключа. Отпечаток, это MD5 публичного ключа, и его реально стоит сверять, если телефон корпоративный. На Linux/macOS считается так:

Код: Выделить всё

awk '{print $1}' ~/.android/adbkey.pub | openssl base64 -A -d | openssl md5 -c
MD5(stdin)= 4f:8d:41:1f:77:0a:e9:19:97:eb:17:be:14:de:d9:49
Если поставить галку "Всегда разрешать с этого компьютера", публичный ключ сохранится на устройстве в файле

Код: Выделить всё

/data/misc/adb/adb_keys
, по одному ключу base64 на строку, в конце каждой строки комментарий вида user@hostname. Прочитать файл можно только с root (глава 15):

Код: Выделить всё

adb shell su -c "cat /data/misc/adb/adb_keys"
Удалите adbkey на компьютере, и при следующем запуске adb сгенерирует новую пару, устройство спросит разрешение заново. Это же объясняет, почему после переустановки ОС или смены машины в CI телефоны "внезапно" требуют авторизацию. Если ключей несколько (например, общий ключ фермы устройств), путь к дополнительным указывается переменной окружения ADB_VENDOR_KEYS, через двоеточие на Linux/macOS и точку с запятой на Windows.

Управление доверенными хостами и отзыв доступа:

Штатный механизм один и грубый: Для разработчиков > "Отозвать доступ для отладки по USB". Он просто удаляет adb_keys целиком, доверие теряют все компьютеры сразу, каждый при следующем подключении снова покажет диалог. Плюс автоотзыв через 7 дней простоя, о котором выше.

Выборочно отозвать один хост можно только с root, отредактировав adb_keys. Комментарий user@hostname в конце строки как раз для этого:

Код: Выделить всё

adb shell su -c "sed -i '/khovanskiy@old-laptop/d' /data/misc/adb/adb_keys"
После правки передерните тумблер отладки по USB, чтобы adbd гарантированно перечитал файл.

Беспроводное подключение:

Способа два. Старый, через TCP-режим adbd, работает на любом Android, но требует первого подключения по кабелю:

Код: Выделить всё

adb tcpip 5555
restarting in TCP mode port: 5555
Узнаем IP телефона (он должен быть в той же сети, что и компьютер):

Код: Выделить всё

adb shell ip route
192.168.1.0/24 dev wlan0 proto kernel scope link src 192.168.1.42
Кабель можно вынимать:

Код: Выделить всё

adb connect 192.168.1.42:5555
connected to 192.168.1.42:5555
Режим не переживает перезагрузку, а вернуть устройство на USB-транспорт можно командой . Держать порт 5555 открытым в кафе или коворкинге плохая идея: авторизация по RSA никуда не девается, но дергать ваш телефон сможет любой сосед по сети.

Новый способ, беспроводная отладка с сопряжением, появился в Android 11 и кабеля не требует вовсе. На телефоне: Для разработчиков > Беспроводная отладка > "Подключить устройство с помощью кода". Экран покажет шестизначный код и адрес с портом сопряжения:

Код: Выделить всё

adb pair 192.168.1.42:37189
Enter pairing code: 482915
Successfully paired to 192.168.1.42:37189 [guid=adb-RF8N20YJ4XZ-Vr8sWp]
Сопряжение делается один раз. Дальше подключаемся, но уже к другому порту, тому, что написан на главном экране беспроводной отладки:

Код: Выделить всё

adb connect 192.168.1.42:42137
connected to 192.168.1.42:42137
Порт подключения меняется после каждой перезагрузки, это не баг. Найти устройство в сети без глаз помогает mDNS:

Код: Выделить всё

adb mdns services
List of discovered mdns services
adb-RF8N20YJ4XZ-Vr8sWp	_adb-tls-connect._tcp	192.168.1.42:42137
Отключение:

Код: Выделить всё

adb disconnect 192.168.1.42:42137
, без аргумента отвалятся все сетевые устройства. Автопереподключение, скрипты вокруг плавающего порта и подводные камни роутеров разберем отдельно в главе 20.

Работа с несколькими устройствами, флаг -s:

Реальный стол разработчика: телефон по кабелю, второй по Wi-Fi, эмулятор из главы 21. Смотрим расширенный список:

Код: Выделить всё

adb devices -l
List of devices attached
RF8N20YJ4XZ            device usb:1-2.3 product:dm1qxxx model:SM_S911B device:dm1q transport_id:1
192.168.1.42:42137     device product:venus_ru model:M2011K2G device:venus transport_id:2
emulator-5554          device product:sdk_gphone64_x86_64 model:sdk_gphone64_x86_64 device:emu64xa transport_id:3
Любая команда без указания цели теперь падает:

Код: Выделить всё

adb shell getprop ro.build.version.release
adb: more than one device/emulator
Лекарство, флаг -s с серийником, причем флаг идет до подкоманды:

Код: Выделить всё

adb -s RF8N20YJ4XZ shell getprop ro.build.version.release
15
Для сетевого устройства серийником служит пара ip:port, для эмулятора имя вида emulator-5554. Есть и сокращения: -d выбирает единственное USB-устройство (упадет, если их два), -e единственный эмулятор, -t адресует по transport_id из вывода выше:

Код: Выделить всё

adb -d install app-debug.apk
adb -e logcat -b crash
adb -t 2 shell
В скриптах удобнее переменная окружения ANDROID_SERIAL, тогда -s не нужен в каждой строке:

Код: Выделить всё

export ANDROID_SERIAL=RF8N20YJ4XZ
adb shell    # уйдет на Samsung
Явный -s всегда побеждает переменную. И не забывайте, что ANDROID_SERIAL, прописанный когда-то в .bashrc, потом месяцами маскируется под "сломанный adb".

Частые ошибки и обход:

Устройства нет в списке вообще. Сначала кабель: зарядные шнуры без линий данных, это классика. Потом USB-режим на телефоне (переключить на "Передача файлов"). На Windows проверьте диспетчер устройств: если там неопознанное устройство, нужен драйвер производителя (у Samsung и Xiaomi свои) или Google USB Driver. На Linux типичная картина:

Код: Выделить всё

adb devices
List of devices attached
????????????	no permissions (user in plugdev group; are your udev rules wrong?)
Чинится правилом udev. Vendor ID смотрим через lsusb (18d1 у Google, 04e8 у Samsung, 2717 у Xiaomi):

Код: Выделить всё

# /etc/udev/rules.d/51-android.rules
SUBSYSTEM=="usb", ATTR{idVendor}=="2717", MODE="0660", GROUP="plugdev"

Код: Выделить всё

sudo udevadm control --reload-rules
sudo udevadm trigger
И передернуть кабель. На Debian/Ubuntu проще поставить пакет android-sdk-platform-tools-common, правила приедут готовые.

Вечный unauthorized. Диалог однажды смахнули, и он больше не показывается. Лечение: на телефоне "Отозвать доступ для отладки по USB", на компьютере

Код: Выделить всё

adb kill-server
, переподключить кабель при разблокированном экране, диалог появится заново.

Статус offline. Чаще всего конфликт версий: где-то в системе живет второй, старый adb (его таскают с собой эмуляторы, Vysor, scrcpy из дистрибутивных репозиториев), и он перехватывает сервер. Убейте все процессы adb, проверьте, что в PATH первым стоит свежий Platform Tools, затем

Код: Выделить всё

adb kill-server && adb devices
.

failed to authenticate при adb connect. Обычно роутер с изоляцией клиентов (AP isolation) или гостевая сеть: телефон и компьютер друг друга не видят. Проверяется обычным ping до IP телефона.

В следующей главе разберем сам жизненный цикл сервера adb, его порты и то, что на самом деле происходит между kill-server и start-server.
👍9 ❤️ 🔥 😄 🤔
✔ Лучший ответ сформирован автоматически — nixos_addict
android_roman писал(а):По умолчанию система отзывает авторизацию хоста, который не подключался 7 дней. так вот почему наш стендовый пиксель каждый понедельник просил авторизацию заново, он на выходных просто лежал выключенный от хоста. Отключил таймаут, неделя полет нормальный. Вопрос: а этот таймаут на беспроводные сопряжения тоже действует или там своя кухня?
Перейти к ответу →
Аватара пользователя
nixos_addict
Сообщения: 1
Зарегистрирован: 11 май 2026, 07:49

Re: Подключение устройства (проводное и беспроводное)

Сообщение nixos_addict »

✔ Лучший ответ — сформирован автоматически
android_roman писал(а):По умолчанию система отзывает авторизацию хоста, который не подключался 7 дней.
так вот почему наш стендовый пиксель каждый понедельник просил авторизацию заново, он на выходных просто лежал выключенный от хоста. Отключил таймаут, неделя полет нормальный. Вопрос: а этот таймаут на беспроводные сопряжения тоже действует или там своя кухня?
👍 ❤️ 🔥 😄 🤔
Аватара пользователя
llamapro
Сообщения: 1
Зарегистрирован: 11 май 2026, 14:36

Re: Подключение устройства (проводное и беспроводное)

Сообщение llamapro »

На POCO X6 без симки пункт "Отладка по USB (Настройки безопасности)" так и остается серым, даже с Mi-аккаунтом. Воткнул симку, и все равно пишет подождите, активация возможна позже. Подождал сутки, дало включить. Так что если у кого Xiaomi и не включается, это не вы тупые, это у них защита такая. Обычная отладка при этом работает сразу, без этих танцев.
👍1 ❤️1 🔥2 😄 🤔
Аватара пользователя
mimulder80
Сообщения: 1
Зарегистрирован: 20 май 2026, 09:17

Re: Подключение устройства (проводное и беспроводное)

Сообщение mimulder80 »

Чуть не написал что у вас ошибка про -d, потом перечитал. Подтверждаю из практики: с двумя телефонами на USB adb -d честно падает с error: more than one device, так что -d спасает только в связке кабель + эмулятор. И спасибо за абзац про ANDROID_SERIAL в bashrc, у меня ровно так adb "сломался" на полгода, я уже platform-tools三 раза переставлял. поправка: три раза, раскладка глючит
👍 ❤️ 🔥 😄 🤔
Аватара пользователя
elixir2024
Сообщения: 1
Зарегистрирован: 13 май 2026, 05:04

Re: Подключение устройства (проводное и беспроводное)

Сообщение elixir2024 »

а adb pair обязательно с кодом делать? видел в студии QR вариант, это то же самое или другой механизм? и можно ли спарить телефон сразу с двумя компами, или второй затрет первого
👍 ❤️1 🔥1 😄 🤔1
Ответить
← Предыдущая глава
Установка и настройка рабочей среды
Следующая глава →
Базовые команды ADB и управление сервером

Все главы курса «ADB: Android Debug Bridge»

Поделиться темой: ✈ Telegram VK

Вернуться в «ADB: Android Debug Bridge»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость