Как я могу подключиться к Android с ADB через TCP? - PullRequest
818 голосов
/ 09 апреля 2010

Я пытаюсь отладить приложение на Motorola Droid , но у меня возникают трудности с подключением к устройству через USB. Мой сервер разработки представляет собой 64-разрядную виртуальную машину Windows 7, работающую в Hyper-V , и поэтому я не могу подключиться напрямую через USB в гостевой системе или с хоста.

Я установил несколько различных решений USB-over-TCP, но, похоже, возникли проблемы с подключением, поскольку монитор ADB сообщает, что «devicemonitor неоднократно не запускал мониторинг». Есть ли способ подключиться напрямую с клиента на компьютере разработчика к демону на устройстве, используя сеть вместо USB-подключения или, возможно, другие жизнеспособные варианты?

Ответы [ 32 ]

3 голосов
/ 06 января 2015

Шаги:

  1. su - переключиться на супер пользователя.
  2. setprop service.adb.tcp.port 5555 - для указания порта tcp - 5555 - это номер порта здесь
  3. stop adbd - Чтобы остановить службу adbd.
  4. start adbd - Для запуска службы adbd.

это прекрасно работает с ssh с моего компьютера с Windows

Я пытаюсь сделать это при загрузке на моем мобильном Cyanogen или запускаю это с помощью plink. С plink я не могу запустить оболочку с правами su ... Команда sudo или su не работает. При загрузке я не знаю, как это работает! Моя оболочка работает из ssh с su -c "sh /storage/sdcard1/start_adb.sh" с последними 3 командами (без su -)

Спасибо

3 голосов
/ 05 января 2013

Я собрал пакетный файл для автоматического включения и подключения ADB через TCP, к устройству, подключенному через USB. С ним вам не нужно вводить IP вручную.

@echo off
setlocal

REM Use a default env variable to find adb if possible
if NOT "%AndroidSDK%" == "" set PATH=%PATH%;%AndroidSDK%\platform-tools

REM If off is first parameter then we turn off the tcp connection.
if "%1%" == "off" goto off

REM Set vars
set port=%1
set int=%2
if "%port%" == "" set port=5557
if "%int%" == "" set int=wlan0

REM Enable TCP
adb -d wait-for-device tcpip %port%

REM Get IP Address from device
set shellCmd="ip addr show %int% | grep 'inet [0-9]{1,3}(\.[0-9]{1,3}){3}' -oE | grep '[0-9]{1,3}(\.[0-9]{1,3}){3}' -oE"
for /f %%i in ('adb wait-for-device shell %shellCmd%') do set IP=%%i

REM Connect ADB to device
adb connect %IP%:%port%

goto end

:fail
echo adbWifi [port] [interface]
echo adbWifi off
goto end

:off
adb wait-for-device usb

:end
2 голосов
/ 26 мая 2016

Вам нужно сделать следующие вещи:

  • Сначала добавьте ADB в путь к вашей среде.
  • Из вашего CLI введите эту команду adb connect YOUR_DEVICE_IP: PORT_NUMBER (пример adb connect 192.168.100.100:5555)
2 голосов
/ 31 марта 2016

Еще одно замечание (выучил нелегкий путь): вам не нужно одновременно активировать VPN-соединение вашей компании ...

1 голос
/ 15 мая 2017

Если вы хотите сделать это одним нажатием кнопки, то:

  1. В Android Studio -> Настройки / Предпочтения -> Плагины -> Просмотр репозиториев
  2. Поиск 'ADB wifi'
  3. Установите и перезапустите Android Studio
  4. Подключите ваше устройство (с включенной отладкой USB) к компьютеру через USB (вам нужно будет сделать это только один раз за сеанс)
  5. Инструменты -> Android -> ADB WIFI -> ADB USB К WIFI (Или используйте указанную комбинацию клавиш. Для MacOS: ctrl + shift + w)

Примечание: если это не сработало:

  1. Возможно, ваш брандмауэр Wi-Fi-маршрутизатора блокирует соединение.
  2. Возможно, ABD не установлен на вашем компьютере.
1 голос
/ 11 июня 2011

Я получил это работает. Не использовал USB-кабель.

  • приложение ADB беспроводной.
  • Запустите его. Это установит IP и порт; Тогда в дос

    cd C:\Program Files\Android\android-sdk\platform-tools adb connect "192.168.2.22:8000 "enter"
    

Connected.

1 голос
/ 19 ноября 2015

adb может связываться с сервером adb через сокет tcp. Вы можете проверить это по telnet.

$ telnet 127.0.0.1 5037
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
000chost:version
OKAY00040020

как правило, команда имеет формат %04x%s with <message.length><msg> следующая команда ruby ​​отправляет команду adb cmd против сокета tcp socket

def send_to_adb(socket, cmd)
  socket.printf("%04x%s", cmd.length, cmd)
end

первый пример отправляет команду host:version длиной 12 (000c в шестнадцатеричном формате). вы можете наслаждаться более захватывающей командой, такой как framebuffer:, которая делает снимок экрана из кадрового буфера, как вы можете догадаться по ее имени.

1 голос
/ 22 июля 2011

Используйте приложение adbwireless, чтобы включить телефон, затем используйте adb connect с компьютера с Windows, чтобы поговорить с ним. Приложение adbwireless на телефоне расскажет вам, как к нему подключиться, предоставив IP-адрес и все.

Гораздо менее забавная альтернатива - подключиться через USB, указать телефону использовать TCPIP через adb tcpip 5555, затем отключить USB, а затем использовать adb connect. Это гораздо сложнее, потому что таким образом вам нужно самостоятельно определить IP-адрес телефона (adbwireless сообщает вам IP), вам нужно подключиться через USB и запустить adb tcpip (adbwireless тоже об этом позаботится).

Итак: установите adbwireless на свой телефон. Используй это. Возможно, я делаю это обычно в Linux и в Windows.

1 голос
/ 22 декабря 2011

В моей системе это выглядело так:

На моем Android-устройстве в моей оболочке Linux простой «ifconfig» не дал мне мой IP-адрес. Я должен был напечатать:

ifconfig eth0

-или-

netcfg

чтобы получить мой IP-адрес. (Я знал, что eth0 был настроен, потому что я видел это в моем dmesg.) Затем я сделал:

setprop service.adb.tcp.port -1

stop adbd

start adbd

Затем на моем Win7-боксе (тот, на котором работает Eclipse 3.7.1). Я открыл командную строку для

\ Android-SDK \ платформенные инструменты>

без запуска от имени администратора. Тогда я сделал

adb connect 12.345.678.90

Я никогда не ставил порт. Если бы я сделал

adb tcpip 5555

он сказал, что не может найти устройство, тогда в моем списке "adb devices" ничего не появилось. То есть это работает, только если я НЕ делаю команду tcpip выше.

Я могу сделать "оболочку adb" и связываться с моим Android-устройством. Но мое Android-устройство сейчас не отображается на вкладке «Выполнить» - «Выполнить настройки» -> «Цель». С другой стороны, если я оставлю Target Tab установленным автоматически. Затем, когда я запускаю свое приложение через Run-> Run, оно работает на моем устройстве Android, даже если мое устройство Android даже не указано в качестве одной из моих целей.

1 голос
/ 08 сентября 2015

Я нашел удобный метод, которым хотел бы поделиться.

Для Windows

Имея доступ к USB один раз

Корень не требуется

Подключите телефон и компьютер к точке доступа или запустите переносную точку доступа со своего телефона и подключите к ней свой компьютер.

Получите IP-адрес вашего телефона, как предписано Брайаном (не нужно, если вы делаете горячую точку с вашего телефона)

adb shell ip -f inet addr show wlan0

Открыть блокнот

Напишите эти

@echo off
cd C:\android\android-sdk\platform-tools
adb tcpip 5555
adb connect 192.168.43.1:5555

Измените расположение, указанное выше, где ваш компьютер содержит файл abd.exe

Измените ip на ваш ip телефона.

Примечание : IP-адрес, указанный выше, является базовым IP-адресом устройства Android, когда оно создает точку доступа. Если вы подключаетесь к сети Wi-Fi и IP-адрес вашего устройства постоянно меняется при каждом подключении к точке доступа, вы можете сделать его статическим, настроив его в настройках Wi-Fi. Google это.

Теперь сохраните файл как ABD_Connect.bat (пакетный файл MS-DOS).

Сохраните его где-нибудь и отзовите ярлык к Рабочему столу или кнопке Пуск.

Подключитесь через USB один раз и попробуйте запустить какое-нибудь приложение. После этого, когда вы захотите подключиться без проводов, дважды щелкните по ярлыку.

Примечание : иногда вам нужно открывать ярлык каждый раз, когда вы отлаживаете приложение. Так что создание сочетания клавиш для ярлыка на рабочем столе будет более удобным. Я сделал комбинацию клавиш типа Ctrl+Alt+S. Поэтому всякий раз, когда я хочу отладить, я нажимаю Shift+F9 и Ctrl+Alt+S

Примечание : Если в окне cmd обнаружена ошибка device = null, проверьте свой IP-адрес, возможно, он изменился.

...