|
| 1 | +# 架构设计 |
| 2 | + |
| 3 | +本文档描述 Assists 自动化框架的整体架构、模块划分与依赖关系。该框架基于 **Android 无障碍服务**封装,提供节点查找、操作、浮窗、截图、输入法、Web 桥接等能力,并围绕 Web 自动化与日志分析形成完整开发生态。 |
| 4 | + |
| 5 | +--- |
| 6 | + |
| 7 | +## 一、概述 |
| 8 | + |
| 9 | +Assists 是一套**基于 Android 无障碍服务**封装的自动化框架,目标是通过统一的 API 与多种增强能力,支持在设备上完成 UI 自动化、脚本控制与 Web 端动态编排。核心特点包括: |
| 10 | + |
| 11 | +- **基础层**:封装系统无障碍服务与能力增强 API,提供浮窗管理(添加/删除/显示/隐藏/缩放/移动) |
| 12 | +- **增强层**:自定义输入法、屏幕截图、OpenCV 图像识别,弥补无障碍在部分场景的不足 |
| 13 | +- **桥接层**:WebView + JS 通道,使 Web 端可直接调用 Native 能力,实现「写 Web 即写自动化」 |
| 14 | +- **应用层**:Web 自动化运行平台 AssistsX、assistsx-js 步骤器、日志分析系统(**仅限付费用户使用**),支撑开发调试与问题定位 |
| 15 | + |
| 16 | +--- |
| 17 | + |
| 18 | +## 二、模块总览与依赖关系 |
| 19 | + |
| 20 | +### 2.1 模块依赖图(Mermaid) |
| 21 | + |
| 22 | +```mermaid |
| 23 | +flowchart TB |
| 24 | + subgraph 应用与生态 |
| 25 | + AssistsX[AssistsX 应用<br/>Web 自动化运行平台 + 节点分析服务] |
| 26 | + AssistsX_JS[assistsx-js<br/>Web 端 API + 步骤器] |
| 27 | + LogSystem[日志分析系统<br/>⚠️ 仅限付费用户] |
| 28 | + end |
| 29 | +
|
| 30 | + subgraph 桥接层 |
| 31 | + AssistsWeb[assists-web<br/>WebView 原生↔JS 通道] |
| 32 | + end |
| 33 | +
|
| 34 | + subgraph 增强层 |
| 35 | + AssistsIme[assists-ime<br/>自定义输入法] |
| 36 | + AssistsMp[assists-mp<br/>屏幕录制/截图] |
| 37 | + AssistsOpcv[assists-opcv<br/>OpenCV 图像识别] |
| 38 | + end |
| 39 | +
|
| 40 | + subgraph 基础层 |
| 41 | + Assists[assists<br/>无障碍 + 浮窗 + API] |
| 42 | + end |
| 43 | +
|
| 44 | + AssistsX --> AssistsWeb |
| 45 | + AssistsX_JS -.->|调用| AssistsWeb |
| 46 | + AssistsWeb --> Assists |
| 47 | + AssistsWeb --> AssistsMp |
| 48 | + AssistsWeb --> AssistsIme |
| 49 | + AssistsMp --> Assists |
| 50 | + AssistsOpcv --> Assists |
| 51 | + AssistsIme --> Assists |
| 52 | + LogSystem -.->|提交日志/节点| Assists |
| 53 | +``` |
| 54 | + |
| 55 | +### 2.2 模块一览表 |
| 56 | + |
| 57 | +| 模块 | 类型 | 职责 | 依赖 | |
| 58 | +|------|------|------|------| |
| 59 | +| **assists** | Library | 无障碍服务封装、能力增强 API、浮窗管理 | 无(基础) | |
| 60 | +| **assists-ime** | Library | 自定义输入法,用于「仅输入法可触发搜索」等场景 | assists | |
| 61 | +| **assists-mp** | Library | 屏幕录制与截图,整屏/节点截图,弥补无障碍无法直接截图的场景 | assists | |
| 62 | +| **assists-opcv** | Library | OpenCV 封装,当前以模板匹配做屏幕识别增强 | assists | |
| 63 | +| **assists-web** | Library | WebView 桥接,原生与 JS 双向通道,暴露 assists 能力给 Web | assists, assists-mp, assists-ime | |
| 64 | +| **AssistsX** | App | Web 自动化运行平台,安装于手机,开发者专注 Web 开发自动化;支持节点分析工具(局域网浏览器访问,分析当前页面节点) | assists-web(及底层库) | |
| 65 | +| **assistsx-js** | JS 库 | Web 端 API 封装 + 步骤器,便于开发与维护大型自动化 | 通过 assists-web 注入的接口调用 | |
| 66 | +| **日志分析系统** | 系统能力 | 测试提交日志与页面节点信息,供开发分析、精准定位多设备/多界面 Bug。**⚠️ 仅限付费用户使用** | 与 assists 能力配合 | |
| 67 | + |
| 68 | +--- |
| 69 | + |
| 70 | +## 三、各模块说明 |
| 71 | + |
| 72 | +### 3.1 assists(基础框架) |
| 73 | + |
| 74 | +- **定位**:整个框架的基础库,所有增强与桥接均基于此构建。 |
| 75 | +- **核心能力**: |
| 76 | + - **无障碍服务封装**:连接系统 AccessibilityService,提供节点树获取、查找(按 id/text/class 等)、点击、长按、输入、滚动等标准能力。 |
| 77 | + - **能力增强 API**:在系统无障碍之上做封装与扩展,便于上层统一调用。 |
| 78 | + - **浮窗管理**:浮窗的添加、删除、显示、隐藏,以及浮窗的**缩放、移动**,可快速实现悬浮控制面板、小窗等 UI。 |
| 79 | +- **依赖**:仅依赖 Android SDK 与通用工具库,不依赖其他 Assists 子模块。 |
| 80 | +- **发布**:Maven 产物为 `assists-base`(如 `com.github.ven-coder:assists:assists-base`)。 |
| 81 | + |
| 82 | +### 3.2 assists-ime(自定义输入法) |
| 83 | + |
| 84 | +- **定位**:为 assists 提供输入法维度的增强,主要解决「页面无搜索按钮、仅能通过输入法触发搜索」等场景。 |
| 85 | +- **主要作用**:在搜索框获得焦点后,通过自定义输入法的「搜索/提交」等动作触发搜索,供 assists 自动化流程调用。 |
| 86 | +- **依赖**:依赖 **assists**,作为 assists 的扩展能力被使用;**assists-web** 也依赖 assists-ime,以便在 Web 自动化中调用该能力。 |
| 87 | + |
| 88 | +### 3.3 assists-mp(屏幕录制与截图) |
| 89 | + |
| 90 | +- **定位**:屏幕内容截图与录制库,用于增强 assists 在「图像」维度的能力。 |
| 91 | +- **核心能力**: |
| 92 | + - **整屏截图**:对整个屏幕进行截图,弥补无障碍服务无法直接截取屏幕画面的限制。 |
| 93 | + - **指定节点区域截图**:结合 assists 的节点信息(如 bounds),对指定控件区域截图,便于做局部识别或上报。 |
| 94 | +- **使用场景**:当无障碍无法直接拿到屏幕像素(如部分游戏、视频、安全界面)时,作为补充方案;也可为模板匹配、OCR 等提供图像输入。 |
| 95 | +- **依赖**:依赖 **assists**;**assists-web** 依赖 assists-mp,从而在 Web 端可调用截图相关 API。 |
| 96 | + |
| 97 | +### 3.4 assists-opcv(OpenCV 图像识别) |
| 98 | + |
| 99 | +- **定位**:集成并封装 OpenCV,增强**图片处理与识别**能力,当前主要用作屏幕识别的补充手段。 |
| 100 | +- **当前实现**:以**模板匹配**为主,在屏幕或截图上做模板匹配,用于辅助定位目标区域,增强 assists 的「找控件/找区域」能力。 |
| 101 | +- **建议**:更复杂的识别需求(如复杂 OCR、多目标、鲁棒性要求高)建议评估其他方案(如 ML Kit、自研模型等),本库可作为轻量增强与尝试入口。 |
| 102 | +- **依赖**:依赖 **assists**,与 assists、assists-mp 配合使用(例如对 assists-mp 的截图做模板匹配)。 |
| 103 | + |
| 104 | +### 3.5 assists-web(WebView 桥接) |
| 105 | + |
| 106 | +- **定位**:封装 WebView,建立**原生与 JS 的双向通道**,使 Web 页面可直接调用 assists 的无障碍及增强能力,实现「用 Web + JS 写自动化」。 |
| 107 | +- **核心能力**: |
| 108 | + - 向 WebView 注入约定对象,前端通过 JSON 调用指定 method。 |
| 109 | + - 支持在同一个 App 内加载本地或远程 Web 页面,动态编写、更新自动化逻辑,无需重新发版。 |
| 110 | +- **依赖**:**assists**(核心)、**assists-mp**(截图)、**assists-ime**(输入法触发搜索等) |
| 111 | +- **与 assistsx-js 的关系**:assists-web 提供「能力注入与协议」,assistsx-js 在 Web 端封装成易用 API 并实现步骤器,二者配合完成完整的 Web 自动化开发体验。 |
| 112 | + |
| 113 | +--- |
| 114 | + |
| 115 | +## 四、Web 自动化生态 |
| 116 | + |
| 117 | +### 4.1 assistsx-js(Web 端 API + 步骤器) |
| 118 | + |
| 119 | +- **定位**:面向 Web 自动化开发的 **JavaScript 库**,运行在加载了 assists-web 的 WebView 页面中。 |
| 120 | +- **作用**: |
| 121 | + - **API 封装**:将 assists-web 注入的原始接口封装成更易用的 API,开发时直接调用即可驱动 assists 完成查找、点击、输入等操作。 |
| 122 | + - **步骤器**:提供步骤编排与维护能力,便于**开发与维护大型自动化程序**(步骤拆分、复用、错误处理等)。 |
| 123 | +- **使用方式**:在 Web 自动化页面中集成 assistsx-js,通过其 API 调用底层 assists 能力;无需关心底层 JSON 协议细节。 |
| 124 | +- **推荐**:使用 **Web 实现自动化** 可带来**调试快、动态更新**等优势,适合作为主要自动化开发方式。 |
| 125 | + |
| 126 | +### 4.2 AssistsX(Web 自动化运行平台) |
| 127 | + |
| 128 | +- **定位**:基于 **assists-web** 实现的 **Android 应用**,即「Web 自动化运行平台」。 |
| 129 | +- **作用**:安装在手机上后,开发者只需专注于**使用 Web 技术开发自动化**,无需单独开发、安装自己的 App;AssistsX 负责提供 WebView 环境、注入 assists 能力、加载并执行用户的 Web 自动化页面。 |
| 130 | +- **节点分析工具**:AssistsX 支持**节点分析服务**能力。开启后,可在**局域网**内通过**浏览器**访问该服务,实时查看与分析当前手机界面上的**页面节点**(节点树、属性等),便于编写或调试自动化脚本时快速定位控件。 |
| 131 | +- **下载**:[AssistsX](https://www.pgyer.com/SqGaCx8C)(版本等信息以页面为准)。 |
| 132 | +- **关系**:AssistsX App → 依赖 assists-web → 依赖 assists / assists-mp / assists-ime;Web 端再配合 assistsx-js 使用,形成「手机端运行环境 + Web 端开发与步骤编排」的闭环。 |
| 133 | + |
| 134 | +--- |
| 135 | + |
| 136 | +## 五、日志分析系统 |
| 137 | + |
| 138 | +> **⚠️ 仅限付费用户使用** |
| 139 | +> 日志分析系统为付费/商业扩展功能,仅对已获得相应许可的付费用户使用。 |
| 140 | +
|
| 141 | +- **定位**:面向**测试与开发协作**的支撑能力,用于解决「出现 Bug 时缺少日志与页面节点信息、在不同设备/界面上难以复现与定位」的痛点。 |
| 142 | +- **主要能力**: |
| 143 | + - **测试人员**:可提交**运行日志**与**当前页面的节点信息**(如节点树、控件属性、截图等),便于开发还原现场。 |
| 144 | + - **开发人员**:基于提交的日志与节点信息分析页面结构,快速精准定位问题,减少「无法复现」「设备差异」带来的排查成本。 |
| 145 | +- **与框架关系**:与 **assists** 能力配合(如通过 assists 获取节点树、通过 assists-mp 获取截图),可集成在 AssistsX 或自研 App 中,作为自动化测试与问题排查的配套功能。 |
| 146 | + |
| 147 | +--- |
| 148 | + |
| 149 | +## 六、架构层次与类图(模块级) |
| 150 | + |
| 151 | +以下用 Mermaid 的 `classDiagram` 从「模块/包」视角描述各部分的职责与关系(非具体 Java/Kotlin 类)。 |
| 152 | + |
| 153 | +```mermaid |
| 154 | +classDiagram |
| 155 | + direction TB |
| 156 | + class Assists { |
| 157 | + +无障碍服务封装 |
| 158 | + +节点查找/操作 API |
| 159 | + +浮窗管理(增删显隐/缩放/移动) |
| 160 | + } |
| 161 | +
|
| 162 | + class AssistsIme { |
| 163 | + +自定义输入法 |
| 164 | + +触发搜索等动作 |
| 165 | + } |
| 166 | +
|
| 167 | + class AssistsMp { |
| 168 | + +整屏截图 |
| 169 | + +指定节点区域截图 |
| 170 | + } |
| 171 | +
|
| 172 | + class AssistsOpcv { |
| 173 | + +OpenCV 封装 |
| 174 | + +模板匹配(屏幕识别) |
| 175 | + } |
| 176 | +
|
| 177 | + class AssistsWeb { |
| 178 | + +WebView 桥接 |
| 179 | + +注入 assistsx / assistsxAsync |
| 180 | + +原生与 JS 双向通道 |
| 181 | + } |
| 182 | +
|
| 183 | + class AssistsX_JS { |
| 184 | + +Web 端 API 封装 |
| 185 | + +步骤器 |
| 186 | + } |
| 187 | +
|
| 188 | + class AssistsX_App { |
| 189 | + +Web 自动化运行平台 |
| 190 | + +安装即用 |
| 191 | + +节点分析服务(局域网浏览器访问) |
| 192 | + } |
| 193 | +
|
| 194 | + class LogSystem { |
| 195 | + <<仅限付费用户>> |
| 196 | + +提交日志与节点信息 |
| 197 | + +开发分析/定位 Bug |
| 198 | + } |
| 199 | +
|
| 200 | + Assists <|-- AssistsIme : 基于 |
| 201 | + Assists <|-- AssistsMp : 基于 |
| 202 | + Assists <|-- AssistsOpcv : 基于 |
| 203 | + AssistsWeb --> Assists : 调用 |
| 204 | + AssistsWeb --> AssistsMp : 调用 |
| 205 | + AssistsWeb --> AssistsIme : 调用 |
| 206 | + AssistsX_JS ..> AssistsWeb : 通过注入接口调用 |
| 207 | + AssistsX_App --> AssistsWeb : 集成 |
| 208 | + LogSystem ..> Assists : 使用节点/能力 |
| 209 | +``` |
| 210 | + |
| 211 | +--- |
| 212 | + |
| 213 | +## 七、数据流与调用关系简图 |
| 214 | + |
| 215 | +```mermaid |
| 216 | +flowchart LR |
| 217 | + subgraph Web |
| 218 | + JS[assistsx-js / 自定义 JS] |
| 219 | + end |
| 220 | +
|
| 221 | + subgraph App |
| 222 | + WV[WebView + assists-web] |
| 223 | + AS[assists] |
| 224 | + IM[assists-ime] |
| 225 | + MP[assists-mp] |
| 226 | + OC[assists-opcv] |
| 227 | + end |
| 228 | +
|
| 229 | + JS -->|JSON 调用| WV |
| 230 | + WV -->|节点/操作| AS |
| 231 | + WV -->|截图| MP |
| 232 | + WV -->|输入法搜索| IM |
| 233 | + AS -->|截图区域/节点| MP |
| 234 | + OC -->|图像识别| AS |
| 235 | + AS -->|无障碍| System[系统无障碍服务] |
| 236 | +``` |
0 commit comments