Android屏幕同步和录制工具

本帖已被设为精华帖!,

简介

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

屏幕显示的可选参数和选项有:

  • 缩放尺寸(–scale 或 -s),可以根据手机屏幕分辨率来调整,默认按照1080×1920的屏幕设置的0.5倍
  • 关闭交互(–simple), 交互需要minitouch支持

屏幕录制

python -matx screenrecord

屏幕录制的可选参数和选项有:

  • 缩放尺寸(–scale 或 -s), 同屏幕显示
  • 输出路径(–out 或 -o), 默认值为out.avi
  • 设置文件覆盖(–overwrite), 开启后如果输出路径已存在会强制覆盖
  • 设置为竖屏方向(–portrait), 开启后会按照竖屏的尺寸输出为视频,适用于竖屏应用
  • 设置关闭同步显示(–quiet 或 -q), 开启后不会同步显示当前手机画面的窗口

参考

  • atx: https://github.com/codeskyblue/AutomatorX
  • opencv: https://github.com/Itseez/opencv
  • openstf-minicap: https://github.com/openstf/minicap
  • openstf-minitouch: https://github.com/openstf/minitouch
  • openstf-rotationwatcher https://github.com/openstf/RotationWatcher.apk

* 注:本文来自网络投稿,不代表本站立场,如若侵犯版权,请及时知会删除