mcpField
A
adb

adb

github.com/morphet81Agent 工作流0101 次安装26 周前更新
代码仓库

关于 adb

adb 是一项通过 Android Debug Bridge 操作 Android 设备或模拟器的 Agent 技能。它以截图、执行操作和验证结果的循环推进用户指定的任务,并在设备连接或界面异常时处理相应情况。

主要功能

  1. 01通过 ADB 检查设备连接
  2. 02截图并分析界面状态
  3. 03执行点击、滑动和文本输入
  4. 04使用 UI dump 获取元素信息
  5. 05验证操作并处理异常

适用场景

  1. 01在设备上打开设置并更改选项
  2. 02在 Android 应用中完成界面操作
  3. 03遇到弹窗或加载状态时继续任务

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/morphet81/cheat-sheets --skill adb

安装后在 Claude Code 中输入/adb确认已加载。

详细介绍

使用 ADB 命令与 Android 设备或模拟器交互,以完成用户定义的任务。持续执行截图-操作-验证循环,直到任务完成。

用法:

  • /adb <mission> — 描述你希望在设备上完成的操作(例如,“打开设置并启用深色模式”)

前提条件:

  • adb 必须位于 PATH 中
  • 必须连接设备或模拟器

说明:

  1. 验证 ADB 连接:

    • 运行 adb devices,确认至少列出一台设备(状态不能是“unauthorized”)
    • 如果未找到设备,告知用户并停止
    • 如果找到多台设备,使用 AskUserQuestion 询问要操作哪台设备,然后在后续所有 adb 命令中传入 -s <serial>
  2. 理解任务:

    • 将 $ARGUMENTS 解析为任务描述
    • 如果 $ARGUMENTS 为空,使用 AskUserQuestion 询问用户希望在设备上完成什么操作
    • 在心中将任务拆解为预期步骤清单(不要输出,这是用于自行规划的内容)
  3. 进入截图-操作-验证循环:

    重复以下循环,直到任务完成,或确定任务无法完成:

    a) 截取屏幕截图:

    mkdir -p .tmp && adb exec-out screencap -p > .tmp/screen.png
    
    • 使用 Read 工具读取截图,了解当前屏幕状态

    b) 分析屏幕:

    • 确认当前显示的是哪个应用或屏幕
    • 判断当前可见的 UI 元素(按钮、文本字段、开关、列表等)
    • 评估任务目标的完成进度
    • 如果屏幕内容不清晰,或需要进一步了解 UI 元素树,请运行 UI dump:
      adb shell uiautomator dump /sdcard/ui.xml && adb pull /sdcard/ui.xml .tmp/ui.xml
      
      然后读取 .tmp/ui.xml,获取元素边界、文本和资源 ID,以便精确确定点击坐标。

    c) 决定并执行下一步操作:

    使用以下一条或多条 ADB 命令:

    操作命令
    点击指定坐标adb shell input tap <x> <y>
    滑动adb shell input swipe <x1> <y1> <x2> <y2> [duration_ms]
    输入文本adb shell input text "<text>"
    按返回键adb shell input keyevent 4
    按主屏幕键adb shell input keyevent 3
    按回车键adb shell input keyevent 66
    打开最近使用的应用adb shell input keyevent 187
    启动应用adb shell am start -n <package>/<activity>
    打开 URLadb shell am start -a android.intent.action.VIEW -d "<url>"
    长按adb shell input swipe <x> <y> <x> <y> 1000

    坐标提示:

    • 点击 UI 元素时,根据截图或 UI dump 中的 bounds 属性瞄准元素中心(例如,边界 [0,200][1080,350] → 点击 540,275)
    • 向下滚动时,从屏幕下方三分之一处滑动至上方三分之一处(例如,adb shell input swipe 540 1500 540 500 300)
    • 输入文本时,先点击文本字段,稍等片刻,然后输入

    d) 等待并验证:

    • 每次操作后,稍等片刻,让 UI 稳定下来(sleep 1)
    • 再截取一张屏幕截图,验证操作是否产生预期效果
    • 如果操作未按预期生效(例如,点错元素、出现对话框、屏幕没有变化),请调整后重试
    • 同一失败操作最多重试 2 次——如果仍然失败,请尝试其他方法(更换坐标、更换导航路径,或使用 UI dump 精确确定边界)
  4. 处理常见情况:

    • 键盘遮挡屏幕: 输入后,按返回键(keyevent 4)关闭键盘,再截取验证截图
    • 对话框/弹窗: 如果出现意外的对话框,请阅读内容并适当关闭(根据任务需要点击“OK”“Allow”“Deny”等)
    • 加载屏幕: 如果屏幕显示正在加载,请等待 2-3 秒后再截取一张屏幕截图
    • 应用未安装: 如果找不到目标应用,请告知用户并停止
    • 权限提示: 授予任务所需的权限(点击“Allow”),拒绝无关权限
    • 屏幕已锁定: 如果设备显示锁屏,请尝试向上滑动(adb shell input swipe 540 1800 540 800)解锁。如果需要 PIN/密码,请询问用户
  5. 出错时检查 logcat:

    • 如果应用崩溃或行为异常,请检查最近的日志:
      adb logcat -d -t 50
      
    • 利用日志了解发生了什么;如果问题无法恢复,请告知用户
  6. 任务完成:

    • 完成任务目标后,截取一张最终屏幕截图作为确认
    • 向用户展示最终屏幕截图,并附上简短摘要:
      ## 任务完成
      
      <已完成事项的说明>
      
      最终状态:<屏幕上当前显示的内容>
      已执行操作:<步骤数>
      
  7. 清理:

    • 移除临时文件:
      rm -f .tmp/screen.png .tmp/ui.xml
      

边缘情况

  • 如果 PATH 中找不到 adb,请显示设置说明并停止
  • 如果任务进行中设备断开连接,请尝试运行 adb devices 检查;如果设备已断开连接,请告知用户并停止
  • 如果任务需要安装应用,请先向用户询问 APK 路径或包名
  • 如果陷入循环(连续 3 次显示同一屏幕),请获取 UI 转储,重新评估并尝试完全不同的方法。如果仍然无法解决,请告知用户并寻求指导
  • 如果屏幕分辨率未知,请从第一张屏幕截图的尺寸中读取,或运行 adb shell wm size

评论

支持 Markdown