我正在尝试调试摩托罗拉Droid上的应用程序,但通过USB连接到设备时遇到一些困难。我的开发服务器是一个在Hyper-V中运行的Windows 7 64位虚拟机,因此我无法在来宾或主机中通过USB直接连接。
我安装了两种不同的USB over TCP解决方案,但连接似乎有问题,因为ADB监视器反复报告“devicemonitor failed to start monitoring”。是否有一种方法可以直接从开发机器上的客户端连接到设备上的守护程序,使用网络而不是USB连接或其他可行的选项?
我正在尝试调试摩托罗拉Droid上的应用程序,但通过USB连接到设备时遇到一些困难。我的开发服务器是一个在Hyper-V中运行的Windows 7 64位虚拟机,因此我无法在来宾或主机中通过USB直接连接。
我安装了两种不同的USB over TCP解决方案,但连接似乎有问题,因为ADB监视器反复报告“devicemonitor failed to start monitoring”。是否有一种方法可以直接从开发机器上的客户端连接到设备上的守护程序,使用网络而不是USB连接或其他可行的选项?
当前回答
步骤1。
确保adb主机和Android设备都在同一个Wifi网络上。
步骤2。
使用USB电缆将Android设备与计算机连接。一旦你这样做,你的主机将检测到你的设备,adb将开始在电脑上以USB模式运行。您可以使用adb设备检查连接的设备,同时通过执行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地址。方式:2转到可用的Wi-fi网络列表。你连接的那个,点击它并了解你的IP。方法: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设备中看不到它,只需使用上一步的命令重新连接:
$ 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服务器来杀死你的adb服务器,然后再次完成所有步骤。
希望这有帮助!参考:
http://developer.android.com/tools/help/adb.html#wirelesshttp://codetheory.in/android-debug-bridge-adb-wireless-debugging-over-wi-fi/
其他回答
从非根设备上的计算机
(请注意,这也可以使用根设备完成,但您可以在不需要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
要仅使用一个命令在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,它也会触发。
我需要让USB和TCPIP都为ADB工作(不要问),所以我做了以下工作(使用其他人从xda开发人员发布的指示)
使用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
通过USB连接设备并确保调试正常,然后运行:adb tcpip 5555adb connect<DEVICE_IP_ADRESS>:5555断开USB并继续进行无线调试。完成并想切换回USB调试后,运行:adb-s<设备_IP_ADDRESS>:5555
要查找设备的IP地址,请转到设备上的“设置”>“Wi-Fi”>“高级”>“IP地址”,或运行adb shell netcfg。
不需要根。一次只能调试一个设备。
请参阅此XDA帖子。
adb命令位于Android SDK的平台工具文件夹中。
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中获取屏幕截图,您可以从其名称中猜到。