atx 是基于图像识别的自动化测试工具,里面也附带了一些其他的小工具,比如本文要介绍的 Android 屏幕同步显示和录制工具。
屏幕同步显示主要是将手机屏幕同步显示到电脑上,方便项目展示交流。atx 的屏幕同步显示工具支持简单模式和交互模式,交互模式下还可以在电脑端来进行点击、滑动和一些按键操作。在屏幕旋转的时候同步窗口也会自动旋转。
屏幕录制是将屏幕变化记录到视频文件中,可以输出为 avi 或 mp4 格式的文件,输出视频的宽高尺寸是根据手机的宽高、缩放系数、按横屏或竖屏来确定,开始录制后,如果屏幕发生旋转,会自动缩放图片来适应视频尺寸,空白会以黑边填充。视频分辨率也是利用缩放系数来控制,更容易做到高清无码。
截屏使用了 openstf 的 minicap 工具,minicap 可以截取屏幕输出到标准输出,或者输出到 socket。选择输出到 socket 然后转发到 pc 上,在 pc 端监听并解析消息,就可以得到相对比较实时的屏幕图像了,经测试,此方法同步图像的速度大致为 30 毫秒。图片展示用的 opencv 模块。
minicap 启动的时候需要根据屏幕旋转方向来确定启动参数,如果已经启动之后,再旋转屏幕,会出现只显示一半图像的情况。为解决这个问题,使用了 openstf 的 rotationwatcher 来监听屏幕旋转,当发生屏幕旋转时重启 minicap 进程,重启耗时约 1 秒。
屏幕交互采用了 minitouch 来模拟点击和滑动操作,用 adb shell sendevent 来模拟按键和键盘操作。minitouch 也是通过 socket 和手机端连接,不断发操作指令过去。sendevent 则是每次都需要通过 adb 子进程来发送指令,速度比较慢,此外用键盘输入也不能附带键盘状态(例如 Shift),所以这边还有较大的限制,后续计划参考 openstf 的 STFService 来做改善。
录屏跟截屏一样使用的 minicap,唯一增加的就是用 opencv 的 VideoWrite 不断将图像写入视频文件。写入时将 fps 限定在了 24 帧,虽然截屏是在后台进程,不需要考虑 minicap 的 30 毫秒限制 (不过高于这个频率之后也没太大意义),但写入文件占用了一定时间,帧率太高会导致卡死。
安装了 atx 库之后,连接手机,先安装 minicap
python -matx minicap
如果需要开启屏幕显示的交互,则还需要安装 minitouch(最新版 atx 在安装 minicap 时会同步安装 minitouch)
python -matx screen
屏幕显示的可选参数和选项有:
python -matx screenrecord
屏幕录制的可选参数和选项有: