如何通过TCP连接到使用ADB的Android?

我试图debugging一个摩托罗拉Droid的应用程序,但我有一些困难通过USB连接到设备。 我的开发服务器是在Hyper-V中运行的Windows 7 64位虚拟机,因此无法通过USB或guest虚拟机直接连接。

我安装了几种不同的USB-over-TCP解决scheme,但是由于ADB监视器反复报告“设备监视器无法开始监视”,连接似乎有问题。 有没有一种方法可以直接从开发机器上的客户端连接到使用networking而不是USB连接的设备上的守护进程,或者可能有其他可行的选项?

手动过程

从你的设备,如果它是根

根据xda-developers的post ,您可以使用以下命令通过Wi-Fi启用ADB:

 su setprop service.adb.tcp.port 5555 stop adbd start adbd 

您可以禁用它,并返回ADB以侦听USB

 setprop service.adb.tcp.port -1 stop adbd start adbd 

从电脑上看,如果你已经有了USB接口(不需要root)

如果您已经有USB,那么切换到使用Wi-Fi更加容易。 从通过USB连接设备的计算机上的命令行发出命令

 adb tcpip 5555 adb connect 192.168.0.101:5555 

确保使用实际分配给设备的IP地址replace192.168.0.101

您可以通过两种方式find平板电脑的IP地址:

手动IP发现:

进入Android的WiFi设置,单击操作栏中的菜单button(垂直省略号),点击高级,然后在屏幕底部查看IP地址。

使用ADB发现IP:

通过adb执行以下命令:

 adb shell ip -f inet addr show wlan0 

告诉ADB守护进程返回通过USB侦听

 adb usb 

使应用程序自动化的过程

Google Play上还有几个应用程序可以自动执行此过程。 快速searchbuild议adbWireless , WiFi ADB和ADB WiFi 。 所有这些都需要root权限,但adbWireless需要更less的权限。

如果你的手机是根植的,这真的很简单。

从Google Play下载terminal模拟器(有很多免费的)。 确保您的Android设备已连接到您的Wi-Fi并获取Wi-Fi IP地址。 打开terminal程序并键入:

 su setprop service.adb.tcp.port 5555 stop adbd start adbd 

现在转到您的计算机(假设您正在使用Windows)并在桌面上为“cmd.exe”(不带引号)创build一个快捷方式。

右键单击cmd快捷方式,然后select"Run as Administrator"

更改为您的android-sdk-windows\tools文件夹

types:

 adb connect ***wifi.ip.address***:5555 (example: adb connect 192.168.0.105:5555) 

adb现在应该说你已经连接了。

注意:如果你太快而不能提供连接命令,则可能会失败。 因此,在你说这不起作用之前,至less尝试两次五秒钟。

  1. 通过USB连接设备并确保debugging正在工作,然后运行:

     adb tcpip 5555 adb connect <DEVICE_IP_ADDRESS>:5555 
  2. 断开USB并继续进行无线debugging。

  3. 当您完成并想要切换回USBdebugging时,运行:

     adb -s <DEVICE_IP_ADDRESS>:5555 

要查找设备的IP地址,请转到设备上的Settings > Wi-Fi > Advanced > IP Address ,或者运行adb shell netcfg

没有根需要。 一次只能debugging一个设备。

看到这个XDA的post 。

adb命令位于Android SDK的platform-tools文件夹中。

adb --help

 connect <host>:<port> - Connect to a device via TCP/IP 

顺便说一句,这是一个命令行选项。

您应该尝试将手机连接到您的Wi-Fi,然后从您的路由器获取其IP地址。 这不会在单元networking上工作。

港口是5554。

我需要使用 USB和TCPIP为ADB工作(不要问),所以我做了以下(使用其他人从xda-developers发布的指示)

使用adb shell

 su #Set the port number for adbd setprop service.adb.tcp.port 5555 #Run the adbd daemon *again* instead of doing stop/start, so there #are two instances of adbd running. adbd & #Set the port back to USB, so the next time ADB is started it's #on USB again. setprop service.adb.tcp.port -1 exit 

对于PC用户:

步骤1:
您必须在您的Android手机中启用开发者选项。
您可以使用这种方式启用开发人员选项。
•打开设置>关于>软件信息>更多。
•然后点击“内部编号”七次以启用开发人员选项。
•返回到“设置”菜单,现在您将可以看到“开发人员选项”。
•点击它,然后从下一个屏幕的菜单中打开USBdebugging。

第2步:

打开cmd并键入adb。
如果您发现adb不是有效的命令,那么您必须添加一个path到环境variables。

•首先去你的SDK安装文件夹
按照这个path,这个path只是一个例子。 d:\软件\开发\ Andoird \ SDK \ SDK \平台工具\; d:\软件\开发\ Andoird \ SDK \ SDK \工具;
•现在searchWindows系统高级设置

在这里输入图像描述

打开环境variables。

在这里输入图像描述

然后打开path并粘贴下面的path这是一个例子。
你的SDKpath是不同于我的请使用你的。 d:\软件\开发\ Andoird \ SDK \ SDK \平台工具\;
d:\软件\开发\ Andoird \ SDK \ SDK \工具;

在这里输入图像描述

第3步:

打开cmd并键入adb。 如果您仍然看到adb不是有效的命令,那么您的path没有正确设置上面的步骤。

在这里输入图像描述

现在你可以连接你的android手机到PC。

打开cmd并键入adb设备,您可以看到您的设备。 find你的手机的IP地址。

在这里输入图像描述

types: – adb tcpip 5555

在这里输入图像描述

获取手机的IP地址

 adb shell netcfg 

现在,

 adb connect "IP address of your phone" 

现在运行你的android项目,如果没有看到你的设备,然后再次键入adb连接你的手机的IP地址

在这里输入图像描述

在这里输入图像描述

对于Linux和MAC用户

第1步:打开terminal并使用安装adb

sudo apt-get install android-tools-adb android-tools-fastboot

通过USB线将手机连接到PC。 在terminal中键入以下命令

 adb tcpip 5555 

使用adb,连接你的android手机ip地址。

删除你的手机。

使用TCP端口连接您的平板电脑。 确保您的系统和设备连接到相同的networking。

  1. 打开控制台cmd.exe
  2. 键入adb tcpip 5555
  3. 进入系统 – >开发选项 – > USBdebugging – >取消selectTCPIP连接
  4. 键入adb connect 192.168.1.2这是您的设备IP地址
  5. 连接到192.168.1.2

使用端口转发连接尝试做端口转发,

adb转发tcp: <PC port> tcp: <device port>

喜欢:

adb转发tcp:5555 tcp:5555。

C:\ Users \ abc> adb转发tcp:7612 tcp:7612

C:\ Users \ abc> adb tcpip 7612在TCP模式下重新启动端口:7612

C:\ Users \ abc> adb connect 10.0.0.1:7612

连接到10.0.0.1:7612

如果您收到消息错误:找不到设备将USB设备连接到系统,然后按照相同的步骤。
为根植设备

 setprop service.adb.tcp.port 5555 stop adbd start adbd 

首先,您必须通过USB连接您的设备

然后将您的设备连接到WIFI并获取IP地址。 虽然仍然通过USB连接键入这个命令行或通过Android Studioterminal

 adb tcpip 5555 adb connect <device IP>:5555 

你会看到这些消息:

 restarting in TCP mode port: 5555 connected to 172.11.0.16:5555 

现在卸下USB电缆,你仍然会看到你的logcat正常

完成。 请享用

我不知道如何连接设备没有任何USB连接,但如果你设法连接它可能在另一台计算机上,您可以切换adbd到TCP模式发出

 adb tcpip <port> 

从terminal通过以下方式通过networking上的任何PC连接到您的设备:

 adb connect <ip>:<port> 

也许也可以从设备上的terminal切换到TCP模式。

如果你想轻松地连接你的设备运行,debugging或通过WiFi部署你的Android应用程序,你可以使用我开发的开源IntelliJ插件。 这里是代码, 在这里插件准备使用。

用法很简单。 在这里你有一个gif:

在这里输入图像描述

假设您将adbpath保存到您的Windows环境path中

  1. 在android中激活debugging模式
  2. 通过USB连接到电脑
  3. 打开命令提示符键入:adb tcpip 5555
  4. 断开您的平板电脑或智能手机从PC
  5. 打开命令提示符键入:adb connect IPADDRESS(IPADDRESS是您的平板电脑或智能手机的DHCP / IP地址,您可以通过Wi-Fi – >当前连接的networkingfind)

现在在命令提示符下,你应该看到如下的结果:连接到xxx.xxx.xxx.xxx:5555

正如Brian所说:

根据xda开发者的post,你可以使用命令从设备启用通过WiFi的ADB

setprop service.adb.tcp.port 5555

停止adbd

开始adbd

您可以禁用它,并返回ADB以侦听USB

setprop service.adb.tcp.port -1

停止adbd

开始adbd

如果您已经拥有USB接口,则切换到使用WiFi更加容易。 从通过USB连接设备的计算机上的命令行发出命令

adb tcpip 5555

adb connect 192.168.0.101:5555

告诉ADB守护进程返回通过USB侦听

adb usb

Android Market上还有几个应用程序可以自动执行此过程。

它的工作原理。你只需要访问androidshell和键入这些命令…

另一个(更简单的)解决scheme是在市场上:adbWireless,它会自动设置您的手机。

根是必需的! 对彼此而言…

从没有根的设备上的计算机

(请注意,这也可以使用rooted设备来完成,但是您可以在不需要USB连接的根设备上使用shell)

首先,打开命令提示符(CMD)。 如果您使用Android Studio或IntelliJ,那么您可以使用包含在其中的控制台。

如果可能,打开SDK位置,右键单击并按“在这里启动命令提示符”。 并不是每个人都有这个选项,所以你也必须这样做(/这些)命令:

更换驱动器(如果适用)

 D: 

并访问SDK和平台工具。 将此pathreplace为您的SDK位置:

 D:/sdk/path/here/platform-tools 

现在你可以访问androiddebugging桥。

现在,将设备连接到电脑,请执行以下操作:

 adb tcpip <port> adb connect <ip>:<port> 

您想要连接到的端口在哪里(默认为5555 ),并且是您要连接的设备的IP。

请注意: 5555是默认端口,只需写入IP地址即可连接。 如果你使用自定义的端口,至less可以提高安全性。 通过wifi进行USBdebugging可能会被滥用,但是只有当设备连接到想要滥用设备的计算机时。 至less使用非默认端口会使连接变得困难。

如果您使用自定义端口,请确保将其添加到IP之后。 写没有端口连接到5555 ,如果你没有使用,连接将失败。

您可以通过两种方式find设备的IP地址:

  • 根据您的设备,确切的名称可能会有所不同。 打开设置并转至关于设备 – > 状态 – > IP地址

  • 使用亚行来获取IP

从控制台,执行:

 adb shell ip -f inet addr show wlan0 

一旦完成连接,您可以通过执行以下操作将设备与电脑断开连接:

 adb disconnect <ip>:<port> 

或者没有ip断开所有设备。 如果您使用自定义端口,则必须指定要从哪个端口断开连接 。 这里的默认值是5555。

要禁用端口(如果这是你想要做的),你可以在连接的设备上执行这个命令:

 adb usb 

或者您可以重新启动设备以删除tcpip连接

从根植设备上的计算机

首先,你需要访问shell。 您可以使用USB电缆连接设备,并使用adb shell或从Google Play,FDroid或其他来源下载应用程序。

那你做:

 su setprop service.adb.tcp.port <port> stop adbd start adbd 

而要连接设备,您可以通过执行adb connect <ip>:<port>来执行与非root的版本相同的操作。

如果你想禁用端口并返回到USB监听:

 setprop service.adb.tcp.port -1 stop adbd start adbd 

你也可以使用一个Android Studio插件来为你做(现在不记得名字),而且对于有根使用的用户,还可以select下载一个Android应用程序来build立电话连接(adb connect可能仍然是必需的)。

有些手机的开发者选项设置(这适用于一些无根电话,但也可能是一些根植电话),允许通过设备本身的无线networking来切换ADB,而无需启动root或电脑连接。 虽然有几个电话有这个

 adb tcpip 5555 

奇怪的,但这只适用于我,如果我有USB电缆连接,然后我可以拔掉USB,并与其他一切adb去。

和回到usb时一样,

 adb usb 

只有在USB连接的情况下才能工作。

我发出这个没关系

 setprop service.adb.tcp.port 5555 

要么

 setprop service.adb.tcp.port -1 

然后停止和启动adbd,我仍然需要USB电缆或不工作。

所以,如果我的亚洲开发银行不在工作,我敢打赌我也不能通过WiFi启用亚行。

要使用一个命令在TCP和USB模式之间切换,可以将其添加到/init.rc

 on property:service.adb.tcp.port=* restart adbd on property:service.adb.tcp.enable=1 setprop service.adb.tcp.port 5555 on property:service.adb.tcp.enable=0 setprop service.adb.tcp.port -1 

现在,您可以使用属性service.adb.tcp.enable启用或禁用侦听端口5555.运行netstat以检查是否正在侦听。 正如你所看到的,如果你想手动改变service.adb.tcp.port它也会触发。

步骤1。

确保您的adb主机和Android设备在同一个Wifinetworking上。

第2步。

使用USB电缆将Android设备与电脑相连。 一旦你这样做,你的主机将检测到你的设备和adb将开始在计算机上的USB模式下运行。 您可以使用adb devices检查连接的设备,而通过执行adb usb确保adb在USB模式下运行。

 $ adb usb restarting in USB mode $ adb devices List of devices attached ZX1D63HX9R device 

第3步。

使用以下命令以tcpip模式重新启动adb:

 $ adb tcpip 5556 restarting in TCP mode port: 5556 

步骤4。

找出Android设备的IP地址。 有几种方法可以做到这一点:

  • 方法:1进入设置 – >关于手机/平板电脑 – >状态 – > IP地址。
  • WAY:2转到可用的Wi-Finetworking列表。 你连接的那个,点击它并且知道你的IP。
  • WAY:3试试$ adb shell netcfg

现在你知道你的设备的IP地址,连接你的adb主机。

 $ adb connect 192.168.0.102:5556 already connected to 192.168.0.102:5556 $ adb devices List of devices attached ZX1D63HX9R device 192.168.0.102:5556 device 

第5步。

拔下USB电缆,您应该连接到您的设备。 如果您在adb devices没有看到它,那么请使用上一步的命令重新连接:

 $ adb connect 192.168.0.102:5556 connected to 192.168.0.102:5556 $ adb devices List of devices attached 192.168.0.102:5556 device 

要么你现在就走,或者你需要通过执行adb kill-serveradb kill-server你的adb服务器,并再次执行所有的步骤。

希望有所帮助!

参考:

您也可以使用SSH本地端口转发。 但它仍然涉及USB电缆。 使用USB将您的手机连接到运行sshd的计算机(主机)。 在远程(来宾)PC上启动一个能够进行端口转发/隧道的SSH客户端。 例:

 plink -L 5037:localhost:5037 <host_IP_address> 

我使用这种结构将我的设备连接到虚拟机。 Eltima USB到以太网不够稳定(debugging期间超时)。

SSH隧道免费工作,更可靠。

我发现其他答案混淆。 更简单的使用adbWireless:

http://ppareit.github.com/AdbConnect/

只需在手机上安装一个应用程序,即可通过wifi切换debugging,安装一个eclipse插件即可完成。

我把通过TCP自动启用和连接ADB的batch file放到通过USB连接的设备上。 有了它,你不必手动inputIP。

 @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 

以下是使用蓝牙的Brian解答的扩展:

  1. 在Linux上,使用Blueman通过蓝牙与您的设备共享PC互联网:

     $ sudo apt-get install blueman $ blueman-manager Pair them: Search devices after enabling Bluetooth on your phone and making it visible $ blueman-services Network > [X] Network Access Point (NAP) Your Phone > Settings > Bluetooth > Paired Device > [X] Internet access 
  2. 使用蓝牙networking进行ADB命令:

     $ adb tcpip 5555 $ adb connect $(adb shell ip -f inet addr show bt-pan | egrep -o '[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+' | head -n1):5555 

完成后返回到USB模式:

 $ adb disconnect $ adb usb 

注意: 蓝牙3.0和4.0可以达到24 Mbit / s 。

脚步 :

  1. su – 切换到超级用户。
  2. setprop service.adb.tcp.port 5555 – 指定tcp端口 – 5555是此处的端口号
  3. stop adbd – 停止adbd服务。
  4. start adbd – 启动adbd服务。

这与我的Windows PC完美的工作

我尝试在我的氰手机上启动,或通过plink启动。 与plink我不能启动与苏su壳… sudo或su命令不起作用。 在启动时,我不知道它是如何工作的! 我的shell程序在ssh中使用su -c "sh /storage/sdcard1/start_adb.sh"和最后3个命令(没有su – )

谢谢

你需要做以下的事情:

  • 首先,将ADB添加到您的环境path。
  • 在你的CLI里键入这个命令: adb connect YOUR_DEVICE_IP:PORT_NUMBER (example adb connect 192.168.100.100:5555

使用adbwireless应用程序启用手机,然后使用Windows机器上的adb connect与其通话。 手机上的adbwireless应用程序告诉你如何连接到它,给出的IP地址和一切。

更有趣的替代方法是通过USB连接,通过adb tcpip 5555告诉手机使用TCPIP,然后断开USB,然后使用adb连接。 这是非常困难的,因为这样你必须自己弄清楚手机的IP地址(adbwireless告诉你的IP),你必须通过USB连接,你必须运行adb tcpip(adbwireless照顾也是如此)。

所以:在手机上安装adbwireless。 用它。 这是可能的,我经常在Linux和Windows上进行。

在我的系统上是这样的:

在我的Linuxshell的Android设备上,一个简单的“ifconfig”没有给我我的IP地址。 我不得不input:

ifconfig eth0

-要么-

加上netcfg

得到我的IP地址。 (我知道eth0被configuration,因为我在我的dmesg中看到了。)然后我做了:

setprop service.adb.tcp.port -1

停止adbd

开始adbd

然后在我的Win7盒子(运行Eclipse 3.7.1的那个)上。 我打开了一个命令提示符

\ Android的SDK \平台工具>

没有作为pipe理员运行。 然后我做了一个

adb连接12.345.678.90

我从来没有把港口。 如果我做了一个

adb tcpip 5555

它说无法find设备,然后什么都没有出现在我的“adb设备”列表中。 也就是说,只有当我不执行上面的tcpip命令时才有效。

我可以做一个“adbshell”和混乱我的Android设备。 但是我的Android设备现在不出现在我的Run-> Run Configurations-> Target标签中。 另一方面,如果我保持目标选项卡设置为自动。 然后,当我通过运行 – >运行我的应用程序时,它运行在我的Android设备上,即使我的Android设备甚至没有列为我的目标之一。

我确实得到了这个工作。 没有使用任何USB电缆。

  • 应用程序无线。
  • 运行。 这将设置IP和端口; 然后在dos

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

连接的。

我find了一个方便的方法,我想分享。

对于Windows

有USB接入一次

没有根需要

将手机和电脑连接到热点,或从手机运行便携式热点,然后将电脑连接到电脑。

按照布莱恩(brian)的规定获取手机的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是Android设备制造热点时的基本IP。 如果您正在连接到无线networking,并且每次连接到热点时,如果您的设备的IP持续发生变化,则可以通过在WiFi设置中进行configuration将其设置为静态。 去谷歌上查询。

现在将文件保存为ABD_Connect.bat(MS-DOSbatch file)。

将其保存到某处,然后将快捷方式转到“桌面”或“开始”button

通过USB连接一次,然后尝试运行一些应用程序。 之后,无论何时想要无线连接,请双击快捷方式。

注意 :有时您需要在每次debugging应用程序时打开快捷方式。 所以在桌面上制作快捷方式的快捷键会更方便。 我做了一个快捷键,如Ctrl+Alt+S 所以只要我想debugging,我会按Shift+F9Ctrl+Alt+S

注意 :如果在cmd窗口中发现device = null错误,请检查您的IP,它可能已经更改。

另外一个注意事项(苦学):你不应该有你的公司VPN连接在同一时间…

我只是按照以下步骤开始工作,以便我可以连接到我的Android设备。

第一步:打开Android设备的terminal窗口,执行以下命令。

  1. su – 切换到超级用户。
  2. setprop service.adb.tcp.port 5555 – 指定tcp端口 – 5555是此处的端口号
  3. 停止adbd – 停止adbb服务。
  4. 启动adbd – 启动adbd服务。

步骤2:通过ADB,执行bellow命令(从ADBconfiguration的path)

adb connect 10.10.10.50:5555 – 10.10.10.50是android设备的IP地址,5555是端口号。

adb可以通过TCP套接字与adb服务器进行通信。 你可以通过telnetvalidation。

 $ 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命令witch将adb命令cmd发送给tcp套接字socket

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

第一个例子发送长度为12(hex为000c )的命令host:version 。 你可以享受更多令人兴奋的命令,比如framebuffer:从framebuffer获取截图,你可以从它的名字中猜到。

If you want to be able to do it on a button click then:

  1. In Android Studio -> Settings/Preferences -> Plugins -> Browse Repositories
  2. Search 'ADB wifi'
  3. Install and restart android studio
  4. Connect your device (with USB Debugging enabled) to your computer with USB (you will need to do this just once per session)
  5. Tools -> Android -> ADB WIFI -> ADB USB TO WIFI (Or use the key combination mentioned. For MacOS: ctrl + shift + w)

Note: If it did not work:

  1. Your wifi router firewall may be blocking the connection.
  2. ABD may not be installed on your computer.