使用adb,可以与连在本机的手机等设备连接,给手机发送命令,这是常见的应用场景,但其实adb也能够连接与其他主机相连的设备。
adb连接的原理是adb客户端程序先连接主机的adb服务程序(adb daemon),通过主机服务程序转发请求到手机设备的adb daemon,而adb客户端的命令行参数中有一个”-H“参数,使用了该参数,adb客户端不再与本机的adb服务程序连接,而是与指定主机的adb服务程序连接。此时,adb命令也就转发给与那个主机连接的设备。
要打通连接,还有下面几个问题要解决:
1、adb版本
官方发布的adb版本并不支持该功能,可能新版本已经解决该问题。输入adb不带参数会输出帮助信息,如果没有”-H“参数说明,那该版本就不支持该功能。
你可以更新版本、或者下载其他渠道的构建版本。但是如果你有编译android源码的环境,那么自己也可以编译一个新版本。通过下面的命令编译:
$ . build/envsetup.sh
$ make adb
编译windows下运行的版本,需要安装mingw
$ sudo apt-get install mingw32
$ make USE_MINGW=y adb
2、adb对外端口
adb客户端运行的时候,如果adb daemon没有运行,会自动启动adb daemon,但是通过”-H“参数连接远程主机时,不会自动启动adb daemon,需要手动在远程主机启动。另外默认方式启动的adb daemon不会侦听对外端口,只会侦听本地回环接口。需要在启动时加上”-a“参数,才会侦听对外端口。启动命令为:
$ adb server fork-server -a
3、防火墙和内网穿越
防火墙和内网穿越与adb没有直接关系,这里要说的是主机adb daemon的侦听端口是TCP端口5037,所以要端口防火墙对应端口,才能联通。同样需要在路由器上配置应用端口的转发规则,才能连接内网主机上的adb和设备。