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

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


当前回答

Bash util函数:

function adb-connect-to-wifi {
    ip="$(adb shell ip route | awk '{print $9}')"
    port=5555
    adb tcpip ${port}
    adb connect ${ip}:${port}
}

其他回答

从非根设备上的计算机

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

首先,打开命令提示符(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连接

从根设备上的计算机

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

然后你会:

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

要连接设备,您可以像在非根版本中一样,通过adb connect<ip>:<port>。

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

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

你也可以使用Android Studio插件为你做这件事(现在不要记住这个名字),对于root用户,还可以下载Android应用程序来设置电话连接(adb connect可能仍然需要)。

一些手机在开发者选项中有一个设置(这适用于一些未登录的手机,但可能也适用于一些根手机),允许在没有根用户或计算机连接的情况下通过设备本身的Wi-Fi切换ADB

正如Brian所说:

根据xda开发人员的一篇帖子,您可以使用以下命令在设备上通过WiFi启用ADBsetprop服务.adb.tcp.port 5555停止adbd启动adbd您可以禁用它,并使用setprop服务.adb.tcp.port-1停止adbd启动adbd如果你已经有USB连接,那么切换到使用WiFi就更容易了。通过USB连接设备的计算机上的命令行发出命令adb tcpip 5555adb连接192.168.0.101:5555告诉ADB守护程序返回USB监听adb-usb接口Android市场上也有几个应用程序可以自动完成这一过程。

它可以工作。你只需要访问android shell并键入这些命令。。。

市场上还有一种(更简单的)解决方案:adbWireless,它将自动设置您的手机。

根是必需的!对于两者。。。

我创建了一个批处理文件,用于通过TCP自动启用ADB并将其连接到通过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

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

在Android中激活调试模式通过USB连接到PC打开命令提示符类型:adb-tcpip 5555断开平板电脑或智能手机与电脑的连接打开命令提示符类型:adb connect IPADDRESS(IPADDRESS是平板电脑或智能手机的DHCP/IP地址,可以通过Wi-Fi->当前连接的网络找到)

现在在命令提示符中,您应该看到这样的结果:connected to xxx.xxx.xxx.xxxx:55555

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

在Linux上,使用Blueman通过蓝牙与设备共享PC互联网:$sudo apt-get安装blueman$blueman经理配对:启用蓝牙后搜索设备并使其可见$blueman服务网络>[X]网络接入点(NAP)您的手机>设置>蓝牙>配对设备>[X]Internet访问使用蓝牙网络执行ADB命令:$adb tcpip 5555$adb connect$(adb shell ip-f inet addr show bt pan | egrep-o'[0-9]+\.[0-9]+\.[0-10]+\.[0-9]'| head-n1):5555

完成后返回USB模式:

$ adb disconnect
$ adb usb

注意:蓝牙3.0和4.0最高可达24 Mbit/s。