前言:ADB的痛点是什么?

ADB(Android Debug Bridge)几乎是所有安卓玩机党、测试工程师的必备工具,我们可以用它执行截图、点击、安装应用、文件传输等几乎所有手机操作,但它有一个最大的短板:它只能执行命令,没法"看到"手机屏幕上的内容

很多时候我们想做自动化操作,都会卡在"判断当前屏幕有什么"这一步:比如想跳过开屏广告,你得先知道"跳过"按钮在什么位置;想自动签到,得先识别到"签到"按钮有没有出现;想批量提取截图里的文字,得手动一张张复制。

今天我们就用OpenClaw的两个现成技能:ADB工具集 + 本地PaddleOCR,组合出一个完全本地化、零API费用、隐私安全的全自动安卓设备管理助手,实现"识别→决策→操作"的完整闭环。


一、整体方案设计

整个架构非常简单,三层结构完全跑在本地,不需要任何云端服务:

1
2
3
4
┌─────────────────┐    ┌─────────────────┐    ┌─────────────────┐
│   ADB交互层     │ →  │  PaddleOCR识别层 │ →  │  OpenClaw逻辑层 │
│ (手机操作)    │    │(文字+坐标识别) │    │(规则判断+调度)│
└─────────────────┘    └─────────────────┘    └─────────────────┘

各层职责:

  1. ADB层:负责和安卓设备交互,支持截图、点击、滑动、启动应用、拉取/推送文件、执行Shell命令等所有ADB原生能力
  2. OCR层:基于本地PaddleOCR实现,识别截图中的文字内容和对应坐标位置,全程本地运行,不会上传任何图片到第三方
  3. 逻辑层:OpenClaw作为调度中心,把两个能力串联起来,支持自定义规则,甚至可以用自然语言直接控制(比如"帮我把手机里的所有账单截图文字提取出来")

二、前置环境准备

2.1 技能安装

首先确保你已经在OpenClaw中安装了两个必备技能:

1
2
3
4
5
# 安装ADB工具集技能
openclaw skills install adb

# 安装本地PaddleOCR技能
openclaw skills install paddle-ocrv5

安装完成后运行openclaw skills list确认两个技能状态都是✓ ready

2.2 ADB设备连接

  1. 安卓手机开启「开发者选项」→ 打开「USB调试」,用USB连接电脑,或者通过Wi-Fi无线连接
  2. 执行adb devices确认设备已经连接成功,能看到设备ID输出
  3. (可选)配置ADB路径到系统环境变量,或者在TOOLS.md中配置你的ADB实际路径

2.3 本地OCR服务启动

PaddleOCR技能默认会启动本地MCP服务在端口18080,启动后可以通过lsof -i:18080确认服务正常运行。


三、核心功能实战(附完整代码)

下面三个是我日常用得最多的场景,所有代码都可以直接复制运行。

3.1 实战1:自动跳过APP开屏广告

这是最实用的功能,再也不用手动点"跳过",全程自动执行:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
#!/bin/bash
# auto_skip_ad.sh

# 1. 截图并拉取到本地
adb shell screencap /sdcard/screenshot.png
adb pull /sdcard/screenshot.png /tmp/

# 2. 调用本地OCR识别截图中的"跳过"文字
ocr_result=$(curl -s http://localhost:18080/ocr -F "image=@/tmp/screenshot.png")

# 3. 提取"跳过"按钮的坐标
skip_pos=$(echo $ocr_result | jq -r '.data[] | select(.text | contains("跳过")) | .bbox[0], .bbox[1]' | xargs echo)

# 4. 如果识别到跳过按钮,执行点击
if [ -n "$skip_pos" ]; then
    x=$(echo $skip_pos | cut -d' ' -f1)
    y=$(echo $skip_pos | cut -d' ' -f2)
    adb shell input tap $x $y
    echo "已自动跳过开屏广告"
else
    echo "未识别到跳过按钮"
fi

你可以把这个脚本加到定时任务,每隔3秒运行一次,所有APP的开屏广告都会自动跳过。

3.2 实战2:批量提取手机截图中的文字

经常在手机上截了很多笔记、账单、聊天记录,想把文字导出来?一行命令搞定:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
#!/bin/bash
# batch_extract_screenshot_text.sh

# 1. 拉取手机中所有截图到本地
mkdir -p /tmp/screenshots
adb pull /sdcard/Pictures/Screenshots/ /tmp/screenshots/

# 2. 循环识别所有截图的文字,保存到结果文件
result_file="./screenshot_texts.md"
echo "# 手机截图文字提取结果" > $result_file
echo "提取时间:$(date '+%Y-%m-%d %H:%M:%S')" >> $result_file
echo "" >> $result_file

for img in /tmp/screenshots/*.png; do
    echo "## $(basename $img)" >> $result_file
    ocr_text=$(curl -s http://localhost:18080/ocr -F "image=@$img" | jq -r '.data[].text' | tr '\n' ' ')
    echo $ocr_text >> $result_file
    echo "" >> $result_file
done

echo "所有截图文字已提取完成,结果保存到:$result_file"

3.3 实战3:APP自动签到

再也不用每天手动打开APP签到,全自动完成:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#!/bin/bash
# auto_checkin.sh

# 1. 启动目标APP(这里以某电商APP为例,替换成你自己的APP包名)
adb shell am start -n com.example.app/.MainActivity

# 2. 等待页面加载完成
sleep 5

# 3. 截图识别签到按钮
adb shell screencap /sdcard/checkin.png
adb pull /sdcard/checkin.png /tmp/

checkin_pos=$(curl -s http://localhost:18080/ocr -F "image=@/tmp/checkin.png" | jq -r '.data[] | select(.text | contains("签到")) | .bbox[0], .bbox[1]' | xargs echo)

if [ -n "$checkin_pos" ]; then
    x=$(echo $checkin_pos | cut -d' ' -f1)
    y=$(echo $checkin_pos | cut -d' ' -f2)
    adb shell input tap $x $y
    echo "签到成功"
    # 签到完成后返回桌面
    sleep 2
    adb shell input keyevent 3
else
    echo "未识别到签到按钮,可能已经签过到了"
fi

把这个脚本加到crontab每天早上9点执行,就能实现全自动签到。


四、更多扩展玩法

这套方案的想象力非常大,我再分享几个高阶玩法:

  1. 移动端自动化测试:识别APP界面元素,自动执行用例,验证界面文案是否正确,不需要写复杂的UI自动化脚本
  2. 远程协助老人用手机:远程截图识别老人手机上的弹窗、错误提示,自动点击修复,不用远程控制一步步教
  3. 游戏自动化日常任务:识别游戏界面的"领取奖励"、“前往任务"按钮,自动完成日常任务,解放双手
  4. 批量设备管理:同时管理多台安卓设备,批量安装应用、检查设备状态、批量提取数据,适合测试团队使用
  5. 隐私内容批量处理:自动识别截图中的身份证、银行卡号等敏感信息,批量打码,不用担心上传到云端的隐私问题

五、踩坑优化指南

5.1 ADB连接不稳定怎么办?

  • 优先用USB有线连接,Wi-Fi连接容易出现断连
  • 可以加心跳检测,断连后自动重连:adb connect <设备IP>:5555
  • 多设备场景下,给每个设备设置别名,通过-s <设备ID>指定操作目标

5.2 OCR识别准确率低怎么优化?

  • 截图前先把手机亮度调高,避免暗光下文字模糊
  • 对截图做预处理:灰度化、二值化,提高对比度
  • 如果是小字体识别不准,可以调整PaddleOCR的识别阈值,或者用超分辨率模型先放大图片

5.3 坐标偏移问题怎么解决?

  • 不同分辨率的手机坐标会有偏移,建议用相对坐标计算,不要写死固定坐标
  • 识别到文字区域后,点击区域中心位置,不要点击左上角,容错率更高

六、总结与展望

这套方案的最大优势就是完全本地化、零成本、隐私安全,所有操作都跑在你自己的机器上,不用担心图片、文字数据泄露到第三方服务商。

未来还可以继续扩展:

  • 结合目标检测模型,不仅能识别文字,还能识别图标、按钮、头像等非文字元素
  • 接入大语言模型,实现完全的自然语言控制,比如你说"帮我把手机里最近一周的账单都导出来整理成Excel”,自动完成所有操作
  • 支持多设备并行管理,同时操作几十上百台安卓设备,适合企业级使用

如果你也有好玩的用法,欢迎在评论区分享~