如何通过TCP连接ADB到Android设备?

879

我试图在一台Motorola Droid上调试一个应用程序,但是通过USB连接设备时出了一些问题。我的开发服务器是运行在Hyper-V下的Windows 7 64位虚拟机,所以我不能直接通过USB从客户机或主机连接。

我安装了几个不同的USB-over-TCP解决方案,但是连接似乎存在问题,因为ADB监视器反复报告“devicemonitor failed to start monitoring”。是否有一种方法可以通过网络直接从开发机器上的客户端连接到设备上的守护进程,而不是使用USB连接或其他可行的选项?


75
当通过 USB 连接时:运行 adb tcpip 5555。拔掉 USB,从 设置 > 关于手机 > 状态 查看手机 IP。现在运行 adb connect 192.168.x.x 就可以了。无需工具、无需软件,轻松搞定。 - andreszs
1
Andrew所说的 - 这些是来自Google android developer website 的官方说明,无需root。在我的非root HTC One m8上正常工作(当然需要启用开发者选项)。 - Jeff Ward
@Andrew,我能否使用像这个这样的应用程序在没有计算机和无根访问权限的Nexus 6上打开和关闭端口?当我在公共网络上并且不使用手机进行开发时,我担心会出现安全问题,因为端口5555是开放的。 - DaveTheMinion
除非你能找到一种在手机本身上执行adb命令的方法,否则你需要使用电缆运行adb命令以更改端口。肯定有某种已获取root权限的命令行应用程序可以运行adb命令。 - andreszs
3
两种方法 - 如何通过 WiFi 运行 Android 应用程序 - 简单教程 - Athira Reddy
显示剩余6条评论
37个回答

1204

手动流程

如果您的设备已经获取了Root权限

根据xda-developers论坛上的帖子,您可以通过以下命令从设备启用无线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将变得更加容易。在连接了设备的计算机上的命令行中,输入以下命令:

adb tcpip 5555
adb connect 192.168.0.101:5555

请确保将192.168.0.101替换为实际分配给您设备的IP地址。完成后,您可以通过运行以下命令来断开adb tcp会话:

adb disconnect 192.168.0.101:5555

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

手动查找IP地址:

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

使用ADB查找IP地址:

通过adb执行以下命令:

adb shell ip -f inet addr show wlan0

让ADB守护进程返回通过USB监听的状态。
adb usb

自动化这个过程的应用程序

Google Play 上也有几款自动化此过程的应用程序。快速搜索建议使用 adbWirelessWiFi ADBADB WiFi。所有这些应用程序都需要 root 权限,但 adbWireless 需要更少的权限。


3
需要root访问权限才能完成这个操作吗?我似乎可以在终端中运行命令,但实际上好像并没有起作用... - J J
6
很遗憾,是的。需要获取 root 权限。 - Kingsolmn
178
第二个解决方案(adb tcpip 5555adb connect …)不需要root权限。 - Ridcully
11
即使使用 adb tcpip <port> 命令,也需要符合以下条件之一:ro.kernel.qemu 属性已设置(在模拟器模式下运行),ro.secure 值为 0(即 root 设备),或 ro.debuggableservice.adb.root 均设置为 1。如果没有满足上述任何条件,则 adbd 不会打开 TCP/IP 连接。请参阅 http://www.netmite.com/android/mydroid/system/core/adb/adb.c 中 adb_main 部分有关 secure 变量的说明。在我的未 root 的 Android 2.3.7 上,adbd 根本不进入 TCP/IP 模式。 - soulseekah
2
所有这些都已经在http://developer.android.com/tools/help/adb.html#wireless上了,同时确保你在同一子网下。196.168.0.*通常无法访问196.168.1.* ;) - Bron Davies
显示剩余22条评论

132

如果你的手机已经root,那么这个操作就非常简单。

Google Play下载一个终端模拟器(有很多是免费的)。确保你的Android设备连接到了Wi-Fi并获取Wi-Fi IP地址。打开终端程序并输入:

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

现在打开电脑(假设您使用的是Windows),在桌面上创建一个名为"cmd.exe"的快捷方式(不带引号)。

右键单击cmd快捷方式,选择"以管理员身份运行"

切换到android-sdk-windows\tools文件夹

输入:

adb connect ***wifi.ip.address***:5555

(example: adb connect 192.168.0.105:5555)

现在adb应该会显示您已连接。

注意: 如果您太快地执行连接命令,可能会失败。因此,请在执行两次命令之间相隔至少五秒钟,然后再说它无法正常工作。


5
在执行 "adb tcpip 5555" 命令之前,请先执行 "adb kill-server" 命令。在执行 "adb connect 192.168.0.101:5555" 后,您可以执行 "adb devices" 或 "adb shell" 命令(连接不会自动开始 shell)。 - samus
我尝试了adb tcpip 5555,然后另一个人在他们的电脑上执行了adb connect myIP:5555。他可以将应用程序安装到我的手机上,但无法远程调试。远程调试是否可能?在我的手机上,有一个对话框一直显示“等待调试器”。 - Angelina
这会使设置在重新启动后保持不变吗? - Hritik
这个能在移动互联网上使用IPv6地址吗? - CaptainFreedom

94
  1. Connect device via USB and make sure debugging is working, then run:

    adb tcpip 5555
    adb connect <DEVICE_IP_ADDRESS>:5555
    
  2. Disconnect USB and proceed with wireless debugging.

  3. When you're done and want to switch back to USB debugging, run:

    adb -s <DEVICE_IP_ADDRESS>:5555
    
要查找设备的IP地址,请在设备上转到设置> Wi-Fi>高级> IP地址或运行adb shell netcfg
不需要root权限。一次只能调试一个设备。
请参见此XDA帖子adb命令位于Android SDK的platform-tools文件夹中。

2
实际上,如果您按照正确的顺序操作,可以同时连接多个设备。只需为每个手机单独设置tcpip为5555,然后为每个手机发出连接命令,就可以将它们全部连接到adb。 - andreszs
如果我的手机连接方式是这样的,调试会慢一些。此外,有时它会进入睡眠状态,导致立即断开连接。 - Aron Lorincz
在某些设备上,adb tcpip 命令和 adb connect 命令之间的延迟必须非常低,否则它将无法工作。对我来说,通过执行 adb tcpip 5555 && adb connect <DEVICE_IP_ADDRESS>:5555 命令可以使其正常工作。 - vhamon

61

假设您将adb路径保存到Windows环境路径中

  1. 在Android上激活调试模式

  2. 通过USB连接到PC

  3. 打开命令提示符类型:adb tcpip 5555

  4. 从电脑断开您的平板电脑或智能手机

  5. 打开命令提示符类型:adb connect IP地址 (IP地址是您的平板电脑或智能手机的DHCP/IP地址,您可以通过Wi-Fi ->当前连接的网络查找)

现在,在命令提示符中,您应该看到类似以下的结果:connected to xxx.xxx.xxx.xxx:5555


感谢提供步骤序列并明确说明何时断开电脑。 - Manju

53

adb --help中获取:

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

顺便提一下,这是一个命令行选项。

你应该尝试将手机连接到Wi-Fi,然后从路由器获取其IP地址。它在移动网络上不起作用。

端口是5554。


1
我已经尝试过使用5555-5558,现在是5554,但由于某些原因它无法工作。 基本上从命令行: adb kill-server adb connect 10.10.10.100:5554 结果是
  • daemon not running. starting it now *
  • daemon started successfully * unable to connect to 10.10.10.100:5554
我可以从开发工作站ping设备的IP。当输出状态为“daemon started successfully”时,它不应该是指设备上的daemon吗?它是否可能正在尝试使用模拟器?如何确保/验证设备上的daemon正在运行?谢谢
- JDM
2
你应该首先将 adb tcpip 端口 设置为默认的调试方式,因为默认情况下是通过 USB 进行调试。在执行完上述操作后,你可以使用 connect host:port 命令进行连接,这样就可以正常工作了。 - Aiden Strydom
"adb tcpip port" 字面意思是什么?它只会返回字符串 "error: device not found",这里有拼写错误吗?或者我需要替换一些内容吗? - BrainSlugs83
3
啊!!我想通了,CyanogenMod的默认端口号是5555!太好了。:D - BrainSlugs83
@Michael,它可能在某些手机网络上运行,但它们的网络配置基本上是黑匣子--您不知道是否/何时处于防火墙后面,是否正在阻止端口,是否进行NAT转换等。 - BrainSlugs83
显示剩余2条评论

45

对于Windows用户:

步骤1:
您需要在Android手机中启用开发人员选项。
您可以使用以下方式启用开发人员选项:
• 打开设置>关于手机>软件信息>更多。
• 然后点击“Build number”七次以启用开发人员选项。
• 返回到设置菜单,现在您将能够看到“开发人员选项”。
• 点击它并从下一个屏幕上的菜单中打开USB调试。

步骤2:

打开命令提示符并键入adb。
如果您发现adb不是有效命令,则必须向环境变量添加路径。

•首先进入SDK安装文件夹
按照此路径进行操作,此路径仅为示例。 D:\softwares\Development\Andoird\SDK\sdk\platform-tools\; D:\softwares\Development\Andoird\SDK\sdk\tools;
• 现在在Windows系统高级设置中搜索

enter image description here

打开环境变量。

enter image description here

然后打开路径并粘贴以下路径。这是一个例子。
您的SDK路径与我的不同,请使用您自己的。D:\softwares\Development\Andoird\SDK\sdk\platform-tools\;
D:\softwares\Development\Andoird\SDK\sdk\tools;

enter image description here

步骤三:

打开命令提示符并输入adb。如果你仍然看到adb不是有效命令,则说明你的路径没有正确设置,请按照上述步骤进行设置。

enter image description here

现在您可以将您的安卓手机连接到电脑上。打开命令提示符并输入adb devices,您就可以看到您的设备。找到您手机的IP地址。

enter image description here

类型:- adb tcpip 5555

enter image description here

获取您手机的IP地址

adb shell netcfg

现在,
adb connect "IP address of your phone"

现在运行您的Android项目,如果没有看到您的设备,则再次键入adb connect手机的IP地址

enter image description here

enter image description here

对于Linux和macOS用户:

步骤1:打开终端并使用以下命令安装adb:

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

通过USB电缆将手机连接到电脑上。 在终端中输入以下命令:

adb tcpip 5555

使用adb,连接您的安卓手机IP地址。
拔出您的手机。

35

在非root设备上的计算机上

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

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

如果您已将adb添加到路径中,则可以跳过cd部分。


如果可能,请打开SDK位置,右键单击并按“在此处启动命令提示符”。不是所有人都有此选项,因此您还需要执行以下命令:

Windows:更改驱动器(如适用)

D: 

访问SDK和平台工具。将此路径替换为您的SDK位置:

cd /sdk/path/here/platform-tools

现在您可以访问 Android 调试桥。


将设备连接到计算机后,执行以下操作:

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

<port>是您想要连接到的端口(默认为5555),而<ip>则是您想要连接到的设备的IP地址。

请注意:5555是默认端口,只需写入IP地址即可连接。如果您使用自定义端口,可以至少提高一些安全性。Wi-Fi上的USB调试可能会被滥用,但只有当设备连接到想要滥用设备的计算机时才会发生。使用非默认端口至少使其更难连接。

如果您使用自定义端口,请确保在IP地址后添加它。未写入端口将连接到5555,如果没有使用该端口,则连接将失败。

有两种方法可以找到设备的IP地址:

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

  • 使用ADB获取IP

从控制台执行以下操作:

adb shell ip -f inet addr show wlan0

使用完连接后,您可以执行以下操作将设备与计算机断开连接:

adb disconnect <ip>:<port>

如果没有IP地址则会断开所有设备的连接。如果您使用了自定义端口,则必须指定要从哪个端口断开连接。默认值也是5555。

如果要禁用端口(如果这是您想要做的事情),请在已连接设备上执行此命令:

adb usb

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

从已root的设备上的计算机

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

然后执行以下操作:

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

连接设备的方法与非root版本相同,只需执行adb connect <ip>:<port>命令即可。

如果您想禁用端口并返回使用USB连接:

setprop service.adb.tcp.port -1
stop adbd
start adbd
你也可以使用一个Android Studio插件来为你完成这个操作(我现在不记得它的名字了),对于已经root的用户,也可以下载一个Android应用程序来设置手机连接(可能仍然需要adb connect)。
某些手机在开发者选项中有一个设置(适用于一些非root手机,但可能也适用于一些root手机),允许在没有root或计算机连接的情况下从设备本身切换到Wi-Fi上的ADB。虽然只有少数手机具备该功能。

adb shell ip -f inet addr show wlan0 这段代码中是否需要替换IP地址和端口号? - Michael
这是获取IP地址的Shell方式。该行中的任何内容都不应被替换。 - Zoe stands with Ukraine

33

我需要同时使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

无法工作:找不到adbd。 adbd通常通过启动adbd来启动。但是也许在某个文件夹中有一个脚本/可执行文件? - KrisWebDev
1
在我的Gnex上,它是/sbin/adbd。这可能因手机而异。当然,你必须获取root权限...如果你没有root权限,你将无法访问/sbin。 - transistor1

32

使用TCP端口连接平板电脑,确保您的系统和设备连接到同一个网络。

  1. 打开控制台 cmd.exe
  2. 输入 adb tcpip 5555
  3. 进入 系统->开发选项-> USB调试-->取消选择TCPIP连接
  4. 输入 adb connect 192.168.1.2这是您的设备IP地址
  5. 连接到192.168.1.2

使用端口转发连接 尝试进行端口转发,

adb forward tcp:<PC 端口> tcp:<设备端口>

例如:

adb forward tcp:5555 tcp:5555.

C:\Users\abc>adb forward 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设备连接到系统,然后按照相同的过程操作。
对于已root的设备

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

2
在控制台中首先输入“su”以获取根控制台。 - Grim

30

我不知道如何完全没有USB连接来连接设备,但如果你能在另一台计算机上连接它,你可以通过发出以下命令将adbd切换到TCP模式:

adb tcpip <port>

从终端连接到您的设备,然后通过无线网络从网络上的任何PC连接:

adb connect <ip>:<port>
也许在设备的终端中也有可能切换到TCP模式。

在所有复杂的答案中,这个8岁的答案是最简单的,并且有效。无需root权限,只需输入“adb connect <ip>:5555”,即可部署。 - RogerW

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接