ADB远程桌面连接本地手机

一、背景

由于各种不可抗力,如疫情、公司暂停空调等原因,很多人被迫居家办公。对于Android开发者来说,最难受的莫过于远程无法连接手机,无法调试的问题。

二、ADB数据转发

1、介绍

在Android上,adb默认占用的是5037端口,我们可以通过端口转发的形式来将adb的数据转发到远程,这里有一个工具adbportforward

adbportforward有Client和Server的概念,Server就是手机的提供方,而Client则是手机的使用方,在这里Client代表我们登录的远程桌面,Server代表我们使用的电脑,在使用的电脑上面插手机设备。

2、使用

具体使用可见adbportforward wiki

Server端配置:

java -jar adbportforward.jar server adblocation=[adb location] port=6037

设置adb地址(这里是adb.exe的上一级地址),然后设置端口(默认是6037)

Client端配置:

java -jar adbportforward.jar client adblocation=[adb location] remotehost=10.xxx port=6037

设置adb地址,然后设置需要连接到的远程host(也可以是IP),然后设置远程host的端口(默认是6037)

3、原理

查看adbportforward发现,它是通过转发端口数据来实现通信的。

Server端:

myPortForward = new PortForward( serverPort, "127.0.0.1", 5037 );
myPortForward.start( Executors.newCachedThreadPool() );

serverPort代表需要暴露的端口,将本地的5037与serverPort进行相互转发

Client端:

myPortForward = new PortForward( 5037, myRemoteHost, myRemotePort );
myPortForward.start( Executors.newCachedThreadPool() );

myRemoteHost和myRemotePort是需要连接的主机以及其暴露的端口,将本地的5037端口与远程端口之间互相转发。

理想情况下,Client的myRemoteHost就对应Server的IP,myRemotePort就对应Server暴露的serverPort,这样我们就打通了从远程桌面到本地桌面的连接,adb就可以正常使用了。

三、隧道连接

1、公网IP

一般来讲,我们家用的宽带是运营商使用NAT方式形成的组网,这种情况下,很多条宽带公用一个公网ip池,我们虽然可以访问互联网,但是从互联网却不能访问到我们家里的设备。那这样的话adbforward无法建立socket连接,也就无法使用。

可以先向运营商申请一个公网ip,这个ip是隔一段时间变化的,但是可以使用,拿到公网ip之后,需要将光猫改成桥接模式,然后修改拨号方式以及端口映射,这个网上有其他教程,这里就不做展开了,如果在baidu上面查到的ip与我们路由器的ip一致的话,代表成功了。

有些地方运营商可能不想提供ip,或者说只有某些套餐才提供公网ip,这样我们就没有办法使用公网ip了,那么就引出了内网穿透

2、内网穿透

内网穿透通俗的来讲,就是把我们本地的机器,通过一个中间服务器,转发到互联网上去,这样其他地方就可以访问本机的内容了,但是这里有个前提,就是必须要有一个拥有公网ip的中间服务器做一次转发才可以,所以传输速率取决于远程、本机、服务器之中带宽最小的那个。

1)FRP

frp是一个开源的内网穿透工具。如果有腾讯云或者阿里云之类的服务器,我们可以用frp来实现内网穿透。

frp的使用比较简单,

服务端:

frps.ini

[common]
bind_port = 7000

然后启动./frps -c frps.ini

客户端:

frpc.ini

[common]
server_addr = XX.XX.XX.XX
server_port = 7000

[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 6000

server_addr是服务器的公网ip,server_port对应上面的bind_port,type这里由于我们使用socket,所以选择tcp,local_ip与local_port默认即可,remote_port是开放出去的端口,我们的adbforward在Client端就使用这个端口。

设置完之后,客户端启动./frpc -c frpc.ini。

设置完成之后,如果输出正常,我们就可以通过adbforward进行连接了。

但是要注意的一点是,阿里云这些默认都有端口限制,所以要在安全组这里把我们需要映射的端口放开。

2) Sakura frp

Sakura frp也是一个内网穿透工具,只不过它帮我们充当了公网服务器的职能,也就是说,我们只要使用Sakura建立隧道,然后远程连接隧道的ip就可以了。这个软件有免费的流量限额,签到可以获取流量,比较良心。

注册账号,下载软件之后,建立tcp隧道,参数使用默认即可(Server port默认22),然后打开隧道,我们可以看到如下的日志:

Tunnel/GOWIYN5Z TCP 类型隧道启动成功
Tunnel/GOWIYN5Z 使用 [XXX.cloud:45208] 来连接到你的隧道
Tunnel/GOWIYN5Z 或使用 IP 地址连接(不推荐):[XX.XX.XX.XX:45208]

现在我们可以使用adbforward了,Server端端口设置为22,Client端设置host与端口如上面日志所示,然后就发现可以正常使用adb了。

相关文章

学习编程是顺着互联网的发展潮流,是一件好事。新手如何学习...
IT行业是什么工作做什么?IT行业的工作有:产品策划类、页面...
女生学Java好就业吗?女生适合学Java编程吗?目前有不少女生...
Can’t connect to local MySQL server through socket \'/v...
oracle基本命令 一、登录操作 1.管理员登录 # 管理员登录 ...
一、背景 因为项目中需要通北京网络,所以需要连vpn,但是服...