[Task][T11] 实现 Android 规则快照解释器与页面状态机 #13

Closed
opened 2026-08-14 14:24:46 +08:00 by ila · 7 comments
Owner

基本信息

要解决的问题

解析任务内规则快照,执行白名单查找、等待、点击、输入、返回和提取;控件缺失结构化失败。

范围

解析任务内规则快照,执行白名单查找、等待、点击、输入、返回和提取;控件缺失结构化失败。

明确不做

  • 不接入顺云宝、Shopee 或采购。
  • 不实现批量任务、规则发布流程、全局停机或实时屏幕。
  • 不保存原始控件树和截图,不使用 OCR/VLM。

验收标准

不依赖规则表在线查询;快照可在规则软删除后执行;禁止付款动作;不落盘原始控件树。

验证方式

单元测试、接口/数据库约束测试;涉及 Android 行为时增加华为和一加真机验证。

参考文档

  • docs/03-business-rules-and-glossary.md
  • docs/07-mvp-requirements.md
  • docs/08-agent-api-contract.md

风险和回退

保持写接口幂等、任务输入快照不可变和设备串行;数据变化须提供兼容迁移或明确回退。

## 基本信息 - 上级 Epic: #1 - 所属 MVP: #2 - 任务编号: T11 - 前置依赖: #7、#8、#12 - 原始需求确认: 2026-08-14 ## 要解决的问题 解析任务内规则快照,执行白名单查找、等待、点击、输入、返回和提取;控件缺失结构化失败。 ## 范围 解析任务内规则快照,执行白名单查找、等待、点击、输入、返回和提取;控件缺失结构化失败。 ## 明确不做 - 不接入顺云宝、Shopee 或采购。 - 不实现批量任务、规则发布流程、全局停机或实时屏幕。 - 不保存原始控件树和截图,不使用 OCR/VLM。 ## 验收标准 不依赖规则表在线查询;快照可在规则软删除后执行;禁止付款动作;不落盘原始控件树。 ## 验证方式 单元测试、接口/数据库约束测试;涉及 Android 行为时增加华为和一加真机验证。 ## 参考文档 - docs/03-business-rules-and-glossary.md - docs/07-mvp-requirements.md - docs/08-agent-api-contract.md ## 风险和回退 保持写接口幂等、任务输入快照不可变和设备串行;数据变化须提供兼容迁移或明确回退。
Author
Owner

T05、T06、T10 已完成实现。现开始 T11:定义 schemaVersion=1 的可执行 selector/action 契约,实现纯 Kotlin 解释器、页面状态机和 Android 无障碍执行适配;先以单元测试锁定唯一匹配与失败边界。

T05、T06、T10 已完成实现。现开始 T11:定义 schemaVersion=1 的可执行 selector/action 契约,实现纯 Kotlin 解释器、页面状态机和 Android 无障碍执行适配;先以单元测试锁定唯一匹配与失败边界。
Author
Owner

T11 ?????,?????:Android ??? schemaVersion 1 ??????,?????(wait/click/input/back/extract)???????????????????????????;?????????,??????????????????? testDebugUnitTest ? assembleDebug?

T11 ?????,?????:Android ??? schemaVersion 1 ??????,?????(wait/click/input/back/extract)???????????????????????????;?????????,??????????????????? testDebugUnitTest ? assembleDebug?
Author
Owner

T17 华为浏览器实机发现:二次跳转确认的唯一文字节点为 com.android.browser / TextView / “打开”,但该文字节点 clickable=false,实际点击能力位于其父容器。现有执行器要求目标节点自身执行 ACTION_CLICK,无法处理这种标准 Android 结构。实施方案:仍以唯一精确文字节点匹配,点击时仅沿该节点父链选择最近 clickable 祖先;无可点击祖先则 RULE_ACTION_FAILED,不搜索兄弟或相近候选。

T17 华为浏览器实机发现:二次跳转确认的唯一文字节点为 com.android.browser / TextView / “打开”,但该文字节点 clickable=false,实际点击能力位于其父容器。现有执行器要求目标节点自身执行 ACTION_CLICK,无法处理这种标准 Android 结构。实施方案:仍以唯一精确文字节点匹配,点击时仅沿该节点父链选择最近 clickable 祖先;无可点击祖先则 RULE_ACTION_FAILED,不搜索兄弟或相近候选。
Author
Owner

T17 一加最终实机发现:任务进入 running 后手机屏幕休眠,服务端 45 秒未收到心跳,按设计以 DEVICE_OFFLINE 失败。为保证规则执行期间心跳和无障碍线程不因休眠停止,Android 任务执行期需要持有有时限的屏幕唤醒锁,并在 finally 中释放;不解锁安全锁屏、不常驻持有。该缺陷属于 T11 页面状态机/执行生命周期,先记录后实施。

T17 一加最终实机发现:任务进入 running 后手机屏幕休眠,服务端 45 秒未收到心跳,按设计以 DEVICE_OFFLINE 失败。为保证规则执行期间心跳和无障碍线程不因休眠停止,Android 任务执行期需要持有有时限的屏幕唤醒锁,并在 finally 中释放;不解锁安全锁屏、不常驻持有。该缺陷属于 T11 页面状态机/执行生命周期,先记录后实施。
Author
Owner

范围调整后的最终实现进展:移除 com.huawei.browser 专用兼容;保留通用精确 activityName 页面证据、登录 Activity 分类、唯一文字节点最近可点击父容器。新增任务执行期最长 5 分钟屏幕唤醒锁并在 finally 释放,避免休眠中断心跳;不解锁安全锁屏。完整 Android 单测/Debug APK 构建通过,一加实机已验证任务执行期间 15 秒心跳持续在线。

范围调整后的最终实现进展:移除 com.huawei.browser 专用兼容;保留通用精确 activityName 页面证据、登录 Activity 分类、唯一文字节点最近可点击父容器。新增任务执行期最长 5 分钟屏幕唤醒锁并在 finally 释放,避免休眠中断心跳;不解锁安全锁屏。完整 Android 单测/Debug APK 构建通过,一加实机已验证任务执行期间 15 秒心跳持续在线。
Author
Owner

2026-08-15 ?????? ?????????????????????????? 6949e53 ??,??????

2026-08-15 ?????? ?????????????????????????? 6949e53 ??,??????
ila closed this issue 2026-08-15 14:29:20 +08:00
Author
Owner

???????????????:????? T11?2026-08-15 ??????? T11 ????;?????????

???????????????:????? **T11**?2026-08-15 ??????? T11 ????;?????????
Sign in to join this conversation.
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: OPC/goauto#13