可以分为三种情况:
1. 只有一个Master主机的情况,即只有一台装了STF和ADB的主机,连接了一些设备,通过访问这个主机来管理这些设备。
2. 一个Master主机+若干个SLAVE的情况,Master主机安装STF和ADB,SLAVE支持ADB,安装/未安装STF:
2.1 SLVAE主机不支持STF
2.2 SLAVE主机支持STF
一、只有一个Master主机的情况:
1. 安装后首先要开启DB服务,直接运行即可:
rethinkdb
2. 启动STF服务:
如果只是简单的测试或者本地使用,直接运行 stf local即可
这样的话你直接在浏览器中输入:http://localhost:7100/#!/devices 即可管理所有的设备。但是你无法在非本机的浏览器通过http://10.1.137.158:7100/#!/devices 的方式去访问,会直接跳转成:http://localhost:7100/auth/mock/。
如果想要能够实现远程访问就需要运行:
~ stf local --public-ip 10.1.137.158
后面是本机的IP地址,这样相当于把你的IP地址设置为一个公开可访问的(局域网内)。
下图是我用手机浏览器访问的界面(局域网):
二、一个Master主机+若干个SLAVE的情况
如果你需要管理的设备都比较集中,或者比较少,那么将这些设备都连接到这一个启用了STF服务的机器上,然后你通过浏览器来访问这个机器从而操作这些手机就可以了。接下来你的工作就只是想办法把这些设备都连接到这个机器上而已。
如果你的机器比较分散(公司的办公地点在北京和上海两个地方,都有设备需要管理)或者比较多,且希望能统一管理,就需要想更多的办法:
Master主机安装STF和ADB,SLAVE支持ADB,安装/未安装STF。
Master主机开启STF服务,SLAVE主机通过adb连接测试设备,SLAVE和Master主机之间建立连接,将所连接的测试设备桥接到Master主机上去,这样用户通过访问Master主机就可以访问所有的测试设备。测试设备具体所在的位置对于用户来说是透明的,都只是显示连接到了Master主机而已。
环境概况:
Linux 服务器,安装stf完整组件,支持android sdk,作为master节点。[IP:10.1.132.193]
MAC,安装stf(本例中并没有使用也没有启用),支持android sdk。[IP:10.1.137.158]
两台电脑网络互通。
Linux服务器自己连接的手机设备(WIFI连接):
MAC连接的手机设备(USB连接):
1、Mac(10.1.137.158)上启动 adb server 并对外暴露 5037 端口执行:
adb -a -P 5037 fork-server server
但是如果adb版本比较高的话,就会提示reply fd for adb server to client communication not specified.用如下命令替换:
adb nodaemon server -a
2、在Linux服务器(10.1.132.193)上启动stf服务
rethinkdb
stf local --public-ip 10.1.132.193 --allow-remote
3、通过配置 adb host 的方式和 MAC 主机互连
在Master机器(Linux:10.1.132.193)上执行:
stf provider --name CentOS7.4-wangjing-109 --min-port 7400 --max-port 7700 --connect-sub tcp://127.0.0.1:7114 --connect-push tcp://127.0.0.1:7116 --group-timeout 20000 --public-ip 10.1.132.193 --storage-url http://localhost:7100/ --adb-host 10.1.137.158 --adb-port 5037 --vnc-initial-size 600x800 --allow-remote
连接成功后,在SLAVE机器(Mac:10.1.137.158)上展示如下:
在Master机器(Linux:10.1.132.193)上展示如下:
红框部分就是连接到了SLAVE所连接的设备(目前是offline状态)。
从别的设备浏览器上访问的情况如下:
可以看到显示的Location是Master主机的名称,这时从SLAVE机器(Mac:10.1.137.158)上去adb devices也是没有了e115ac6d这个设备了。它的作用就是将所连接的设备通过自己这个桥梁连接到Master机器(Linux:10.1.132.193)上。
补充说明(上面没有SLAVE没有开启STF,相当于是没有装STF的情况。装有STF的还没有实践,先放在下面作参考)
上述操作行为,仅针对其它操作系统上没有安装stf,所以采用 adb host 的方式连上对应操作系统上的安卓设备,假如某此系统服务上已安装stf相应组件,
如:10.16.6.63_Liunx主机,安装了 stf,想将Liunx主机的安卓设备连接到主Master(MAC:172.17.9.49)平台上。
通过配置新的 provider 连上Liunx 主机上的设备:
在Liunx主机上启动 stf provider 【差异在于,不需要增加--adb-host】
stf provider --name mikezhoudeMac-mini.local --min-port 7400 --max-port 7700 --connect-sub tcp://172.17.9.49:7114 --connect-push tcp://172.17.9.49:7116 --group-timeout 20000 --public-ip 172.17.9.49 --storage-url http://172.17.9.49:7100/ --vnc-initial-size 600x800 --allow-remote
nohup stf local --public-ip 10.1.132.193 --allow-remote &
主要参考:
STF [STF 手机设备管理平台] 连接其它操作系统上的安卓设备实操介绍(该文的作者写了好几篇STF相关的文章,可以一并查看 https://testerhome.com/mikezhou)
stf 连接各操作系统上安卓设备的操作方法分享
六、使用
1. 远程控制
搭建好环境之后,这就是一台连接着N台Android手机的服务器了(这个服务器可能是放在你们公司某个神秘的地方,一般称为无线实验室),在上图的手机控制界面可以看到:
这时候,在你自己的电脑上(客户端),通过命令行输入adb connect 192.168.1.102:7401,就可以将自己的电脑连接到远程服务器上的手机真机,就好像手机是连接在自己电脑上一样,你可以在Android Studio中Android Device Monitor上看到手机硬件,可以直接打断点debug。