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

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


当前回答

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

plink -L 5037:localhost:5037 <host_IP_address>

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

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

其他回答

来自adb--帮助:

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

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

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

端口是5554。

另外一个注意事项(艰难地学会了):您不应该同时激活您的公司VPN连接。。。

Bash util函数:

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

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

从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现在应该说您已连接。

注意:如果速度太快,无法发出connect命令,则可能会失败。所以,在你说这不起作用之前,至少间隔5秒试两次。

adb可以通过tcp套接字与adb服务器通信。您可以通过telnet进行验证。

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

通常,命令的格式为%04x%s,带有<message.length><msg>以下是ruby命令witch针对tcp套接字套接字发送adb命令cmd

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

第一个示例发送命令host:version,其长度为12(十六进制为000c)。您可以享受像framebuffer这样更令人兴奋的命令:它从framebuffer中获取屏幕截图,您可以从其名称中猜到。