adb через Wi-Fi (Android 11+) в Windows: как сохранить фиксированный порт или подключиться автоматически?

Беспроводное соединение ADB работает отлично на моем Android 11 телефона станции + Windows.

Но это не удобно, так как каждый раз при отключении / повторном подключении телефона Wifi мне приходится:

  1. Включите беспроводную отладку в настройках Android.
  2. Обратите внимание на номер порта ХХХХХ, который каждый раз меняется!
  3. Запустить adb connect 192.168.1.10:XXXXX на компьютере.

Есть ли способ пропустить шаг 2:

  • фиксируете порт?
  • заставляет Windows автоматически определять телефон на новом порте? (документация, похоже, подразумевает, что шаги 2 и 3 не нужны в MacOS, после того, как соединение будет выполнено, мне интересно, как это работает)

11 ответов

Вы можете исправить порт до перезагрузки с помощью adb tcpip

После сопряжения и подключения к динамическому порту

пытаться adb tcpip 4444

тогда вы можете использовать adb connect ip:4444 до перезагрузки (после перезагрузки вы должны подключиться к динамическому порту и снова установить tcpip на 4444)

Вы можете динамически получить порт, используя nmapи подключитесь к нему.

вот мое решение

adb connect <device_ip>:$(nmap $IP -p 37000-44000 | awk "/\/tcp/" | cut -d/ -f1)

Достаточно сканирования только портов 37000-44000. Также должна быть включена беспроводная отладка и разблокировано устройство во время сканирования nmap. Запустите его снова, если nmap не находит порт с первого раза.

Я добавил команду к псевдониму, чтобы ее было легко запустить,
например:
alias adbw='adb connect 192.168.0.7:$(nmap $IP -p 37000-44000 | awk "/\/tcp/" | cut -d/ -f1)'

Чтобы подключиться в следующий раз:

  1. Разблокировать устройство
  2. Включить отладку беспроводной сети (вы можете добавить ее в значки строки состояния)
  3. бежать adbwесли установлен псевдоним.

Бывший выход:
connected to 192.168.0.7:38395

Android передает информацию о подключении через mDNS/DNS-SD с типом службы._adb-tls-connect._tcp.

Вы можете обнаружить устройства Android с включенным беспроводным adb, используя что-то вроде avahi-browse.

      $ avahi-browse --terminate --resolve _adb-tls-connect._tcp
+    br0 IPv6 adb-26df62cd-sGvUmf                           _adb-tls-connect._tcp local
+    br0 IPv4 adb-26df62cd-sGvUmf                           _adb-tls-connect._tcp local
+ enp5s0 IPv6 adb-26df62cd-sGvUmf                           _adb-tls-connect._tcp local
=    br0 IPv6 adb-26df62cd-sGvUmf                           _adb-tls-connect._tcp local
   hostname = [Android.local]
   address = [10.0.0.199]
   port = [37531]
   txt = ["v=ADB_SECURE_SERVICE_VERSION"]
=    br0 IPv4 adb-26df62cd-sGvUmf                           _adb-tls-connect._tcp local
   hostname = [Android.local]
   address = [10.0.0.199]
   port = [37531]
   txt = ["v=ADB_SECURE_SERVICE_VERSION"]
= enp5s0 IPv6 adb-26df62cd-sGvUmf                           _adb-tls-connect._tcp local
   hostname = [Android.local]
   address = [10.0.0.199]
   port = [37531]
   txt = ["v=ADB_SECURE_SERVICE_VERSION"]

Затем вы можете подключиться, используя имя службы.

      $ adb connect adb-26df62cd-sGvUmf
connected to adb-26df62cd-sGvUmf._adb-tls-connect._tcp

Или используя адрес и порт.

      $ adb connect 10.0.0.199:37531
connected to 10.0.0.199:37531

Мне понравился ответ Build3r, поэтому я перенес его в powershell, вам нужно только установить nmap, который доступен для Windows:

nmap YOUR_IP -p 37000-44000 | Where-Object{$_ -match "tcp open"} | ForEach-Object {$_.split("/")[0]}

я использую это в скрипте Python, который находится в моем PATH

      ret=subprocess.run(["powershell","-command",F'nmap {ip} -p 37000-44000 | Where-Object{{$_ -match "tcp open"}} | ForEach-Object {{$_.split("/")[0]}}'],capture_output=True)
port=ret.stdout.decode().strip()

Опираясь на ответ от user3125800, вот фрагмент PowerShell, чтобы получить однострочное решение для беспроводной связи в Windows:

      adb connect $IP`:$(((nmap $IP -p 37000-44000 | sls tcp) -Split '/')[0])

Вам нужно будет заранее определить IP-адрес вашего устройства (здесь пригодится постоянная аренда DHCP) через:

      $IP="192.168.0.69"

Некоторая документация, необходимаяadbсопряжение, прежде чем вы сможете использовать этот фрагмент: https://developer.android.com/studio/command-line/adb#wireless-android11-command-line

Опираясь на ответ от Build3r и SonicGold. Я пишу скрипт летучей мыши с Python для автоматического подключения. Питон:

      ip = "192.168.10.136"
ret = subprocess.run(["powershell", "-command",
                      F"((nmap {ip} -p 37000-44000 | sls tcp) -Split '/')"],
                     capture_output=True)
outputs = ret.stdout.decode().strip().split("\n")
for output in outputs:
    output = output.replace("\r", "")
    if output.isalnum():
        print(f"find port:{output}")
        print(subprocess.run(["powershell", "-command",
                              F"adb connect {ip}:{output}"],
                             capture_output=True).stdout.decode().strip()
              )
time.sleep(5)

летучая мышь:

      "python" "xxx\scanWifi.py"

Он может сканировать все соответствующие порты и пытаться подключиться.

Теперь проблема решена благодаря недавнему обновлению Android Studio.

Теперь все шаги можно автоматизировать:

  1. Включите беспроводную отладку в настройках Android. → это можно автоматизировать с помощью простого профиля Tasker : при подключении к офисному Wi-Fi установите пользовательскую настройку для включения беспроводной отладки следующим образом:

профиль диспетчера задач

задача диспетчера

Или, если вам не нужна полная автоматизация, вы, вероятно, можете добавить быстрый переключатель для удобства. На Pixel 3 это можно сделать в Settings > System > Developer options > Quick settings developer tiles > Wireless debugging

  1. Android Studio Bumblebee 2021.1.1 теперь автоматически (через несколько секунд) определяет устройство и подключается к нему! Больше никакого копирования номеров портов.

Подсказка обо всех решениях, обсуждаемых здесь, и об использованииadb syncиadb connectдля беспроводной отладки с помощью ADB в целом:

Вместо предоставления (неудобного, возможно, даже нестабильного) текущего IP-адреса мобильного устройства достаточно использоватьlocalhost(или эквивалентный адрес IPv4127.0.0.1или IPv6-адрес::1).

Я только что нашел ниже способы для Linux и Windows (надеюсь, это поможет другим). Поскольку ADB 31.0.2 или более поздней версии отключает обнаружение mDNS, необходимо включить обнаружение mDNS, а затем перезапустить сервер ADB.

Линукс:

      export ADB_MDNS_OPENSCREEN=1
adb kill-server
adb start-server 
adb mdns services

Окна:

      set ADB_MDNS_OPENSCREEN=1
adb kill-server
adb start-server 
adb mdns services

Выходы (например):

      List of discovered mdns services
driver_vm       _adb._tcp       192.168.1.49:4444
device_vm       _adb._tcp       192.168.1.49:3333

Если имеется только одно устройство, оно автоматически подключается к устройствам каждый раз, когда на этом устройстве включается беспроводная отладка. В противном случае вы можете использоватьconnectкоманда, как показано ниже

      adb connect driver_vm._adb._tcp

или

      adb connect 192.168.1.49:3333

Ссылка: https://source.android.com/docs/automotive/virtualization/tools .

Я обнаружил, что после сопряжения устройства вас больше никогда не попросят ничего подключить к этому устройству (за исключением того, что вы позже отзовете разрешения вручную).

Чтобы подключить устройство из adb, сначала вы должны убедиться в следующем в этом контрольном списке:

  1. Вы находитесь в одной сети (например, ваш ноутбук и ваш телефон)
  2. Вы активировали беспроводную отладку на своем телефоне

После того, как вы подтвердите эти вещи, вам нужно перейти в меню разработчиков на вашем телефоне (там, где вы можете найти опцию беспроводной отладки). Войдите в это подменю и перейдите к опции «сопряжение с кодом». Появится всплывающее окно с определенными данными. Имея это в виду, вы идете в терминал и вводите эту команду:

      abd pair <your-device-ip>:<device-port> <pairing-code>

После того, как это уже сделано, вы всегда будете видеть это устройство в списке устройств, когда будете выполнять adb devices на своем ноутбуке (если все пункты из контрольного списка выполнены)

В параметрах разработчика нажмите Беспроводная отладка -> Сопряжение устройства с кодом сопряжения.

И в терминале используйте предоставленный ip: порт и код для сопряжения вашего устройства

      adb pair 192.168.1.171:42289

Затем в терминале вас попросят ввести код сопряжения (в данном случае 093044). После этого каждый раз, когда вы подключаетесь к Wi-Fi, если и ваш телефон, и компьютер подключены, а сервер adb активен, он будет подключаться автоматически

Очевидно, что ip: порт и коды сопряжения отличаются от этих снимков экрана.

Другие вопросы по тегам