用途
该技能用于在已连接的 Android 设备或模拟器上自动执行 UI 操作,例如启动应用、点击按钮、输入文本、导航到某个 URL,或驱动界面完成特定任务。整体工作方式是维持一个紧凑的“启动 → 观察 → 操作 → 重新观察”循环,直到目标达成。
启动方式
启动可以分为三种情形:
- 在浏览器中打开 URL:
adb -s <serial> shell am start -a android.intent.action.VIEW -d '<url>'
- 启动已安装的应用:
adb -s <serial> shell monkey -p <pkg> -c android.intent.category.LAUNCHER 1
- 运行 APK 文件:
android run --apks=<path> --device=<serial> [--activity=<name>]
观察方式
优先使用 android layout 获取结构化 UI:
android layout --device=<serial> --pretty --output=/tmp/ui.json
通过 text、content-desc 或 resource-id 匹配目标,并使用节点的中心作为点击坐标。每次操作后都需要用所选模式重新观察;当只需要查看变化时,可以使用 android layout --device=<serial> --diff。
当视觉定位更简单时,使用截图模式。截图模式通常更适合以下情况:WebView 或浏览器页面内容;仅含图标的自定义视图;Canvas、地图或游戏画面;以及布局信息嘈杂、不完整或比图像更难解释的任何界面。
android screen capture --output=/tmp/ui.png --annotate android screen resolve --screenshot=/tmp/ui.png --string="input tap #N"
截图上的标签仅对该张截图有效,每次 UI 变化后都需要重新截图。
操作方式
使用 adb shell input 执行操作:
adb -s <serial> shell input tap <x> <y> adb -s <serial> shell input text '<text-with-%s-for-spaces>' adb -s <serial> shell input swipe <x1> <y1> <x2> <y2> <ms> adb -s <serial> shell input keyevent <KEYCODE>
例如输入带空格的文本:
adb -s <serial> shell input text 'hello%sworld'
规则
每次操作后都必须重新观察,因为坐标和截图标签会立即失效。
先清除阻塞项:权限弹窗、引导页、更新提示。
选择更清晰的观察模式:结构化 UI 用 layout,视觉界面用截图。
注意事项
不要把 URL 输入到地址栏,而应使用 am start -a VIEW -d '<url>' 打开。
如果前台应用不明确,可以用以下命令检查:
adb -s <serial> shell dumpsys window | rg 'mCurrentFocus|mFocusedApp'
多设备处理
如果连接了多台设备,先用 adb devices -l 获取序列号,然后在 android 命令中传 --device=<serial>,在 adb 命令中传 -s <serial>。
限制
当前资料未说明该技能支持的具体 Android 版本、权限要求、异常处理机制、执行成功率或性能表现,这些信息暂未提供。