Код: Выделить всё
adb versionКод: Выделить всё
Android Debug Bridge version 1.0.41
Version 37.0.0-14910828Включение режима отладки по 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Опции разработчика, которые стоит включить сразу:
- "Не выключать экран" (Stay awake): экран не гаснет на зарядке. Экономит нервы, потому что диалог авторизации показывается только на разблокированном экране.
- "Конфигурация USB по умолчанию" > "Передача файлов". Часть кабелей и хабов в режиме "Только зарядка" вообще не дают линии данных, а некоторые прошивки не показывают диалог авторизации, пока USB-режим не переключен на MTP.
- "Отключить тайм-аут авторизации ADB" (Android 11+). По умолчанию система отзывает авторизацию хоста, который не подключался 7 дней. Для личного ноутбука удобно отключить, для общего стенда лучше оставить.
- "Беспроводная отладка": отдельный переключатель (Android 11+), он не дублируется тумблером отладки по USB.
Авторизация через RSA-отпечаток:
При первом запуске adb-клиент генерирует пару ключей RSA-2048:
Код: Выделить всё
~/.android/adbkey приватный ключ (PEM)
~/.android/adbkey.pub публичный ключКод: Выделить всё
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Код: Выделить всё
adb shell su -c "cat /data/misc/adb/adb_keys"Управление доверенными хостами и отзыв доступа:
Штатный механизм один и грубый: Для разработчиков > "Отозвать доступ для отладки по USB". Он просто удаляет adb_keys целиком, доверие теряют все компьютеры сразу, каждый при следующем подключении снова покажет диалог. Плюс автоотзыв через 7 дней простоя, о котором выше.
Выборочно отозвать один хост можно только с root, отредактировав adb_keys. Комментарий user@hostname в конце строки как раз для этого:
Код: Выделить всё
adb shell su -c "sed -i '/khovanskiy@old-laptop/d' /data/misc/adb/adb_keys"Беспроводное подключение:
Способа два. Старый, через TCP-режим adbd, работает на любом Android, но требует первого подключения по кабелю:
Код: Выделить всё
adb tcpip 5555
restarting in TCP mode port: 5555Код: Выделить всё
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Код: Выделить всё
adb usbНовый способ, беспроводная отладка с сопряжением, появился в 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Код: Выделить всё
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Работа с несколькими устройствами, флаг -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Код: Выделить всё
adb -s RF8N20YJ4XZ shell getprop ro.build.version.release
15Код: Выделить всё
adb -d install app-debug.apk
adb -e logcat -b crash
adb -t 2 shellКод: Выделить всё
export ANDROID_SERIAL=RF8N20YJ4XZ
adb shell # уйдет на SamsungЧастые ошибки и обход:
Устройства нет в списке вообще. Сначала кабель: зарядные шнуры без линий данных, это классика. Потом 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?)Код: Выделить всё
# /etc/udev/rules.d/51-android.rules
SUBSYSTEM=="usb", ATTR{idVendor}=="2717", MODE="0660", GROUP="plugdev"Код: Выделить всё
sudo udevadm control --reload-rules
sudo udevadm triggerВечный unauthorized. Диалог однажды смахнули, и он больше не показывается. Лечение: на телефоне "Отозвать доступ для отладки по USB", на компьютере
Код: Выделить всё
adb kill-serverСтатус offline. Чаще всего конфликт версий: где-то в системе живет второй, старый adb (его таскают с собой эмуляторы, Vysor, scrcpy из дистрибутивных репозиториев), и он перехватывает сервер. Убейте все процессы adb, проверьте, что в PATH первым стоит свежий Platform Tools, затем
Код: Выделить всё
adb kill-server && adb devicesfailed to authenticate при adb connect. Обычно роутер с изоляцией клиентов (AP isolation) или гостевая сеть: телефон и компьютер друг друга не видят. Проверяется обычным ping до IP телефона.
В следующей главе разберем сам жизненный цикл сервера adb, его порты и то, что на самом деле происходит между kill-server и start-server.