Skip to content

Accessibility and UI Automation

AceGuru-mjh edited this page Oct 1, 2026 · 4 revisions

无障碍服务与 UI 自动化

🔧 能力 · 🏠 首页 › Accessibility-and-UI-Automation

Home Version Kotlin Modules Tools License

Accessibility-and-UI-Automation

📑 本页目录

ui_tap / ui_swipe / ui_dump / input_text 与 cs-mem 的屏幕感知,全部建立在 无障碍服务之上。这是本项目能力最大、也最需要克制的一块。

1. 组件

组件 位置 作用
ApexAccessibilityService platform/privilege/.../accessibility/ 提供 UI 树 dump、节点查找、点按/滑动/输入
UiTools core:tool-registry ui_tap ui_swipe ui_dump screenshot input_text
PrivilegeManager.getUiTree() platform/privilege 三通道取树:Root → Shizuku → 普通(无障碍)
UiTreePruner platform/cs-mem 语义降维(体积 −90%+)+ 节点指纹

2. 能力矩阵

操作 是否需要无障碍 说明
ui_dump(读屏) ✅ cs-mem 感知的唯一来源
ui_tap / ui_swipe ✅ 也可由 Shizuku(input)完成,但无障碍更稳定
input_text ✅ 需先 focus 输入框;环境门控会在键盘未弹出时提示
screenshot ❌ Shizuku screencap 或 Root 也可

3. 已知风险与修复

问题 现状
心跳在 Main 线程每 30s 做 binder IPC,无异常处理器 已移 Dispatchers.Default + CoroutineExceptionHandler + runCatching(混沌审计)
ApexAccessibilityService.instance 静态引用 TOCTOU 登记未修:服务销毁瞬间可能捕获半解绑实例(功能静默失效而非崩溃),建议后续引入 activeInstance()(AtomicBoolean bound 标志)
系统杀服务 需在权限屏重新授权;部分 ROM 会在省电策略下回收

4. 安全:为什么 cs-mem 必须有免疫系统

无障碍层能看到屏幕上的一切文本,包括密码框、验证码、支付金额。 如果把这些无差别学进记忆并用于 0-token 回放,后果严重。因此:

  • 摄取前先过 记忆免疫系统: 悬浮窗检测 / 敏感词分级 / 结构完整性 / 包名可信分级 / 可疑指纹隔离;
  • 被拦下的内容不会进记忆库 —— 这是正确的安全行为,不是 bug(见 故障排查)。

5. 排错

现象 排查
ui_dump 返回空 无障碍服务未开启 / 被回收;部分 ROM 需重启应用
点按无效 目标节点不可点击(找父节点);或坐标被悬浮窗遮挡
input_text 失败 输入框未获得焦点(环境门会提示"请先打开输入框");或该输入框拒绝无障碍输入(密码框常见,属预期)
记忆"该记的没记住" 免疫系统判定为敏感/可疑 —— 正确行为

6. 相关页面

footer

🏠 返回首页 · 📚 文档索引 · ❓ FAQ · 🔧 故障排查 · 🗺️ 路线图 · 🐛 提 Issue

Android Guru Agent · v1.4.4 · Kotlin 2.0.21 · Compose · PRoot · Room

Clone this wiki locally