1. 项目概述最近在折腾一个挺有意思的项目叫 ClawPaw Android Control。简单来说它能把你的安卓手机变成一个可以被远程控制的“机器人手臂”然后通过 OpenClaw 这个智能体平台来指挥它。想象一下你坐在电脑前用自然语言说“帮我看看手机上有啥新消息”或者“打开外卖软件点个午餐”它就能自动在手机上完成这些操作。这听起来有点像自动化测试工具但它的目标更偏向于日常的、由 AI 驱动的自动化任务比如信息收集、应用操作、甚至是一些简单的重复性工作流。这个项目的核心其实是一个连接器Skill。它一头连着 OpenClaw 的“大脑”Gateway另一头连着安装了 ClawPaw App 的安卓手机。当 OpenClaw 理解你的指令后如果需要操作手机就会通过这个连接器下发命令手机上的 ClawPaw App 接收到命令后再模拟人的操作去执行。整个过程你不需要写复杂的脚本只需要“告诉” OpenClaw 你想做什么。我花了一些时间把这个 Skill 从部署、配置到实际应用都跑了一遍过程中踩了不少坑也总结出一些能让它更稳定、更实用的技巧。如果你也对用 AI 自动化控制手机感兴趣或者正在寻找将物理设备接入智能体工作流的方法那接下来的内容应该能给你提供一个从零到一的、可复现的详细指南。2. 核心原理与架构拆解要理解 ClawPaw 如何工作我们得先拆开看它的三层结构控制端OpenClaw Gateway、协议桥接层本 Skill、执行端手机 ClawPaw App。这不仅仅是安装一个 App 那么简单而是一个典型的主从式远程控制架构。2.1 执行端ClawPaw App 的角色与能力边界ClawPaw App 安装在你的安卓手机上它是整个链条的“手”和“眼睛”。它的核心是一个无障碍服务Accessibility Service。这是安卓系统为辅助功能如读屏软件提供的一套标准接口但也被广泛用于自动化。通过这个服务App 可以监听屏幕内容获取当前界面的控件层级信息就是那个layout XML知道哪里是按钮哪里是输入框。模拟用户操作在指定的坐标或控件上执行点击、滑动、长按、输入文本等操作。获取系统信息读取通知、电量、粗略位置等需要相应权限。注意正因为依赖无障碍服务所以 ClawPaw App 的权限非常高。这也意味着你只能在自己的设备或完全信任的设备上使用它并且从官方渠道如项目 GitHub 页面下载是安全底线。App 本身还内置了一个轻量级的HTTP/WebSocket 服务器。它监听某个端口比如 8080等待来自外部的指令。这就是控制端能与手机通信的基础。2.2 协议桥接层clawpaw-android-control Skill 的作用这是本项目klscool/clawpaw-android-control的核心。它本身不直接控制手机而是一个翻译官和适配器。它的主要职责是定义技能Skill告诉 OpenClaw “我”能做什么。比如定义一个名为android_tap的技能描述是“在手机屏幕上点击某个位置”。协议转换将 OpenClaw Gateway 下发的标准化指令可能是 JSON 格式转换成 ClawPaw App 能理解的 HTTP API 调用或 WebSocket 消息。连接管理维护与一个或多个手机节点的连接状态处理重连、心跳检测等网络问题。项目提供了两种连接模式对应两种不同的协议转换方式Gateway 模式WebSocketSkill 作为 Gateway 的一个插件手机 App 主动通过 WebSocket 长连接连接到 Gateway。这种方式连接稳定适合手机 IP 经常变动的场景如切换 WiFi并且能实现 Gateway 对手机的主动发现。HTTP 直连模式Skill 通过 HTTP 请求直接调用手机 App 的 API。这种方式更直接但需要确保主机能固定访问到手机的 IP 地址。2.3 控制端OpenClaw Gateway 的调度逻辑OpenClaw Gateway 是大脑负责调度。它接收用户的自然语言指令通过大语言模型LLM进行理解、规划和拆解。当它发现某个子任务需要操作手机时例如“截图”就会在自己的技能库中寻找匹配的 Skill——也就是我们部署的这个clawpaw-android-control。找到后Gateway 会按照 Skill 定义的输入参数格式生成具体的调用请求并通过 Skill 定义的接口WebSocket 或 HTTP发送出去。整个过程中Gateway 不关心手机的具体型号或系统版本它只和 Skill 交互。2.4 数据流全景图一次完整的“帮我截屏”指令数据流是这样的用户对 OpenClaw 说“截取我的手机屏幕。”OpenClaw LLM 理解意图规划出需要调用android_capture_screen这个技能。Gateway 在技能库中找到clawpaw-android-controlSkill 中定义的android_capture_screen方法及其参数可能不需要额外参数。Gateway 通过该 Skill 配置的连接方式假设是 WebSocket向已连接的手机节点发送{“action”: “captureScreen”}指令。手机上的 ClawPaw App 收到指令通过无障碍服务触发系统截图。ClawPaw App 将截图图片数据通过 WebSocket 回传给 Gateway。Skill 将图片数据封装成标准响应返回给 Gateway。Gateway 可能将图片保存或进一步传给 LLM 进行视觉分析最后将结果如“截图已保存”或“屏幕上显示的是微信聊天界面”反馈给用户。理解这个架构对于后续的故障排查和高级配置至关重要。你会清楚地知道当点击无效时问题可能出在 App 的无障碍服务、Skill 的配置、网络连接或是 Gateway 的指令生成环节。3. 环境准备与详细配置实操理论清楚了我们开始动手。这一部分我会以GatewayWebSocket连接模式为主进行讲解因为这是官方推荐、也是最稳定的方式。HTTP 直连模式会更简单但灵活性稍差我会在最后对比说明。3.1 手机端ClawPaw App 的安装与精调首先你需要一部安卓手机。系统要求是 Android 10但强烈建议使用Android 11 或以上。因为从 Android 11 开始权限管理模型更加严格一些获取屏幕内容的新 API 也更稳定能减少很多兼容性问题。步骤一获取与安装 App不要去第三方应用市场找。直接访问项目的 GitHub 仓库https://github.com/klscool/ClawPaw。通常在Releases页面可以找到最新的 APK 安装包文件。下载后直接在手机上安装。如果系统提示“禁止安装未知来源应用”去设置里找到对应来源如“文件管理”或你的浏览器的授权开关打开即可。步骤二核心权限授予关键步骤安装后打开 App你会看到一个非常简洁的界面核心是顶部的连接状态和下方的权限开关。这里的配置直接决定了 Skill 能做什么。无障碍服务必须开启这是 App 的“手”。点击相关设置项系统会跳转到无障碍设置页面。在“已下载的服务”或“已安装的应用”列表里找到ClawPaw打开开关。系统会弹出严重警告说明此服务可以监控你的操作。这是正常且必须的确认开启。实操心得开启后最好返回 ClawPaw App检查一下状态。有时系统会延迟生效可以尝试开关一下 App 的“服务启用”按钮或者重启 App。一个简单的测试方法是开启服务后在 App 内尝试一下“点击测试”功能如果提供的话。其他权限按需开启显示在其他应用上层允许 App 绘制悬浮窗或覆盖层。对于某些需要坐标点击的高级操作可能需要基础操作不一定需要。通知访问权限如果你想用 Skill 来读取通知列表必须开启。在系统设置中搜索“通知访问”授权给 ClawPaw。存储权限用于保存截图、读取照片等。如果你需要截图保存到手机或者让 Skill 访问相册就需要开启。位置、联系人、短信、日历等这些都是高级功能对应 Skill 里的高级 API。务必遵循最小权限原则你需要哪个功能才去开哪个权限。例如你只想自动化点击和截图那么只开无障碍和存储权限就够了。步骤三网络与连接配置在 App 的主界面你需要配置 Gateway 的连接信息。Gateway 地址这里要填写你运行 OpenClaw Gateway 的主机的地址。假设你的电脑运行 Gateway的局域网 IP 是192.168.1.100Gateway 的默认端口是3000那么这里就填入ws://192.168.1.100:3000。节点标识可以自定义一个名字如MyPixel6用于在 Gateway 后台区分多个手机。填写后点击“连接”或“启动服务”。如果一切正常顶部状态应显示“已连接 Gateway”或类似提示。避坑指南很多连接失败问题出在这里。首先确保手机和电脑在同一个局域网连接同一个 WiFi。其次检查电脑的防火墙是否放行了 3000 端口。你可以在电脑上用浏览器访问http://192.168.1.100:3000把 IP 换成你的试试如果 Gateway 运行正常应该能看到一个简单的界面或返回数据。3.2 主机端Skill 的部署与集成现在我们把桥接层——也就是clawpaw-android-control这个 Skill——部署到 OpenClaw Gateway 所在的主机上。步骤一获取 Skill 代码在你的主机上假设是 Linux/macOS 终端或 Windows WSL找一个合适的目录克隆仓库git clone https://github.com/klscool/clawpaw-android-control.git cd clawpaw-android-control步骤二理解配置文件项目根目录下有一个config.yaml.template或config.yaml文件。这是 Skill 的配置文件。我们主要关注 Gateway 模式下的配置。一个最小化的配置可能如下clawpaw: # Gateway 模式配置 gateway: enabled: true # Gateway 的地址与手机 App 里填的 ws:// 地址对应去掉 ws:// 前缀 host: 192.168.1.100 port: 3000 # HTTP 直连模式配置如果不用可以忽略 http: enabled: false devices: - name: my_phone ip: 192.168.1.101 port: 8080这里gateway.host和port指向的是 OpenClaw Gateway 本身。Skill 会通过这个配置与 Gateway 通信注册自己并接收指令。注意这个配置里的host是 Gateway 的地址而手机 App 里配置的也是这个地址它们共同通过 Gateway 进行中介通信。步骤三将 Skill 安装到 OpenClaw GatewayOpenClaw Gateway 通常通过 Docker 运行并且有一个特定的目录如./skills用来存放第三方 Skill。你需要将整个clawpaw-android-control文件夹复制到 Gateway 的 skills 目录下。# 假设你的 OpenClaw Gateway 项目目录在 /path/to/openclaw-gateway cp -r /path/to/clawpaw-android-control /path/to/openclaw-gateway/skills/然后你需要重启 OpenClaw Gateway 服务让它扫描并加载新的 Skill。# 如果使用 docker-compose cd /path/to/openclaw-gateway docker-compose restart gateway # 或者根据你的实际部署方式重启容器/服务步骤四验证安装重启后检查 Gateway 的日志。你应该能看到类似Loaded skill: clawpaw-android-control的日志信息。此外你可以通过 Gateway 提供的管理 API 或界面如果有查询已注册的技能列表确认clawpaw-android-control是否存在。3.3 连接测试与验证配置完成后需要进行端到端的测试确保链条是通的。检查手机 App 状态确保 ClawPaw App 显示“已连接”。检查 Gateway 节点列表OpenClaw Gateway 通常提供一个/nodes接口或管理界面用来查看已连接的设备节点。你应该能看到你的手机节点MyPixel6在线。发送测试指令这是最直接的验证。你可以通过 OpenClaw 的聊天界面或者直接调用 Gateway 的 Skill 测试接口。一个最简单的测试指令是获取设备信息。通过 OpenClaw 聊天界面你可以尝试说“获取一下我手机的信息。”或者使用curl命令模拟调用需要知道 Gateway 的 API 格式具体参考 OpenClaw 文档curl -X POST http://192.168.1.100:3000/api/skill/clawpaw-android-control/device_info \ -H Content-Type: application/json \ -d {device_id: MyPixel6}如果一切正常你应该能收到一个 JSON 响应包含手机的型号、系统版本、电量等信息。常见问题与排查手机 App 无法连接 Gateway检查 IP 和端口是否正确检查主机防火墙尝试在主机上ping手机的 IP以及在手机上用浏览器访问http://[电脑IP]:3000看是否能通。Gateway 看不到手机节点确认 Skill 已正确加载查看 Gateway 日志是否有 WebSocket 连接错误检查手机 App 的节点标识是否唯一。测试指令超时或无响应检查手机 App 的无障碍服务是否真的启用尝试在手机 App 内进行一个简单的本地点击测试确保其基础功能正常。4. 核心功能实操与脚本解析当连接畅通后我们就可以深入这个 Skill 所能提供的具体能力了。根据文档其功能大致可分为四类设备信息查询、屏幕操作、应用控制、高级数据访问。我们挑几个最常用和最有代表性的功能看看具体如何操作并分析其背后的脚本实现。4.1 基础信息获取知其然也知其所以然获取设备信息是验证连接和了解设备状态的基础。对应的 Skill 命令可能是get_device_info。当我们通过 OpenClaw 调用这个命令时发生了什么在clawpaw_controller.py脚本HTTP 模式下的客户端或 Skill 的 WebSocket 处理器中会向手机 App 发送一个特定的 API 请求例如GET /api/device/info。手机 App 收到后会调用安卓系统的Build、BatteryManager等 API收集如下信息model: 手机型号如 Pixel 6android_version: 系统版本battery_level: 当前电量百分比battery_status: 充电状态screen_resolution: 屏幕分辨率如 1080x2340这些信息被封装成 JSON 返回。这个功能的实用之处在于你可以在自动化流程开始时先检查设备电量如果过低则发送通知提醒充电避免任务执行到一半关机。4.2 屏幕操作模拟交互的核心这是使用频率最高的功能群包括点击 (tap)、滑动 (swipe)、长按 (long_press)、输入文本 (input_text) 等。其原理是 App 通过无障碍服务向系统注入对应的事件。坐标与百分比屏幕操作通常需要指定位置。有两种方式绝对坐标{“x”: 500, “y”: 1200}。这要求你事先知道目标位置的精确像素坐标在不同分辨率设备上不通用。相对坐标百分比{“x”: 0.5, “y”: 0.8}。表示横向 50%纵向 80% 的位置。这种方式更具通用性。实操示例实现一个“下滑刷新”操作假设我们想自动化刷新微博列表。通过分析我们知道在微博主界面从屏幕中部下滑可以触发刷新。指令规划OpenClaw 理解“刷新微博”后可能会规划两个子任务a) 打开微博 Appb) 执行下滑手势。技能调用对于下滑它会调用android_swipe技能并传入参数。参数生成一个可能的参数集是{ device_id: MyPixel6, start_x: 0.5, start_y: 0.3, end_x: 0.5, end_y: 0.7, duration: 400 }这表示从屏幕顶部 30% 的位置垂直滑动到屏幕 70% 的位置耗时 400 毫秒模拟一个中等速度的下滑。执行Skill 将参数发送给手机 AppApp 调用无障碍服务的GestureDescriptionAPI 执行滑动。重要经验布局分析先行。在编写复杂自动化流程前先用 Skill 的dump_layout或capture_screen功能结合分析工具或直接让 OpenClaw 分析截图获取目标控件的 ID、文本或坐标百分比。不要依赖死坐标。例如先获取当前界面 XML找到“刷新”按钮的resource-id然后用tap操作其坐标比盲目滑动更精准。4.3 应用控制与流程编排打开应用 (open_app) 和模拟返回键 (back) 是构建自动化流程的积木。open_app需要知道应用的包名package name而不是应用显示的名称。例如微信的包名是com.tencent.mm。如何获取包名使用adb shell pm list packages命令。查看项目文档中的references/apps/app-list.md文件它可能包含了一些常用应用的包名列表。让 OpenClaw 通过get_current_package技能帮你识别当前前台应用的包名。一个简单的“打开微信并进入搜索框”的流程在 OpenClaw 中可能被编排为open_app-com.tencent.mm(打开微信)wait-2000(等待2秒应用启动)tap-{“x”: 0.9, “y”: 0.1}(点击右上角搜索图标假设该位置)input_text-{“text”: “OpenClaw”}(在搜索框输入文本)4.4 高级功能与权限管控高级功能如读取通知 (get_notifications)、访问照片 (get_photos)、读取短信 (get_sms) 等需要 App 提前获得相应的系统权限并且在 Skill 调用时手机 App 会向用户弹出授权对话框如果首次使用。安全建议最小权限在手机 App 的设置里只开启你计划使用的功能对应的权限。隐私考量这些功能会访问敏感数据。确保你完全信任 OpenClaw Gateway 的运行环境以及 Skill 的代码。数据仅在你的手机、你的主机和你的 OpenClaw 实例之间流动。使用场景这些功能非常适合构建信息聚合机器人。例如每天早上让 OpenClaw 汇总你的未读通知和短信验证码或者根据相册最新照片的内容自动生成描述文案。5. 实战构建一个自动化信息收集工作流现在我们将前面所有的知识点串联起来设计并实现一个实用的自动化场景“每日晨报”机器人。它的功能是每天早晨自动收集手机上的未读通知概览、当前电量、存储空间情况并朗读出来或发送到你的电脑。步骤一分解任务解锁手机如果设置了锁屏密码这一步较复杂可能需借助设备管理员权限或智能锁屏本例暂假设设备已解锁或无需密码。获取未读通知列表。获取设备信息电量和存储。格式化信息并输出。步骤二在 OpenClaw 中编排 Skill我们需要告诉 OpenClaw 如何执行这个流程。这可以通过编写一个Workflow或Agent来实现具体取决于 OpenClaw 的版本和功能。其核心逻辑的伪代码如下# 这是一个概念性的流程描述非真实配置 workflow: name: morning_briefing steps: - skill: clawpaw-android-control action: get_notifications params: device_id: MyPixel6 store_as: notifications - skill: clawpaw-android-control action: get_device_info params: device_id: MyPixel6 store_as: device_info - skill: text_processing # 假设有一个文本处理技能 action: format_report params: notifications: ${notifications} battery: ${device_info.battery_level} storage: ${device_info.storage_free} store_as: report - skill: tts # 假设有一个文本转语音技能 action: speak params: text: ${report}在 OpenClaw 的聊天界面你或许可以直接用自然语言描述这个流程让它自动生成对应的执行计划。或者在支持图形化编排的版本中你可以拖拽这些技能节点来构建流程。步骤三处理边界情况与优化网络稳定性在流程开始前可以增加一个“检查节点在线状态”的步骤。错误处理如果获取通知失败例如权限未开流程应该能记录错误并继续执行其他步骤而不是完全中断。触发方式如何实现“每天早晨”自动执行这需要结合 OpenClaw 的定时任务功能如 Cron Job或外部调度器如系统 crontab 调用 OpenClaw API。输出方式除了朗读还可以将报告发送到 Telegram、钉钉、或是保存为本地文件。通过这个实战案例你可以看到clawpaw-android-control作为一个基础技能就像乐高积木一样可以与其他技能文本处理、TTS、消息推送组合构建出功能强大的个性化自动化助手。6. 故障排查与性能优化指南在实际使用中你肯定会遇到各种问题。下面是我总结的常见问题清单和排查思路以及一些提升稳定性的技巧。6.1 连接类问题症状手机 App 显示“连接失败”或 Gateway 看不到节点。排查思路网络层确认手机和主机 IP 在同一网段。尝试互相ping。检查主机防火墙是否阻止了 3000 端口Gateway或 8080 端口手机 HTTP 模式。地址配置确认手机 App 中 Gateway 地址的协议是ws://WebSocket而非http://。确认 IP 和端口无误。Gateway 状态确认 OpenClaw Gateway 服务正在运行。查看其日志是否有错误。重连机制网络波动是常事。检查 ClawPaw App 是否有后台保活机制以及是否在断开后能自动重连。可以在 App 设置中寻找相关选项。6.2 操作执行类问题症状指令发送成功但手机上没有反应如点击无效。排查思路无障碍服务这是最常见的原因。去系统设置里确认 ClawPaw 的无障碍服务开关是打开的并且没有被系统“优化”掉。可以尝试关闭再重新打开。屏幕状态确保手机屏幕是亮着的并且没有处在锁屏界面。某些操作在锁屏下会被系统限制。坐标/控件识别如果使用坐标点击确认坐标是否正确。不同分辨率、不同比例的手机坐标差异很大。强烈建议使用基于控件resource-id、text的定位方式或者使用百分比坐标。先用dump_layout技能获取当前界面 XML分析目标控件。权限冲突如果安装了其他需要无障碍服务的应用如某些自动化工具可能会冲突。尝试暂时禁用其他类似应用。症状操作执行了但效果不对如点错了地方。排查思路界面变化App 界面更新了按钮位置变了。自动化脚本需要一定的容错性或者结合图像识别如果 OpenClaw 支持来动态定位。延迟问题操作执行得太快上一个界面还没加载完就执行了下个点击。在关键操作之间增加wait步骤比如等待 1-2 秒。动画干扰某些 App 的过渡动画期间控件可能无法交互。可以尝试在操作前增加等待或者通过 ADB 命令全局关闭动画开发者选项里。6.3 性能与稳定性优化使用 WebSocket (Gateway) 模式相比 HTTP 短连接WebSocket 长连接避免了频繁建立连接的开销延迟更低更适合实时性要求稍高的连续操作。操作合并与批处理如果需要连续点击多个位置可以考虑让 Skill 支持一个“批处理”命令将多个操作一次性发送给手机 App 执行减少网络往返次数。本地缓存与重试对于重要的操作可以在 Skill 层或上层工作流中实现简单的重试机制。例如点击后检查预期结果如通过截图判断如果失败则重试一次。手机端优化确保 ClawPaw App 在后台有足够的电量优化白名单防止被系统清理。关闭手机上的省电模式。6.4 安全与隐私再强调物理安全这部手机最好是一台备用机或者是你个人高度信任的设备。不要在公司或公共网络下的设备上部署。网络隔离将运行 OpenClaw Gateway 的主机和手机放在一个独立的、受保护的局域网段内避免从公网直接暴露相关端口。权限复审定期检查手机 App 已授予的权限关闭不再需要的功能。日志管理OpenClaw Gateway 和 Skill 的日志可能包含操作记录甚至屏幕信息。定期清理日志或确保日志存储在安全的位置。7. 进阶思路与扩展可能性当你熟练掌握了基础操作后可以探索一些更进阶的玩法让自动化变得更智能。1. 与视觉模型结合OpenClaw 的核心是 LLM。你可以将capture_screen获取的截图发送给一个视觉理解模型如 GPT-4V、Claude 3.5 Sonnet 或开源的 VLM让模型“看懂”屏幕内容并生成下一步的操作指令。例如“找到屏幕上红色的下载按钮并点击它”这就不再需要预先知道按钮的坐标或 ID。2. 多设备协同如果你有多台安卓设备可以部署多个 ClawPaw 节点。OpenClaw Gateway 可以同时管理它们。你可以构建这样的工作流“在设备A上接收验证码然后在设备B上登录应用”。这需要对 Skill 进行扩展支持在指令中指定目标设备 ID。3. 复杂工作流编排将手机控制与其他技能深度结合。例如 *信息转发收到重要短信或通知后自动转发到 Telegram。 *自动化签到结合定时任务每天打开特定 App完成签到、领取奖励等系列操作。 *数据备份定期将手机相册中的新照片通过操作文件管理器 App上传到云端网盘。4. 自定义 Skill 扩展如果现有的clawpaw-android-control功能不满足你的需求你可以基于它的代码进行扩展。例如增加一个“连续滑动直到找到某内容”的功能或者增加对特定 App 的深度操作如微信抢红包。这需要你熟悉 Python/Node.js 以及 ClawPaw App 的通信协议。这个项目的魅力在于它将物理世界的交互手机操作接入到了数字智能体OpenClaw的决策循环中。你不再仅仅是给手机写死板的自动化脚本而是拥有了一个可以通过自然语言指挥、能理解复杂意图、并能动态规划步骤的“手机助手”。从简单的信息获取到复杂的多应用操作其可能性取决于你的想象力和对工具的组合能力。