如何通过TCP连接到使用ADB的Android?
我试图debugging一个摩托罗拉Droid的应用程序,但我有一些困难通过USB连接到设备。 我的开发服务器是在Hyper-V中运行的Windows 7 64位虚拟机,因此无法通过USB或guest虚拟机直接连接。
我安装了几种不同的USB-over-TCP解决scheme,但是由于ADB监视器反复报告“设备监视器无法开始监视”,连接似乎有问题。 有没有一种方法可以直接从开发机器上的客户端连接到使用networking而不是USB连接的设备上的守护进程,或者可能有其他可行的选项?
手动过程
从你的设备,如果它是根
根据xda-developers的post ,您可以使用以下命令通过Wi-Fi启用ADB:
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
确保使用实际分配给设备的IP地址replace192.168.0.101
。
您可以通过两种方式find平板电脑的IP地址:
手动IP发现:
进入Android的WiFi设置,单击操作栏中的菜单button(垂直省略号),点击高级,然后在屏幕底部查看IP地址。
使用ADB发现IP:
通过adb执行以下命令:
adb shell ip -f inet addr show wlan0
告诉ADB守护进程返回通过USB侦听
adb usb
使应用程序自动化的过程
Google Play上还有几个应用程序可以自动执行此过程。 快速searchbuild议adbWireless , WiFi ADB和ADB WiFi 。 所有这些都需要root权限,但adbWireless需要更less的权限。
如果你的手机是根植的,这真的很简单。
从Google Play下载terminal模拟器(有很多免费的)。 确保您的Android设备已连接到您的Wi-Fi并获取Wi-Fi IP地址。 打开terminal程序并键入:
su setprop service.adb.tcp.port 5555 stop adbd start adbd
现在转到您的计算机(假设您正在使用Windows)并在桌面上为“cmd.exe”(不带引号)创build一个快捷方式。
右键单击cmd快捷方式,然后select"Run as Administrator"
更改为您的android-sdk-windows\tools
文件夹
types:
adb connect ***wifi.ip.address***:5555 (example: adb connect 192.168.0.105:5555)
adb现在应该说你已经连接了。
注意:如果你太快而不能提供连接命令,则可能会失败。 因此,在你说这不起作用之前,至less尝试两次五秒钟。
-
通过USB连接设备并确保debugging正在工作,然后运行:
adb tcpip 5555 adb connect <DEVICE_IP_ADDRESS>:5555
-
断开USB并继续进行无线debugging。
-
当您完成并想要切换回USBdebugging时,运行:
adb -s <DEVICE_IP_ADDRESS>:5555
要查找设备的IP地址,请转到设备上的Settings > Wi-Fi > Advanced > IP Address
,或者运行adb shell netcfg
。
没有根需要。 一次只能debugging一个设备。
看到这个XDA的post 。
adb
命令位于Android SDK的platform-tools
文件夹中。
从adb --help
:
connect <host>:<port> - Connect to a device via TCP/IP
顺便说一句,这是一个命令行选项。
您应该尝试将手机连接到您的Wi-Fi,然后从您的路由器获取其IP地址。 这不会在单元networking上工作。
港口是5554。
我需要使用 USB和TCPIP为ADB工作(不要问),所以我做了以下(使用其他人从xda-developers发布的指示)
使用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
对于PC用户:
步骤1:
您必须在您的Android手机中启用开发者选项。
您可以使用这种方式启用开发人员选项。
•打开设置>关于>软件信息>更多。
•然后点击“内部编号”七次以启用开发人员选项。
•返回到“设置”菜单,现在您将可以看到“开发人员选项”。
•点击它,然后从下一个屏幕的菜单中打开USBdebugging。
第2步:
打开cmd并键入adb。
如果您发现adb不是有效的命令,那么您必须添加一个path到环境variables。
•首先去你的SDK安装文件夹
按照这个path,这个path只是一个例子。 d:\软件\开发\ Andoird \ SDK \ SDK \平台工具\; d:\软件\开发\ Andoird \ SDK \ SDK \工具;
•现在searchWindows系统高级设置
•
打开环境variables。
然后打开path并粘贴下面的path这是一个例子。
你的SDKpath是不同于我的请使用你的。 d:\软件\开发\ Andoird \ SDK \ SDK \平台工具\;
d:\软件\开发\ Andoird \ SDK \ SDK \工具;
第3步:
打开cmd并键入adb。 如果您仍然看到adb不是有效的命令,那么您的path没有正确设置上面的步骤。
现在你可以连接你的android手机到PC。
打开cmd并键入adb设备,您可以看到您的设备。 find你的手机的IP地址。
types: – adb tcpip 5555
获取手机的IP地址
adb shell netcfg
现在,
adb connect "IP address of your phone"
现在运行你的android项目,如果没有看到你的设备,然后再次键入adb连接你的手机的IP地址
对于Linux和MAC用户 :
第1步:打开terminal并使用安装adb
sudo apt-get install android-tools-adb android-tools-fastboot
通过USB线将手机连接到PC。 在terminal中键入以下命令
adb tcpip 5555
使用adb,连接你的android手机ip地址。
删除你的手机。
使用TCP端口连接您的平板电脑。 确保您的系统和设备连接到相同的networking。
- 打开控制台cmd.exe
- 键入
adb tcpip 5555
- 进入系统 – >开发选项 – > USBdebugging – >取消selectTCPIP连接
- 键入
adb connect 192.168.1.2
这是您的设备IP地址 - 连接到192.168.1.2
使用端口转发连接尝试做端口转发,
adb转发tcp: <PC port>
tcp: <device port>
喜欢:
adb转发tcp:5555 tcp:5555。
C:\ Users \ abc> adb转发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
首先,您必须通过USB连接您的设备
然后将您的设备连接到WIFI并获取IP地址。 虽然仍然通过USB连接键入这个命令行或通过Android Studioterminal
adb tcpip 5555 adb connect <device IP>:5555
你会看到这些消息:
restarting in TCP mode port: 5555 connected to 172.11.0.16:5555
现在卸下USB电缆,你仍然会看到你的logcat正常
完成。 请享用
我不知道如何连接设备没有任何USB连接,但如果你设法连接它可能在另一台计算机上,您可以切换adbd到TCP模式发出
adb tcpip <port>
从terminal通过以下方式通过networking上的任何PC连接到您的设备:
adb connect <ip>:<port>
也许也可以从设备上的terminal切换到TCP模式。
如果你想轻松地连接你的设备运行,debugging或通过WiFi部署你的Android应用程序,你可以使用我开发的开源IntelliJ插件。 这里是代码, 在这里插件准备使用。
用法很简单。 在这里你有一个gif:
假设您将adbpath保存到您的Windows环境path中
- 在android中激活debugging模式
- 通过USB连接到电脑
- 打开命令提示符键入:adb tcpip 5555
- 断开您的平板电脑或智能手机从PC
- 打开命令提示符键入:adb connect IPADDRESS(IPADDRESS是您的平板电脑或智能手机的DHCP / IP地址,您可以通过Wi-Fi – >当前连接的networkingfind)
现在在命令提示符下,你应该看到如下的结果:连接到xxx.xxx.xxx.xxx:5555
正如Brian所说:
根据xda开发者的post,你可以使用命令从设备启用通过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上还有几个应用程序可以自动执行此过程。
它的工作原理。你只需要访问androidshell和键入这些命令…
另一个(更简单的)解决scheme是在市场上:adbWireless,它会自动设置您的手机。
根是必需的! 对彼此而言…
从没有根的设备上的计算机
(请注意,这也可以使用rooted设备来完成,但是您可以在不需要USB连接的根设备上使用shell)
首先,打开命令提示符(CMD)。 如果您使用Android Studio或IntelliJ,那么您可以使用包含在其中的控制台。
如果可能,打开SDK位置,右键单击并按“在这里启动命令提示符”。 并不是每个人都有这个选项,所以你也必须这样做(/这些)命令:
更换驱动器(如果适用)
D:
并访问SDK和平台工具。 将此pathreplace为您的SDK位置:
D:/sdk/path/here/platform-tools
现在你可以访问androiddebugging桥。
现在,将设备连接到电脑,请执行以下操作:
adb tcpip <port> adb connect <ip>:<port>
您想要连接到的端口在哪里(默认为5555
),并且是您要连接的设备的IP。
请注意: 5555
是默认端口,只需写入IP地址即可连接。 如果你使用自定义的端口,至less可以提高安全性。 通过wifi进行USBdebugging可能会被滥用,但是只有当设备连接到想要滥用设备的计算机时。 至less使用非默认端口会使连接变得困难。
如果您使用自定义端口,请确保将其添加到IP之后。 写没有端口连接到5555
,如果你没有使用,连接将失败。
您可以通过两种方式find设备的IP地址:
-
根据您的设备,确切的名称可能会有所不同。 打开设置并转至关于设备 – > 状态 – > IP地址
-
使用亚行来获取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>
来执行与非root的版本相同的操作。
如果你想禁用端口并返回到USB监听:
setprop service.adb.tcp.port -1 stop adbd start adbd
你也可以使用一个Android Studio插件来为你做(现在不记得名字),而且对于有根使用的用户,还可以select下载一个Android应用程序来build立电话连接(adb connect可能仍然是必需的)。
有些手机的开发者选项设置(这适用于一些无根电话,但也可能是一些根植电话),允许通过设备本身的无线networking来切换ADB,而无需启动root或电脑连接。 虽然有几个电话有这个
adb tcpip 5555
奇怪的,但这只适用于我,如果我有USB电缆连接,然后我可以拔掉USB,并与其他一切adb去。
和回到usb时一样,
adb usb
只有在USB连接的情况下才能工作。
我发出这个没关系
setprop service.adb.tcp.port 5555
要么
setprop service.adb.tcp.port -1
然后停止和启动adbd,我仍然需要USB电缆或不工作。
所以,如果我的亚洲开发银行不在工作,我敢打赌我也不能通过WiFi启用亚行。
要使用一个命令在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
它也会触发。
步骤1。
确保您的adb主机和Android设备在同一个Wifinetworking上。
第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地址。 有几种方法可以做到这一点:
- 方法:1进入设置 – >关于手机/平板电脑 – >状态 – > IP地址。
- WAY:2转到可用的Wi-Finetworking列表。 你连接的那个,点击它并且知道你的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 kill-server
你的adb服务器,并再次执行所有的步骤。
希望有所帮助!
参考:
您也可以使用SSH本地端口转发。 但它仍然涉及USB电缆。 使用USB将您的手机连接到运行sshd的计算机(主机)。 在远程(来宾)PC上启动一个能够进行端口转发/隧道的SSH客户端。 例:
plink -L 5037:localhost:5037 <host_IP_address>
我使用这种结构将我的设备连接到虚拟机。 Eltima USB到以太网不够稳定(debugging期间超时)。
SSH隧道免费工作,更可靠。
我发现其他答案混淆。 更简单的使用adbWireless:
http://ppareit.github.com/AdbConnect/
只需在手机上安装一个应用程序,即可通过wifi切换debugging,安装一个eclipse插件即可完成。
我把通过TCP自动启用和连接ADB的batch file放到通过USB连接的设备上。 有了它,你不必手动inputIP。
@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
以下是使用蓝牙的Brian解答的扩展:
-
在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
-
使用蓝牙networking进行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 。
脚步 :
-
su
– 切换到超级用户。 -
setprop service.adb.tcp.port 5555
– 指定tcp端口 – 5555是此处的端口号 -
stop adbd
– 停止adbd服务。 -
start adbd
– 启动adbd服务。
这与我的Windows PC完美的工作
我尝试在我的氰手机上启动,或通过plink启动。 与plink我不能启动与苏su壳… sudo或su命令不起作用。 在启动时,我不知道它是如何工作的! 我的shell程序在ssh中使用su -c "sh /storage/sdcard1/start_adb.sh"
和最后3个命令(没有su – )
谢谢
你需要做以下的事情:
- 首先,将ADB添加到您的环境path。
- 在你的CLI里键入这个命令: adb connect YOUR_DEVICE_IP:PORT_NUMBER (example adb connect 192.168.100.100:5555 )
使用adbwireless应用程序启用手机,然后使用Windows机器上的adb connect与其通话。 手机上的adbwireless应用程序告诉你如何连接到它,给出的IP地址和一切。
更有趣的替代方法是通过USB连接,通过adb tcpip 5555告诉手机使用TCPIP,然后断开USB,然后使用adb连接。 这是非常困难的,因为这样你必须自己弄清楚手机的IP地址(adbwireless告诉你的IP),你必须通过USB连接,你必须运行adb tcpip(adbwireless照顾也是如此)。
所以:在手机上安装adbwireless。 用它。 这是可能的,我经常在Linux和Windows上进行。
在我的系统上是这样的:
在我的Linuxshell的Android设备上,一个简单的“ifconfig”没有给我我的IP地址。 我不得不input:
ifconfig eth0
-要么-
加上netcfg
得到我的IP地址。 (我知道eth0被configuration,因为我在我的dmesg中看到了。)然后我做了:
setprop service.adb.tcp.port -1
停止adbd
开始adbd
然后在我的Win7盒子(运行Eclipse 3.7.1的那个)上。 我打开了一个命令提示符
\ Android的SDK \平台工具>
没有作为pipe理员运行。 然后我做了一个
adb连接12.345.678.90
我从来没有把港口。 如果我做了一个
adb tcpip 5555
它说无法find设备,然后什么都没有出现在我的“adb设备”列表中。 也就是说,只有当我不执行上面的tcpip命令时才有效。
我可以做一个“adbshell”和混乱我的Android设备。 但是我的Android设备现在不出现在我的Run-> Run Configurations-> Target标签中。 另一方面,如果我保持目标选项卡设置为自动。 然后,当我通过运行 – >运行我的应用程序时,它运行在我的Android设备上,即使我的Android设备甚至没有列为我的目标之一。
我确实得到了这个工作。 没有使用任何USB电缆。
- 应用程序无线。
-
运行。 这将设置IP和端口; 然后在dos
cd C:\Program Files\Android\android-sdk\platform-tools adb connect "192.168.2.22:8000 "enter"
连接的。
我find了一个方便的方法,我想分享。
对于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。 如果您正在连接到无线networking,并且每次连接到热点时,如果您的设备的IP持续发生变化,则可以通过在WiFi设置中进行configuration将其设置为静态。 去谷歌上查询。
现在将文件保存为ABD_Connect.bat(MS-DOSbatch file)。
将其保存到某处,然后将快捷方式转到“桌面”或“开始”button
通过USB连接一次,然后尝试运行一些应用程序。 之后,无论何时想要无线连接,请双击快捷方式。
注意 :有时您需要在每次debugging应用程序时打开快捷方式。 所以在桌面上制作快捷方式的快捷键会更方便。 我做了一个快捷键,如Ctrl+Alt+S
所以只要我想debugging,我会按Shift+F9
和Ctrl+Alt+S
注意 :如果在cmd窗口中发现device = null错误,请检查您的IP,它可能已经更改。
另外一个注意事项(苦学):你不应该有你的公司VPN连接在同一时间…
我只是按照以下步骤开始工作,以便我可以连接到我的Android设备。
第一步:打开Android设备的terminal窗口,执行以下命令。
- su – 切换到超级用户。
- setprop service.adb.tcp.port 5555 – 指定tcp端口 – 5555是此处的端口号
- 停止adbd – 停止adbb服务。
- 启动adbd – 启动adbd服务。
步骤2:通过ADB,执行bellow命令(从ADBconfiguration的path)
adb connect 10.10.10.50:5555 – 10.10.10.50是android设备的IP地址,5555是端口号。
adb可以通过TCP套接字与adb服务器进行通信。 你可以通过telnetvalidation。
$ 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命令witch将adb命令cmd
发送给tcp套接字socket
def send_to_adb(socket, cmd) socket.printf("%04x%s", cmd.length, cmd) end
第一个例子发送长度为12(hex为000c
)的命令host:version
。 你可以享受更多令人兴奋的命令,比如framebuffer:
从framebuffer获取截图,你可以从它的名字中猜到。
If you want to be able to do it on a button click then:
- In Android Studio -> Settings/Preferences -> Plugins -> Browse Repositories
- Search 'ADB wifi'
- Install and restart android studio
- Connect your device (with USB Debugging enabled) to your computer with USB (you will need to do this just once per session)
- Tools -> Android -> ADB WIFI -> ADB USB TO WIFI (Or use the key combination mentioned. For MacOS: ctrl + shift + w)
Note: If it did not work:
- Your wifi router firewall may be blocking the connection.
- ABD may not be installed on your computer.
- 为什么当我尝试使用adb shell打开数据库时,在根用户的Nexus One上出现“sqlite3:not found”错误?
- Eclipse错误“ADB服务器没有确认,启动守护进程失败”
- 是否有可能安装apk文件,如果多个模拟器/设备连接
- Genymotion Android模拟器 – adb访问?
- 如何通过ADBlockingAndroid屏幕?
- 无法在Ubuntu中执行adb。 下载的文件是为x86-64,而我有i686
- 无法将Nexus 4连接到adb:未经授权的
- build立设备进行开发(??????没有权限)
- 为什么adb安装<same-packagename-always-release>失败?