-
Notifications
You must be signed in to change notification settings - Fork 2
Accessibility and UI Automation
AceGuru-mjh edited this page Oct 1, 2026
·
4 revisions
ui_tap/ui_swipe/ui_dump/input_text与 cs-mem 的屏幕感知,全部建立在 无障碍服务之上。这是本项目能力最大、也最需要克制的一块。
| 组件 | 位置 | 作用 |
|---|---|---|
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%+)+ 节点指纹 |
| 操作 | 是否需要无障碍 | 说明 |
|---|---|---|
ui_dump(读屏) |
✅ | cs-mem 感知的唯一来源 |
ui_tap / ui_swipe
|
✅ | 也可由 Shizuku(input)完成,但无障碍更稳定 |
input_text |
✅ | 需先 focus 输入框;环境门控会在键盘未弹出时提示 |
screenshot |
❌ | Shizuku screencap 或 Root 也可 |
| 问题 | 现状 |
|---|---|
| 心跳在 Main 线程每 30s 做 binder IPC,无异常处理器 | 已移 Dispatchers.Default + CoroutineExceptionHandler + runCatching(混沌审计) |
ApexAccessibilityService.instance 静态引用 TOCTOU |
登记未修:服务销毁瞬间可能捕获半解绑实例(功能静默失效而非崩溃),建议后续引入 activeInstance()(AtomicBoolean bound 标志) |
| 系统杀服务 | 需在权限屏重新授权;部分 ROM 会在省电策略下回收 |
无障碍层能看到屏幕上的一切文本,包括密码框、验证码、支付金额。 如果把这些无差别学进记忆并用于 0-token 回放,后果严重。因此:
| 现象 | 排查 |
|---|---|
ui_dump 返回空 |
无障碍服务未开启 / 被回收;部分 ROM 需重启应用 |
| 点按无效 | 目标节点不可点击(找父节点);或坐标被悬浮窗遮挡 |
input_text 失败 |
输入框未获得焦点(环境门会提示"请先打开输入框");或该输入框拒绝无障碍输入(密码框常见,属预期) |
| 记忆"该记的没记住" | 免疫系统判定为敏感/可疑 —— 正确行为 |
- 权限执行链 · cs-mem 认知记忆 · 工具系统
- 安全与隐私
-
MCP 生态总览
新 - (沙箱 MCP · 官方 Hub · 逆向 Host · 门控语义)
- 终端运行时
- 终端 API 契约
- SDK 边界
- Termux 能力矩阵
- Ubuntu rootfs 供给
- Ubuntu 生命周期
- PRoot 二进制溯源
- VT100/ANSI 模拟器
- 终端性能
- 终端迁移
- 原生层 C++/JNI