gkd 工作原理:无障碍、选择器与订阅规则如何配合
理解 GKD 的工作原理,只需要记住一条链路:无障碍服务发现界面变化 → 选择器判断当前界面是否命中规则 → 命中则执行点击等动作。下面把每个环节拆开说。
第一环:无障碍服务在监听
开启无障碍权限后,GKD 会持续接收系统派发的无障碍事件——你切换应用、弹出对话框、页面加载完成,都会产生事件。GKD 不需要截屏分析图像,它直接拿到的是系统提供的节点树:每个控件的文字、id、位置、是否可点击等信息都在里面。
这也是为什么:
- 它不需要 Root 权限(无障碍是系统能力,不涉及系统分区修改);
- 它的规则可以精确到「某个 id 的按钮」而不仅是「某段文字」;
- 部分金融类应用因为安全策略屏蔽了无障碍读取,规则可能无法生效。
第二环:选择器做匹配
规则里写的是选择器表达式。GKD 拿到新的节点树后,用选择器在节点树里查找目标:
TextView[id="com.zhihu.android:id/btn_skip"]
上面这条的含义是:找一个 id 为 btn_skip 的 TextView,并且它属于包名 com.zhihu.android 的应用。匹配到了才进入第三环。
选择器还可以带上下文条件,比如「这个按钮旁边必须有某段文字」「这个节点的父节点下还有一个关闭图标」,用来避免误点。语法的完整说明在选择器入门。
第三环:执行动作
匹配成功后,GKD 对目标节点执行规则里定义的动作,最常见的是点击(click),也可以是长按、返回等。执行结果会写入日志,在首页的触发记录里可以看到每次命中的时间、应用与规则名。

规则从哪里来
规则以「订阅」为单位管理:本地订阅在应用内手动编辑,远程订阅通过链接添加后自动更新。一个订阅里可以包含全局规则(对所有应用生效)和若干应用规则(只对指定包名生效)。详见订阅页一览。
两个容易误解的点
- 它不是按键精灵式的录制回放:GKD 的规则基于界面节点状态触发,界面没出现目标节点就不会动,不按时间轴回放操作。
- 它不是图像识别工具:匹配对象是系统暴露的节点信息,不是像素。因此界面上的「画出来的按钮」(如游戏内贴图)无法用节点规则命中。