不占用电脑的情况下的远程连接安卓设备
背景
魔都疫情严重,导致小伙伴们实验室回不去,测试设备分散在不同的人手里,测试的时候想多整一些设备测试都没办法,因此想看看有没有办法可以远程连接小伙伴的设备,即自己的PC-》(网络连接)-》小伙伴的PC-》(USB/WIFI等等)-》测试机;
这里结合使用场景设定了一些前提条件:
- 连接为非侵入式:即不使用远程桌面之类的软件占用小伙伴的电脑,为了让小伙伴在贡献测试机的时候还能愉快地使用自己的电脑,只需要为他人提供一定的带宽和闲置的测试机;
- 测试效果最好要和本地相同:不仅要能使用adb命令行,还要使用adb相关的软件如scrcpy进行测试;
太长不看
有测试机的Server端:
1 | adb kill-server && adb -a nodaemon server start |
连接的Client端:
1 | adb命令 |
解决方法
参与方网络连接问题
首先我们的目的是连接上测试机,我们知道PC连接测试机的方法要么是USB,要么通过WiFi(或者说是同一个局域网),WiFi可行么?可行,但是学校给的VPN软件(就是你 easyconnect)有一个问题就是每个账号同一时间只能有一个终端登录,这意味着让手机通过VPN连进内网的话会影响到PC的内网连接,不符合我们的非侵入式借用原则,因此adb WiFi调试方案PASS;
那么现在的网络情况为:小伙伴的PC和自己的PC在同一个局域网中,且小伙伴的测试机通过USB和小伙伴的PC连接,这里将小伙伴的电脑命名为Server端,自己的PC为Client端;
Server端设置
Server端的设置比较轻松,需要做的事情只有一件,就是把原本只监听本地IP地址连接请求的adb server更改为能监听所有网络接口的server:
1 | adb kill-server && adb -a nodaemon server start |
随后要做的事情就是保持这个命令开着就可以,该命令默认监听5037端口,可以通过-P参数修改端口。
另外有一个前置条件,Windows的话注意要配置下防火墙,开放下端口,或者使用的时候把局域网的防火墙给关掉。
Client端设置
普通的adb连接配置
非常容易的连接命令:
1 | adb -H {Server端内网地址} -P {Server端监听端口} {adb命令} |
注意事项:adb的版本要匹配/大于某个版本,经测试,在Ubuntu 20.04上的最新Android platform tools里面带的adb不能使用上面的命令进行连接,会报以下的错误:
1 | Android Debug Bridge version 1.0.39 |
自己PC的Win 10上的adb版本是41,仅供参考,具体的支持版本我没有去更新日志中细看,最好是保持Server端和Client端的adb版本能匹配;
1 | Android Debug Bridge version 1.0.41 |
使用Scrcpy连接
Scrcpy是基于adb开发的安卓实时交互软件,还有一些诸如录屏等等功能,有了这个软件可以实时操作和查看到测试机的界面状态,而且还有Alt+O直接关闭测试机的屏幕显示,直接进行一个无感测试,不会让小伙伴的手机屏幕疯狂跳转。
Scrcpy中也有类似的远程连接功能,分别是无加密的信道和有加密的ssh信道,这里只介绍无加密的信道。使用—tunnel-host指定Server的地址,—tunnel-port指定Server的端口,默认为5037。但是直接连接会失败,在issue中看到需要先设置一下adb server的环境变量才能成功,并且这个在项目的Readme也没有提及,就很怪。具体如下:
1 | windows环境 |
这样就可以愉快地使用scrcpy在小伙伴的测试机上进行测试啦!
残念
然而连接上之后发现,学校的VPN不给力,网速200KB/s,scrcpy远程连接上之后简直就是PPT。。可能要想想怎么不用内网连接了。。
参考
https://github.com/Genymobile/scrcpy
https://github.com/Genymobile/scrcpy/issues/3091
https://cloud.tencent.com/developer/article/1864005