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了。

四、结论

打通隧道,以及连接adbforward成功之后,远程桌面就可以像正常的桌面一样使用adb来调试手机了

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值