本项目旨在解决批量 Android 终端执行重复性业务流程时人工效率低、定时精准度差、多设备难以协同等痛点。系统整合设备群控、视觉识别、分布式任务调度等技术,构建了一套高可用的自动化操作平台,适用于需要大规模设备并发执行定时或即时任务的各类业务场景。
软件核心功能涵盖:多设备自动发现与并发管理;基于 Redis 的分布式任务队列与优先级调度;定时任务与即时任务双模式支持;基于 OCR 文字识别与 OpenCV 图像模板匹配的 UI 元素智能定位;可视化参数配置与执行状态监控;异常重试与屏幕变化检测等容错机制。
核心功能模块包括:
设备管理模块:通过 ADB 协议自动扫描局域网内在线 Android 设备,动态维护设备池,支持多设备并行接入与状态监控。
视觉识别模块:集成阿里云 OCR 服务实现全屏文字识别与坐标提取,同时基于 OpenCV 实现图像模板匹配,提供双重元素定位策略,适配不同 UI 场景。
任务调度模块:采用 Redis 有序集合作为中央任务队列,以时间戳为 Score 实现任务的精准排序;Dispatcher 进程轮询分发,支持即时执行与"预执行-正式执行"两阶段复杂时序逻辑。
自动化引擎模块:基于 uiautomator2 封装点击、滑动、应用启停、截图等原子操作,支持区域限定点击、偏移点击、索引点击等高级交互模式。
配置与监控模块:基于 TKinter 构建 Windows 桌面配置端,支持业务参数录入、设备选择、功能模式切换、实时日志展示与任务状态反馈。
业务流程描述:用户通过可视化界面配置目标业务流程参数(如区域、分类、目标对象、索引等)及期望执行时间;系统校验参数后生成结构化任务并序列化存入 Redis 队列;Dispatcher 按时间策略轮询,将到期任务推送至对应设备的 Worker 进程;Worker 驱动设备完成解锁、应用启动、页面导航、元素识别与点击、结果确认等全链路操作;最终系统生成独立日志文件并反馈执行结果。
整体架构采用"调度中心-执行节点-消息队列"三层分布式设计。调度中心(Dispatcher)负责任务轮询、设备状态检查与任务分发;执行节点(Worker)以独立操作系统进程运行,通过 multiprocessing.Queue 接收任务并调用自动化引擎;Redis 作为中央消息队列,利用 Sorted Set 按时间戳排序,天然支持定时任务的优先级调度与延迟消费。
各模块技术选型如下:
设备通信与 UI 自动化:uiautomator2 提供高层 Android UI 操作 API,ADB 提供底层设备连接与 Shell 命令支持;
视觉识别:阿里云 OCR API(RecognizeAllText)负责文字检测与识别,返回 Block 级坐标与置信度;OpenCV(cv2.matchTemplate)负责图像模板匹配,采用 TM_CCOEFF_NORMED 算法,置信度阈值设为 0.65;
任务调度与状态机:Redis 有序集合存储任务 JSON,score 为 Unix 时间戳;通过 pre_ran、pre_run_only、immediate 等状态标记实现预执行与正式执行的流程切换;
桌面端界面:TKinter 实现跨平台 Windows 应用,支持 Combobox 设备选择、Entry 参数录入、Radiobutton 功能模式切换、Label 实时状态更新;
日志与持久化:按"设备 ID + 业务参数 + 时间戳"命名规则生成独立日志文件,支持多设备并发时的日志隔离与追溯。
我负责系统整体架构设计与全部核心模块的开发实现。量化成果包括:独立完成 5 个 Python 模块(OCR 工具、Dispatcher、Worker、业务逻辑、GUI)的开发与联调;实现单调度中心对多设备并发支持(实测 4 台设备同时稳定运行);OCR 接口封装后识别成功率达 95% 以上;图像模板匹配平均响应时间低于 2 秒;定时任务调度误差控制在 1 秒以内;系统累计无故障运行时长超过 200 小时。
开发过程中遇到的关键难点及解决方案:
多设备并发端口冲突:uiautomator2 默认使用固定本地端口,多 Worker 进程同时启动会产生端口抢占。解决方案为每个 Worker 启动时随机分配 19008–19999 范围内的独立端口,通过 settings.proxy_port 动态注入,实现进程级网络隔离。
OCR 返回格式与业务框架兼容:阿里云 OCR 返回的 BlockPoints 为 JSON 对象数组,而业务框架期望的是 OpenCV 风格的 (x, y) 元组列表。解决方案是封装 OCR 适配器类,在 readtext 方法内部完成格式转换,对外暴露与原生框架一致的 (box, text, score) 三元组接口,实现零侵入式替换。
复杂时序任务的精准