提问



我正在尝试在Motorola Droid上调试应用程序,但是我在通过USB连接到设备时遇到了一些困难。我的开发服务器是在Hyper-V中运行的Windows 7 64位VM,因此无法通过客户端或主机上的USB直接连接。[89] [90]


我安装了几个不同的USB-over-TCP解决方案,但由于ADB监视器反复报告devicemonitor无法启动监视,因此连接似乎存在问题。有没有办法直接从开发机器上的客户端连接到使用网络而不是USB连接的设备上的守护进程,或者可能是另一种可行的选项?[91]

最佳参考


手动流程



从您的设备,如果它已植根



根据xda-developers上的帖子,您可以使用以下命令从设备启用Wi-Fi上的ADB:[92]


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会更容易。从通过USB连接设备的计算机上的命令行发出命令


adb tcpip 5555
adb connect 192.168.0.101:5555


务必将192.168.0.101替换为实际分配给设备的IP地址。


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


手动IP发现:


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


使用ADB发现IP:


通过adb执行以下命令:


adb shell ip -f inet addr show wlan0


告诉ADB守护进程返回通过USB监听


adb usb


自动化流程的应用程序



Google Play上还有一些应用可以自动完成此过程。快速搜索建议adbWireless,WiFi ADB和ADB WiFi。所有这些都需要root访问权限,但 adbWireless 需要更少的权限。[93] [94] [95]

其它参考1


如果您的手机已植根,这非常简单。


从Google Play下载终端模拟器(有很多免费的)。确保您的Android设备已连接到Wi-Fi并获取 Wi-Fi IP地址。打开终端程序并输入:[96]


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


现在转到您的计算机(假设您使用的是Windows)并在桌面上为cmd.exe创建快捷方式(不带引号)。


右键单击cmd快捷方式,然后选择"Run as Administrator"


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


类型:


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

(example: adb connect 192.168.0.105:5555)


adb现在应该说你已经连接了。


注意:如果您太快而无法提供连接命令,则可能会失败。因此,在你说这不起作用之前,至少尝试两次五秒钟。

其它参考2



  1. 通过USB连接设备并确保调试正常,然后运行:


    adb tcpip 5555
    adb connect <DEVICE_IP_ADDRESS>:5555
    

  2. 断开USB连接并继续进行无线调试。

  3. 当您完成并希望切换回USB调试时,请运行:


    adb -s <DEVICE_IP_ADDRESS>:5555
    



要查找设备的IP地址,请转到设备上的Settings > Wi-Fi > Advanced > IP Address或运行adb shell netcfg


不需要root。一次只能调试一个设备。


看到这个XDA帖子。[97]


adb命令位于Android SDK的platform-tools文件夹中。

其它参考3


adb --help:


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


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


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


这个港口是5554。

其它参考4


对于PC用户:


第1步:

您必须在Android手机中启用开发者选项。

 您可以使用这种方式启用开发人员选项。

   •打开设置>关于>软件信息>更多。

   •然后点击Build number七次以启用Developer选项。

   •返回设置菜单,现在您将能够看到开发人员选项
   •点击它并从下一个屏幕上的菜单中打开USB Debugging


第2步:


打开cmd并输入adb。

如果您发现adb不是有效命令,则必须添加环境变量的路径


•首先转到SDK安装文件夹

  遵循此路径,此路径仅用于示例。
  d:\\软件\\开发\\ Andoird \\ SDK \\ SDK \\平台工具\\;
  d:\\软件\\开发\\ Andoird \\ SDK \\ SDK \\工具;点击
 •现在搜索Windows系统高级设置




[98]


打开Environment变量。


[99]


然后打开路径并粘贴以下路径
 这是一个例子。

 你的SDK路径与我的不一样请使用你的。 d:\\软件\\开发\\ Andoird \\ SDK \\ SDK \\平台工具\\;点击
d:\\软件\\开发\\ Andoird \\ SDK \\ SDK \\工具;点击


[100]


第3步:


打开cmd并输入adb。如果您仍然看到adb不是有效命令,那么您的路径未正确设置,请按照上述步骤操作。


[101]


现在你可以将你的Android手机连接到PC。


打开cmd并输入adb设备,即可看到您的设备。
找到您的手机IP地址。



[102]


键入: - adb tcpip 5555


[103]


获取手机的IP地址


adb shell netcfg


现在,


adb connect "IP address of your phone"


现在运行你的Android项目,如果没有看到你的设备,然后再键入adb连接手机的IP地址


[104]


[105]


适用于Linux和MAC用户:


第1步:打开终端并使用安装adb


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



通过USB线将手机连接到PC。
在终端
中键入以下命令


adb tcpip 5555


使用adb,连接你的Android手机IP地址。


取下你的手机。

其它参考5


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



  1. 在Android中激活调试模式

  2. 通过USB连接到电脑

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

  4. 断开平板电脑或智能手机与电脑的连接

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



现在在命令提示符下,您应该看到如下结果:connected to xxx.xxx.xxx.xxx:5555

其它参考6


我需要两者 USB和TCPIP为ADB工作(不要问),所以我做了以下(使用其他人从xda开发人员发布的指示)[106]


使用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

其它参考7


使用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 port> tcp:<device port>


喜欢:



  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设备连接到系统,请按照相同的步骤操作
对于有根设备


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

其它参考8


首先,您必须通过USB连接设备


然后将您的设备连接到WIFI并获取IP地址。
虽然仍然通过usb连接,但在命令行或通过Android Studio终端输入


adb tcpip 5555
adb connect <device IP>:5555


您将看到以下消息:


restarting in TCP mode port: 5555
connected to 172.11.0.16:5555


现在移除USB电缆,您仍然可以正常看到您的logcat


完成。请享用

其它参考9


我根本不知道如何在没有任何USB连接的情况下连接设备,但是如果您设法连接它可能在另一台计算机上,您可以通过发布将adbd切换到TCP模式


adb tcpip <port>


从终端通过网络上的任何PC通过wifi连接到您的设备:


adb connect <ip>:<port>


也许也可以从设备上的终端切换到TCP模式。

其它参考10


如果您想轻松连接设备以通过WiFi运行,调试或部署Android应用程序,您可以使用我开发的开源IntelliJ插件。这是代码,这里可以使用插件。[107] [108]


用法很简单。在这里你有一个gif:


[109]

其它参考11


从非root设备上的计算机



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


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


如果可能,请打开SDK位置,右键单击,然后按在此处启动命令提示符。并非所有人都有此选项,因此您还必须执行此(/这些)命令:


更换驱动器(如果适用)


D: 


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


D:/sdk/path/here/platform-tools


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


现在,将设备连接到计算机,执行:


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


您要连接的端口在哪里(默认为5555),并且是您要连接的设备的IP。


请注意:5555是默认端口,只需写入IP地址就可以连接它。如果使用自定义端口,至少可以提高安全性。通过wifi进行USB调试可能会被滥用,但前提是设备连接到想要滥用设备的计算机。使用非默认端口至少会使连接更加困难。


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


您可以通过两种方式找到设备的IP地址:



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

  • 使用ADB获取IP



从控制台,执行:


adb shell ip -f inet addr show wlan0





完成连接后,您可以通过执行以下操作断开设备与计算机的连接:


adb disconnect <ip>:<port>


或者没有IP断开所有设备。如果您使用自定义端口,则必须指定要断开连接的端口。此处的默认值为5555。


要禁用端口(如果这是您要执行的操作),请在连接的设备上执行以下命令:


adb usb


或者,您可以重新启动设备以删除tcpip连接


从有根设备上的计算机



首先,您需要访问shell。您可以使用USB线连接设备并使用adb shell或从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可能是仍然需要)。


有些手机在开发者选项中有一个设置(这适用于一些无根电话,但也可能是一些根电话),允许通过wifi从设备本身切换ADB,无需root或计算机连接即可启动它。虽然很少有手机有这个

其它参考12


正如布莱恩所说:



  根据xda-developers上的帖子,您可以使用命令从设备启用WiFi上的ADB

  
  setprop service.adb.tcp.port 5555

  
  停止adbd

  
  开始adbd

  
  你可以禁用它并返回ADB来监听USB

  
  setprop service.adb.tcp.port -1

  
  停止adbd

  
  开始adbd

  
  如果您已经有USB访问权限,则更容易切换到使用WiFi。从通过USB连接设备的计算机上的命令行发出命令

  
  adb tcpip 5555

  
  adb connect 192.168.0.101:5555

  
  告诉ADB守护进程返回通过USB监听

  
  adb usb

  
  Android Market上还有几个应用程序可以自动完成此过程。



它的工作原理。你只需要访问android shell并输入那些命令......


另一个(更简单)的解决方案是在市场上:adbWireless,它会自动设置你的手机。


Root是必需的!对彼此而言...

其它参考13


adb tcpip 5555


很奇怪,但这只适用于我,如果我连接了USB线,那么我可以拔掉USB,然后用其他所有东西adb。


和返回usb时一样,


adb usb


仅在USB连接时才有效。


如果我发布,那没关系


setprop service.adb.tcp.port 5555


要么


setprop service.adb.tcp.port -1


然后停止&启动adbd,我仍然需要USB电缆或它不起作用。


所以,如果我的ADB over usb不起作用,我打赌我也不能通过WiFi启用ADB。

其它参考14


要只用一个命令在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来检查它是否正在侦听。如你所知,如果你想改变netstat也会触发它[[service.adb.tcp.port手动。

其它参考15


第1步。



确保两者您的adb主机和Android设备位于同一个Wifi网络上。






第2步。



使用USB线将Android设备与计算机连接。一旦这样做,主机将检测到您的设备,并且adb将开始在计算机上以USB模式运行。您可以使用adb devices检查连接的设备,同时通过执行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地址。有几种方法可以做到这一点:



  • WAY:1 转到设置 - >关于手机/平板电脑 - >状态 - > IP地址。

  • WAY:2 转到可用的Wi-Fi网络列表。您连接的那个,点击它并了解您的IP。

  • WAY: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 devices中没有看到它,那么只需使用上一步的命令重新连接:


$ 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-server来杀死你的adb服务器,然后再次执行所有步骤。


希望有所帮助!






参考:



  • http://developer.android.com/tools/help/adb.html#wireless

  • http://codetheory.in/android-debug-bridge-adb-wireless-debugging-over-wi-fi/


其它参考16


您也可以使用SSH本地端口转发。但它仍然涉及USB电缆。使用USB将手机连接到运行sshd的计算机(主机)。在远程(guest)PC上启动一个能够进行端口转发/隧道连接的SSH客户端。例如:[110] [111]


plink -L 5037:localhost:5037 <host_IP_address>


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


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

其它参考17


我发现其他答案令人困惑。更简单的使用adbWireless:


http://ppareit.github.com/AdbConnect/[112]


只需在手机上安装一个应用程序,通过wifi切换调试,安装一个eclipse插件就可以了。

其它参考18


我整理了一个批处理文件,用于自动启用并通过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

其它参考19


这是Brian使用蓝牙的答案的扩展:



  1. 在Linux上,使用Blueman通过蓝牙与您的设备共享PC互联网:


    $ sudo apt-get install blueman
    $ blueman-manager
    Pair them: Search devices after enabling Bluetooth
    on your phone and making it visible
    $ blueman-services
    Network > [X] Network Access Point (NAP)
    Your Phone > Settings > Bluetooth > Paired Device > [X] Internet access
    

  2. 使用蓝牙网络进行ADB命令:


    $ adb tcpip 5555
    $ adb connect $(adb shell ip -f inet addr show bt-pan | egrep -o '[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+' | head -n1):5555
    



完成后返回USB模式:


$ adb disconnect
$ adb usb


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

其它参考20


步骤:



  1. su - 切换到超级用户。

  2. setprop service.adb.tcp.port 5555 - 要指定tcp端口 - 5555是此处的端口号

  3. stop adbd - 停止adbd服务。

  4. start adbd - 启动adbd服务。



这与我的Windows PC ssh完美配合


我尝试在我的cyanogen手机上启动或使用plink启动它。使用plink我不能用su启动shell ... sudo或su命令不起作用。在启动时我不知道它是如何工作的!
我的shell程序在ssh中使用su -c "sh /storage/sdcard1/start_adb.sh"和最后3个命令(没有su - )


谢谢

其它参考21


你需要做以下事情:



  • 首先,将ADB添加到您的环境路径。

  • 在您的CLI中输入此命令 adb connect YOUR_DEVICE_IP:PORT_NUMBER (示例 adb connect 192.168.100.100:5555)


其它参考22


使用adbwireless应用程序启用手机,然后使用Windows机器上的adb connect与之通信。手机上的adbwireless应用程序会告诉您如何连接它,提供IP地址和所有内容。


不那么有趣的选择是通过USB连接,告诉手机通过adb tcpip 5555使用TCPIP,然后断开USB,然后使用adb connect。这要困难得多,因为这样你必须自己弄清楚手机的IP地址(adbwireless告诉你IP),你必须通过USB连接,你必须运行adb tcpip(adbwireless也会照顾它)。


所以:在手机上安装adbwireless。用它。有可能,我会在Linux和Windows上定期执行此操作。

其它参考23


在我的系统上它是这样的:


在我的Linux shell中的Android设备上,一个简单的ifconfig没有给我我的IP地址。我不得不输入:


ifconfig eth0


-要么-


加上netcfg


获取我的IP地址。 (我知道eth0已配置,因为我在dmesg中看到它。)然后我做了:


setprop service.adb.tcp.port -1


停止adbd


开始adbd


然后在我的Win7盒子(运行Eclipse 3.7.1的盒子)上。我打开了一个命令提示符


\\ Android的SDK \\平台工具>


无需以管理员身份运行然后我做了一个


adb connect 12.345.678.90


我从来没有放过港口。如果我做了


adb tcpip 5555


它说它无法找到设备然后我的adb设备列表中没有出现任何内容。即只有我不执行上面的tcpip命令它才有效。


我可以做一个adb shell并搞乱我的Android设备。但是我的Android设备现在没有出现在我的Run-> Run Configurations-> Target选项卡中。另一方面,如果我将目标选项卡设置为自动。然后当我通过Run-> Run运行我的应用程序时,它确实在我的Android设备上运行,即使我的Android设备甚至没有被列为我的目标之一。

其它参考24


我确实让这个工作了。没有使用任何usb电缆。



  • app adb wireless。

  • 运行它。这将设置IP和端口;然后在dos


    cd C:\Program Files\Android\android-sdk\platform-tools adb connect "192.168.2.22:8000 "enter"
    



连接的。

其它参考25


我只是按照以下步骤开始工作,以便我可以连接到我的Android设备。


步骤1:在Android设备中打开终端窗口并执行以下命令。



  1. su - 切换到超级用户。

  2. setprop service.adb.tcp.port 5555 - 指定tcp端口 - 5555是此处的端口号

  3. 停止adbd - 停止adbb ser副。

  4. 启动adbd - 启动adbd服务。



步骤2:通过ADB,执行波纹管命令。(从配置ADB的路径)


adb connect 10.10.10.50:5555 - 这里10.10.10.50是android设备的IP地址,5555是端口号。

其它参考26


我找到了一个方便的方法,我想分享。


适用于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设置中进行配置使其保持静态.Google it。


现在将文件保存为ABD_Connect.bat(MS-DOS批处理文件)。


将其保存在某处并将快捷方式引用到桌面或开始按钮。


通过USB连接一次,并尝试运行一些应用程序。之后,只要您想要无线连接,请双击快捷方式。


注意:有时您需要在每次调试应用程序时打开快捷方式。因此,为桌面快捷方式创建快捷键将更加方便。我已经制作了一个像Ctrl+Alt+S这样的快捷键。所以每当我想调试时,我都会按Shift+F9Ctrl+Alt+S


注意:如果在cmd窗口中发现device=null错误,请检查您的IP,它可能已更改。

其它参考27


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

其它参考28


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 with <message.length><msg>
以下是ruby命令巫婆发送adb命令cmd对tcp套接字socket


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


第一个例子发送长度为12的命令host:version(十六进制为000c)。
你可以享受更多令人兴奋的命令,比如framebuffer:,它从帧缓冲区获取截图,你可以从它的名字中猜出。

其它参考29


如果您希望能够在按钮上单击,则:



  1. 在Android Studio中 - >设置/首选项 - >插件 - >浏览存储库

  2. 搜索ADB wifi

  3. 安装并重启android studio

  4. 使用USB将您的设备(启用USB调试功能)连接到您的计算机(每个会话只需执行一次)

  5. 工具 - > Android - > ADB WIFI - > ADB USB TO WIFI (或使用提到的组合键。对于MacOS:ctrl + shift + w)



注意:如果它不起作用:



  1. 您的wifi路由器防火墙可能阻止了连接。

  2. 您的计算机上可能未安装ABD。