布景

随着货拉拉事务的不断发展,研制团队逐步强大,对测验手机的需求量也逐步增大。常常会面临手机资源办理混乱,各团队之间手机资源不能共用,手机利率低,机型覆盖不行全面,手机上的主动化使命难于监控等问题。为了解决这些问题,货拉拉大数据研制团队从0到1打造了货拉拉云真机渠道。

介绍

从0到1打造货拉拉云真机平台

云真机并不是什么新式的概念了,它是随着移动互联网的鼓起而呈现的一种服务形式。将各种品牌、类型、体系的手机放在云端,通过长途操控的形式在云端完成真机环境下的测验/调试。 长途真机使用方便,减少了开发测验人员设备缺乏的烦恼,也解决了硬件置办本钱、手机类型、体系版别复杂,碎片化严重等问题,极大地下降了置办、运维的费用,也使测验效率有了规模化的提高。

货拉拉云真机渠道首要是为了方便内部研制团队的开发测验,合理化使用手机资源。中心功用如下:

  • 手机投屏及长途操控
  • 手机运转状态监控
  • 手机分组办理
  • 主动化使命的批量分发

方案挑选

关于云真机的开源技能完成首要有OpenSTF和OpenATX。现在市面上比较老练的产品有百度MTC、Testin云测、腾讯WeTest。 通过对OpenSTF和OpenATX的源码解读以及完成原理剖析,发现底层中心的技能完成都是依据以下3点:

  1. 1.依据adb完成电脑端到手机端的指令交互
  2. 2.依据minicap快速截图完成手机端到电脑端的实时投屏
  3. 3.依据minitouch完成电脑端对手机的长途操控

结合货拉拉研制团队内部的干流技能体系,终究确认选用如下技能方案:

  1. 1.选用Spring Boot作为项目的基础框架
  2. 2.选用Netty-Websocket完成高效安稳的双向通讯
  3. 3.选用minicap完成手机投屏
  4. 4.选用minitouch完成长途操控

中心技能

1. adb

adb即Android Debug Bridge,首要用于电脑端与Android设备交互,是在电脑端完成安卓手机群控的中心,adb下载地址。

在服务器上装置好adb后,就能够通过usb接入手机设备。一般服务器上的usb接口都比较有限,需求凭借usb hub进行usb接口的扩展,这儿需求留意一定要选用支撑外接电源的usb hub设备,以保障多个usb设备接入后仍然能正常供电。

机架部署图:

从0到1打造货拉拉云真机平台
adb的常用指令:

//发动adbserver指令,一般履行adb指令会主动拉起adb服务
adbstart-server
//停止adbserver指令
adbkill-server
//检查接入adb的所有设备列表
adbdevices
//检查指定设备CPU支撑的abi类型
adb-sFIKN7SRCJV65T8M7shellgetpropro.product.cpu.abi
//检查指定设备的SDK版别
adb-sFIKN7SRCJV65T8M7shellgetpropro.build.version.sdk
//检查指定设备的Android体系版别
adb-sFIKN7SRCJV65T8M7shellgetpropro.build.version.preview_sdk
//检查指定设备对应目录下的文件
adb-sFIKN7SRCJV65T8M7shellls/data/local/tmp/
//推送minicap驱动文件到设备的/data/local/tmp/目录下
adb-sFIKN7SRCJV65T8M7pushminicap/data/local/tmp/
//驱动文件赋权
adb-sFIKN7SRCJV65T8M7shellchmod777/data/local/tmp/minicap
//发动指定设备上的minicap服务
adb-sFIKN7SRCJV65T8M7shellLD_LIBRARY_PATH=/data/local/tmp/data/local/tmp/minicap-P1080x1920@1080x1920/0-t
//创建minicap服务的forward端口,用来树立socket长链接通讯
adb-sFIKN7SRCJV65T8M7forwardtcp:1313localabstract:minicap

2. minicap

minicap是STF开源的安卓手机截图东西,用来代替安卓体系原生的screencap截图东西,凭借minicap生成图片流能够完成手机的投屏作用。其特点是截图速度非常快,可控性强,支撑socket接口,能够轻松达到30-40FPS的投屏作用,minicapgithub地址。

该东西分为两个部分,一个是动态衔接库.so文件,一个是minicap可履行文件。STF供给的minicap文件依据CPU 的ABI分为如下4种:x86_64 、x86、armeabi-v7a、arm64-v8a。而minicap.so文件在这个基础上还要分为不同的sdk版别。 在实际开发过程中,需求依据安卓手机CPU 的ABI类型和sdk版别挑选相对应的minicap、minicap.so驱动文件推送到安卓手机上,并赋予履行权限。

从0到1打造货拉拉云真机平台

minicap完成实时投屏作用的步骤如下:

从0到1打造货拉拉云真机平台

3. minitouch

minitouch也是STF供给的开源产品,用于模拟触发Android 设备上的多点触摸事件和手势操作,完成手机的长途操控。github地址。

该东西只包含一个minitouch可履行文件,依据CPU 的ABI分为如下4种:x86_64 、x86、armeabi-v7a、arm64-v8a。在实际开发过程中,需求依据安卓手机CPU 的ABI类型挑选相对应的驱动文件推送到安卓手机上,并赋予履行权限。

从0到1打造货拉拉云真机平台

minitouch完成长途操控的步骤如下:

从0到1打造货拉拉云真机平台

要点完成

1.选用Netty-Socket通讯

要完成对一台安卓手机的实时投屏和长途操控,需求在服务后台和手机同时树立minicap的socket衔接以及minitouch的socket衔接。其间minicap的socket衔接用来实时承受minicap产生的图片流信息,minitouch的socket衔接用来承受用户在浏览器上对投屏的手机界面通过鼠标操作生成的操作指令流信息。 由于后端服务需求实时将minicap生成的图片流推送到前端,所以这儿选用了WebSocket技能。经过实际测验发现,常用的依据tomcat的Websocket完成,在高并发、高流量场景下安稳性实在太差,终究咱们挑选了依据Netty完成的Websocket通讯,在应对上百台手机的接入、大流量实时投屏的场景时,依然能够坚持非常安稳流通的通讯。

maven依赖

<dependency>
<groupId>org.yeauty</groupId>
<artifactId>netty-websocket-spring-boot-starter</artifactId>
<version>0.9.5</version>
</dependency>

从0到1打造货拉拉云真机平台

2.主动装置minicap、minitouch驱动

要完成手机的实时投屏和长途操控,依赖于minicap、minitouch这两项技能,可是一般安卓手机上默认情况下都没有相关的驱动文件,需求咱们主动将驱动文件推送到手机上。假如接入上百台手机都需求手动去推送驱动文件,显然将是个巨大的工程,依据此咱们加入了主动装置minicap、minitouch驱动的功用。 其完成原理是树立一个监听器用来监听接入adb的安卓设备,假如检测到设备没有装置minicap、minitouch驱动,则依据设备CPU 的ABI类型以及SDK版别主动推送驱动文件,并给驱动文件赋权,完成驱动装置后给手机打上标识防止驱动文件的重复检测和装置。

3.场景投屏形式

实时投屏是云真机渠道中最大的技能难点。假如要确保实时投屏作用的清晰度和流通度,则minicap产生的图片流就会很大,会加大图片流传输和解析的压力,导致体系的并发能力下降,接入的设备数量受限。而假如直接下降图片流的清晰度和数量,则会导致投屏的清晰度下降,长途操作卡顿的问题。

那么终究该如何取舍呢?

货拉拉云真机渠道,结合体系中的各种场景,将投屏形式做了如下3种区分:

单机操控场景

该场景是最典型的投屏场景,其特点是对投屏作用的清晰度和流通度以及实时性都要求较高,用户的长途操控需求能实时在投屏界面上显示出来。 当用户选中需求操控的手机进入对应的操控界面后,即为单机操控场景。该场景下,前端只需求坚持与操控手机的WebSocket衔接,断开其他WebSocket衔接,以减少资源耗费。

为了确保投屏的实时性,需求与手机上的minicap服务树立socket衔接,实时承受图片流,回来给前端展现。

用户也能够在投屏界面中,自己设置投屏的图片质量。其底层原理是通过设置minicap发动指令中的参数,改动回来的图片质量。

adbshellLD_LIBRARY_PATH=/data/local/tmp/data/local/tmp/minicap-h

从0到1打造货拉拉云真机平台

其间,参数Q是用来操控图片质量,取值范围为0~100.

从0到1打造货拉拉云真机平台

多机监控场景

多机监控场景首要是用来对一组手机上的主动化使命的运转情况进行实时监控。其特点是需求对多个手机同时进行投屏展现,对投屏的实时性要求较低,且不需求支撑手机长途操控的功用。 其底层完成是给每个投屏手机都树立一个Netty Websocket衔接,可是后端服务并不需求实时监听minicap回来的图片流,而是只需求通过定时使命距离1~3s获取最新的手机截图,推送到前端即可。 这样既能够满意多机监控场景的需求,又不会因为多机投屏监控产生太大的图片流,对体系造成较大的IO压力。

从0到1打造货拉拉云真机平台

静默场景

静默场景是最简略的一种场景,该场景下并不会主动刷新手机投屏的界面,仅仅在用户进入手机列表页面或刷新页面时,才会去恳求后端获取最新的手机截屏来展现。

通过针对不同场景的投屏机制办理,终究货拉拉云真机渠道既满意了各场景的投屏需求,又做到了投屏IO流量的可控。

总结

货拉拉云真机渠道起步时间较晚,旨在整合内部手机资源,提高手机的使用率以及监控手机上主动化使命的运转情况。相较市面上老练的云真机产品,的确还存在诸多缺乏,但单从实时投屏和长途操控等中心功用上来说,基本能满意内部需求,走出了从0到1的坚实一步。后续咱们将安身公司实际事务场景,持续演进,一步步打磨好货拉拉云真机渠道。

笔者介绍:万里 |高档大数据工程师,现任职于货拉拉大数据使用团队,首要担任智能定价、数据云台等大数据产品的建设作业。