我正在尝试调试摩托罗拉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连接或其他可行的选项?
当前回答
要仅使用一个命令在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连接的根设备上使用外壳)
首先,打开命令提示符(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
我找到了一个方便的方法,我想与大家分享。
对于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。如果您正在连接到wifi网络,并且设备的IP在每次连接到热点时都在不断变化,您可以通过在wifi设置中进行配置使其保持静态。谷歌搜索。
现在将文件保存为ABD_Connect.bat(MS-DOS批处理文件)。
将其保存在某个位置,并指向“桌面”或“开始”按钮的快捷方式。
通过USB连接一次,然后尝试运行一些应用程序。之后,只要您想无线连接,请双击快捷方式。
注意:有时您需要在每次调试应用程序时打开快捷方式。所以在桌面上为快捷键设置快捷键会更方便。我做了一个快捷键,如Ctrl+Alt+S。所以每当我想调试时,我都会按Shift+F9和Ctrl+Alt+S
注意:如果在cmd窗口中发现device=null错误,请检查您的IP,它可能已更改。
如果您想通过WiFi轻松连接设备以运行、调试或部署Android应用程序,可以使用我开发的开源IntelliJ插件。这里是代码,这里是可以使用的插件。
用法很简单。这里有一张gif图:
您还可以使用SSH本地端口转发。但它仍然需要USB电缆。使用USB将手机连接到运行sshd的计算机(主机)。在远程(来宾)pc上启动能够端口转发/隧道的SSH客户端。例子:
plink -L 5037:localhost:5037 <host_IP_address>
我使用这种构造将设备连接到虚拟机。Eltima USB转以太网不够稳定(调试期间超时)。
SSH隧道免费工作,更可靠。
adb tcpip 5555
奇怪,但这只适用于我,如果我连接了USB电缆,那么我就可以拔下USB并使用其他adb。
当返回到usb时也是如此,
adb usb
只有在连接了usb的情况下才能工作。
如果我发布
setprop service.adb.tcp.port 5555
or
setprop service.adb.tcp.port -1
然后停止并启动adbd,我仍然需要usb电缆,否则它无法工作。
所以,如果我的ADB over usb不工作,我打赌我也无法通过WiFi启用ADB。