背景

魔都疫情严重,导致小伙伴们实验室回不去,测试设备分散在不同的人手里,测试的时候想多整一些设备测试都没办法,因此想看看有没有办法可以远程连接小伙伴的设备,即自己的PC-》(网络连接)-》小伙伴的PC-》(USB/WIFI等等)-》测试机;

这里结合使用场景设定了一些前提条件:

  • 连接为非侵入式:即不使用远程桌面之类的软件占用小伙伴的电脑,为了让小伙伴在贡献测试机的时候还能愉快地使用自己的电脑,只需要为他人提供一定的带宽和闲置的测试机;
  • 测试效果最好要和本地相同:不仅要能使用adb命令行,还要使用adb相关的软件如scrcpy进行测试;

太长不看

有测试机的Server端:

1
$ adb kill-server && adb -a nodaemon server start

连接的Client端:

1
2
3
4
5
6
# adb命令
$ adb -H {Server端内网地址} -P {Server端监听端口} {adb命令}

# windows环境下Scrcpy连接
$ set ADB_SERVER_SOCKET=tcp:{Server地址}:{Server端口,默认为5037}
$ scrcpy.exe --tunnel-host={Server地址}

解决方法

参与方网络连接问题

首先我们的目的是连接上测试机,我们知道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
2
3
4
Android Debug Bridge version 1.0.39
Version 1:8.1.0+r23-5ubuntu2

error: could not install *smartsocket* listener: listening on specified hostname currently unsupported

自己PC的Win 10上的adb版本是41,仅供参考,具体的支持版本我没有去更新日志中细看,最好是保持Server端和Client端的adb版本能匹配;

1
2
Android Debug Bridge version 1.0.41
Version 29.0.6-6198805

使用Scrcpy连接

Scrcpy是基于adb开发的安卓实时交互软件,还有一些诸如录屏等等功能,有了这个软件可以实时操作和查看到测试机的界面状态,而且还有Alt+O直接关闭测试机的屏幕显示,直接进行一个无感测试,不会让小伙伴的手机屏幕疯狂跳转。

Scrcpy中也有类似的远程连接功能,分别是无加密的信道和有加密的ssh信道,这里只介绍无加密的信道。使用—tunnel-host指定Server的地址,—tunnel-port指定Server的端口,默认为5037。但是直接连接会失败,在issue中看到需要先设置一下adb server的环境变量才能成功,并且这个在项目的Readme也没有提及,就很怪。具体如下:

1
2
3
# windows环境
$ set ADB_SERVER_SOCKET=tcp:{Server地址}:{Server端口,默认为5037}
$ scrcpy.exe --tunnel-host={Server地址}

这样就可以愉快地使用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