Почему меняется порт отладки по Wi-Fi и как с этим жить
Почему порт «Отладки по Wi-Fi» новый при каждом включении и после перезагрузки, как найти его через adb mdns services и стоит ли закреплять порт 5555.
Порт «Отладки по Wi-Fi» меняется потому, что Android каждый раз выбирает случайный свободный порт, когда вы включаете отладку: после перезагрузки, после смены сети, после ручного выключения и включения. Закрепить его штатными средствами нельзя. Вместо этого телефон объявляет свой текущий порт в локальной сети через mDNS, и adb или приложение могут найти его сами. Если нужен именно постоянный порт, есть обходной путь через adb tcpip 5555, но у него заметные минусы.
Два порта, и оба временные
На экране «Отладка по Wi-Fi» вы видите два разных порта:
| Порт | Где показан | Для чего | Сколько живёт |
|---|---|---|---|
| Порт подключения | Вверху экрана, «IP-адрес и порт» | adb connect | Пока отладка включена |
| Порт сопряжения | В окне «Подключить устройство с помощью кода подключения» | adb pair | Пока открыто окно с кодом |
Сопряжение нужно один раз, поэтому порт сопряжения обычно никого не волнует. Неудобства доставляет порт подключения: вчерашняя команда adb connect 192.168.1.20:41237 сегодня выдаёт Connection refused.
Зачем Android так делает
Фиксированный известный порт удобен не только вам. Случайный порт, шифрование TLS и сопряжение по коду вместе делают «Отладку по Wi-Fi» заметно безопаснее старого режима adb tcpip, который годами висел на порту 5555. К тому же случайный порт не конфликтует с другими программами. Найти же телефон помогает mDNS: adbd объявляет в сети службу _adb-tls-connect._tcp с текущим портом, а пока открыто окно с кодом, ещё и _adb-tls-pairing._tcp. Так Android Studio находит телефоны без ввода адреса.
Когда именно порт меняется
| Событие | Порт подключения | Нужно ли новое сопряжение |
|---|---|---|
| Отладку выключили и включили | Новый | Нет |
| Перезагрузка телефона | Новый (и отладку нужно включить заново) | Нет |
| Переход в другую сеть Wi-Fi | Новый (отладка выключается) | Нет |
| Экран погас, телефон уснул | Прежний, если отладка не выключилась | Нет |
| Отозвали авторизации adb | Не важно | Да |
Видно, что сопряжение переживает почти всё, а порт почти ничего. Поэтому любые скрипты и ярлыки с зашитым портом ломаются уже на следующий день, а способы, которые ищут телефон через mDNS, продолжают работать.
Как узнать текущий порт с компьютера
Проще всего посмотреть его на экране «Отладка по Wi-Fi». Если телефон далеко, спросите сеть:
adb mdns check
adb mdns servicesВывод выглядит примерно так:
List of discovered mdns services
adb-R58M123ABC-AbCdEf _adb-tls-connect._tcp 192.168.1.20:41237Подключитесь по найденному адресу:
adb connect 192.168.1.20:41237Свежие версии adb обычно подключаются к уже сопряжённому телефону сами, как только видят его службу в сети, и adb devices показывает его без ручного adb connect. Если adb mdns services ничего не находит, обновите platform-tools и проверьте, что телефон и ПК в одной сети без изоляции клиентов. Некоторые роутеры и корпоративные сети блокируют multicast, и тогда mDNS не работает вовсе.
Можно ли закрепить порт: adb tcpip 5555
Когда телефон уже подключён по Wi-Fi, можно переключить adbd в классический сетевой режим на постоянном порту. Кабель для этого не нужен:
adb -s 192.168.1.20:41237 tcpip 5555
adb connect 192.168.1.20:5555Телефон может показать запрос «Разрешить отладку?» для нового подключения, примите его. Минусы такого режима:
- Нет шифрования. Трафик
adb tcpipидёт открытым текстом, в отличие от «Отладки по Wi-Fi». - Порт 5555 открыт всей сети. Подключиться может любой, чей ключ вы однажды разрешили, и любой, кто уговорит вас нажать «Разрешить».
- Работает до перезагрузки. После неё режим сбрасывается, и всё начинается заново.
- IP-адрес тоже может смениться. Если роутер выдаёт адреса динамически, закрепите адрес телефона в настройках DHCP роутера.
В общественных сетях этот режим лучше не использовать. Подробное сравнение в статье adb tcpip или отладка по Wi-Fi.
Отдельно стоит сказать про адрес: даже со случайным портом удобно, когда IP телефона не меняется. Резервирование адреса в роутере решает половину проблемы для любого способа.
Без ПК порт вообще не нужно знать: ADB Kit
ADB Kit подключается к adb самого телефона через «Отладку по Wi-Fi» и номера портов не спрашивает:
- При первом сопряжении (вкладка «Главная», «Начать сопряжение») приложение само находит службу сопряжения через mDNS, вам остаётся ввести 6-значный код в уведомлении.
- Когда вы снова включаете «Отладку по Wi-Fi», ADB Kit ищет службу подключения в сети и подключается к её новому порту. Ни вводить, ни запоминать его не нужно.
- То же самое работает для другого телефона, добавленного через «Добавить телефон»: если его порт сменился, приложение находит телефон заново по имени службы.
Ручной ввод адреса остаётся запасным вариантом («Ввести адрес вручную»), если mDNS в вашей сети заблокирован.
Частые вопросы
Порт поменялся, нужно ли заново сопрягаться? Нет. Сопряжение привязано к ключу устройства, а не к порту. Нужен только новый adb connect.
Можно ли задать свой порт для «Отладки по Wi-Fi»? Штатно нет. Без root остаётся adb tcpip с его минусами.
Почему adb connect по старому порту иногда всё-таки работает? Если вы не выключали отладку и не перезагружали телефон, порт прежний. Он меняется только при новом включении отладки.
Порт на экране один, а adb mdns services показывает другой. Обновите экран «Отладка по Wi-Fi»: вероятно, отладку успели выключить и включить. Верьте свежему значению.