solopi源码(录制回放部分)导读...持续更新

录制回放模块解析

概述

solopi官方对录制回放部分做了技术解析,包含了整体的技术实现和流程,但看完觉得有些细节还是没有说的很清楚,本篇文章主要做一些细节性的补充。

官方文档地址:SoloPi 架构解析 | 录制回放的原理与实战

录制流程主要技术点

getevent与AccessibilityService获取控件信息

solopi主要通过getevent与AccessibilityService结合的方式获取控件节点,实际上,可能有人会问,直接通过AccessibilityService不是可以获取到节点吗?例如这样:

AccessibilityNodeInfo nodeInfo = event.getSource();

getSource()可以获取被点击元素节点,再通过getRootInActiveWindow()拿到全部控件节点,不就可以计算出xpath了吗?

这样确实可以获取到节点,但存在一个问题,event.getSource()是异步回调,AccessibilityService只是在执行完事件后给你一个结果而已,开发者对事件本身是无法参与的;

假如存在一个按钮,点击后会跳转到一个新页面,此时你通过event.getSource()拿到这个按钮的节点,接着你想用过getRootInActiveWindow()获取控件树,此时你会发现,你拿到的全部控件树已经是新页面的控件树了,那个按钮节点甚至不存在了,此时计算xpath就是错误的。

为了规避这种问题,solopi采用把操作截停的办法,这也是为什么solopi里录制操作,需要用户自己选择操作的原因:solopi通过getevnet截取android的事件流,获取到用户触摸事件的坐标,再通过该坐标,对比AccessibilityService获取到的控件树,得到用户操作的是哪个控件;而对控件的操作,则由用户再次点选操作菜单后,由封装AccessibilityService的操作类执行。

你可能感兴趣的:(solopi源码(录制回放部分)导读...持续更新)