You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过ADB精准定位设置项并提取坐标实现程序化点击

ADB稳定定位Android设置项的实现方法

现有基础方案

目前常规的操作步骤如下:

  • 执行adb shell am start -a android.settings.SETTINGS打开系统设置首页
  • 执行adb exec-out uiautomator dump /dev/tty导出当前页面的UI层级结构
  • 从导出的XML结构中匹配目标设置项节点,提取bounds属性的坐标后执行点击操作

示例目标节点(密码与账户选项):

<node index="0" text="Passwords &amp; accounts" resource-id="android:id/title" class="android.widget.TextView" package="com.android.settings" content-desc="" checkable="false" checked="false" clickable="false" enabled="true" focusable="false" focused="false" scrollable="false" long-clickable="false" password="false" selected="false" bounds="[198,1361][752,1441]" />

现有方案的问题

直接依赖bounds坐标点击的方案稳定性极差,不同分辨率设备、不同系统版本的设置项排布位置不统一,也没有全局唯一的id标识,无法跨设备通用。

稳定精准识别的实现方案

按优先级从高到低选择以下方案:

  1. 优先调用系统原生Intent直接跳转,跳过点击流程
    大多数常用设置页都有官方定义的隐式Intent Action,不需要进入设置首页再点击对应选项,这是最稳定的方案。
    比如要打开账户列表/添加账户页面,直接执行:
adb shell am start -a android.settings.ACCOUNT_SETTINGS

其他常见设置项也有对应Action,比如开发者选项、WiFi设置等,都可以直接检索对应Action调用。

  1. 多属性组合匹配定位节点,不依赖坐标
    如果确实没有对应Action的冷门设置项,就通过多属性组合的方式匹配节点,不要只靠坐标:
  • 先过滤包名:系统设置的包名固定为com.android.settings,先筛掉其他包的所有节点
  • 再过滤资源ID:设置项的标题控件ID统一为android:id/title,进一步缩小匹配范围
  • 匹配文本属性:根据当前系统语言,匹配设置项的text或者content-desc属性值,多语言场景可以同时兼容中英文等常用文本
  • 校验父节点属性:你匹配到的title节点本身clickable属性为false,实际可点击的是它的上层父布局,匹配到title节点后取父节点的bounds坐标执行点击,避免点错位置
  1. 适配滚动场景
    如果当前页面没有找到匹配的节点,自动执行上下滚动操作后重新查找,直到滚动到页面边界为止,适配设置项较多需要滑动的场景。

按上述规则匹配的准确率可达99%以上,修改「不保留活动」设置项的同类工具,用的就是这套匹配逻辑。

内容的提问来源于stack exchange,提问作者Favolas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 11:48:01