免费获取学习方案
ARTICLE DETAIL

资讯详情

深耕编程基础知识与建站技术分享的一线实战洞察。

mobile-mcp 移动设备自动化实战:Agent 驱动 iOS/Android 真机、模拟器与仿真器的完整指南

mobile-mcp 移动设备自动化实战:Agent 驱动 iOS/Android 真机、模拟器与仿真器的完整指南 人工智能AI AgentMCP 服务GUI 自动化移动开发测试【免费下载链接】mobile-mcpModel Context Protocol Server for Mobile Automation and Scraping (iOS, Android, Emulators, Simulators and Real Devices)项目地址https://gitcode.com/GitHub_Trending/mo/mobile-mcp点击查看免费下载本篇技术指南以 skills/mobile-automation/SKILL.md 为核心骨架系统讲解 mobile-mcp 这一 MCP Server 提供的移动自动化工作流如何选取设备、读取屏幕状态、执行点击/滑动/输入等动作并在每次操作后验证 UI 变化。读完本文你将掌握一套可直接复用的 Agent 驱动式移动 UI 测试与自动化方案并能理解其背后的 accessibility-first无障碍树优先设计原理与源码实现。为什么移动自动化要先读 accessibility 树mobile-mcp 的全部工具都以mobile_为前缀覆盖真机iOS/Android、模拟器与仿真器。其核心设计理念是accessibility-first优先从设备原生的无障碍树accessibility tree读取带标签和坐标的 UI 元素而不是依赖截图加视觉模型。这一设计的直接收益体现在三个维度更快读取无障碍树是结构化数据请求远比截图加图像推理快更省不消耗视觉模型的 image token成本更低更可靠返回的是真实 UI 元素的标签、坐标与状态消除了纯截图方案的歧义。在 src/server.ts 的mobile_take_screenshot实现中可以看到截图被明确设计为兜底方案——只有当元素缺失、或者面对游戏、Canvas 绘制 UI、纯图片内容时才需要回退到截图见 src/server.ts。README 中同样强调这一分层Accessibility-first — fast and cheap: drives apps from the native accessibility tree (no vision model, no image tokens), falling back to screenshots coordinates only when needed见 README.md。核心工作流四步驱动任意移动设备SKILL 文档给出了一套固定的四步工作流这是 Agent 操作任何移动设备都必须遵守的骨架。步骤 1选择设备Pick a device调用mobile_list_available_devices从返回结果中选定一台设备并在后续所有调用中复用同一个 device id。mobile_list_available_devices → 返回设备列表含 id、name、platform、type、version、state如果列表为空说明本机没有可用设备需要请用户接入Androidadb devices必须能看到该设备真机需开启并授权 USB 调试模拟器需先启动iOS仿真器必须已 bootxcrun simctl boot iPhone 16或真机已完成配对信任。从源码看mobile_list_available_devices的实现src/server.ts会过滤掉state ! online的设备只返回当前立即可用的目标同时它依赖 mobilecli 的devices --include-offline命令封装见 src/mobilecli.ts以便统计已安装但未启动的仿真器数量。对应的参数解析测试可在 test/mobilecli.test.ts 中找到——--platform、--type、--include-offline均是可组合的过滤条件。步骤 2查看屏幕See the screen优先调用mobile_list_elements_on_screen。它返回无障碍树中的元素列表每个元素包含 ref、类型、文本/标签、坐标和尺寸。相比截图它更快、更便宜、更可靠。mobile_list_elements_on_screen → 每行一个元素ref Type text label name value id atx,y sizeWxH [focused] [selected] [checked] [disabled]仅在以下场景才回退到mobile_take_screenshot无障碍树中找不到目标元素需要视觉确认界面状态游戏、Canvas 绘制 UI、纯图片内容。元素的格式化逻辑实现在 src/format-elements.tstext 格式输出一行紧凑的可读描述formatElementAsTextjson 格式则输出完整结构化字段formatElementAsJson默认是 text。之所以只输出非默认状态focused/selected/checked/disabled是为了避免用无关字段干扰 LLM 判断见 src/format-elements.ts。步骤 3执行动作Act根据屏幕状态选择对应的动作工具工具用途mobile_click_on_screen_at_coordinates点击指定坐标或点击元素的 ref如e5mobile_swipe_on_screen上/下/左/右滑动可指定起点坐标与距离mobile_type_keys向聚焦的输入框键入文本可附带 submitmobile_press_button按硬件键HOME、BACK、VOLUME_UP、VOLUME_DOWN、ENTER 等mobile_launch_app/mobile_terminate_app/mobile_list_apps应用生命周期管理mobile_open_url在设备浏览器中打开 URL值得注意mobile_click_on_screen_at_coordinates同时支持两种定位方式——通过x,y像素坐标或通过上次mobile_list_elements_on_screen返回的 ref如e5。ref 优先于坐标见 src/server.ts因为 ref 直接指向无障碍树中的元素中心精度更高。步骤 4每次动作后验证Verify移动 UI 有动画操作后界面不会立刻稳定。每一步操作之后都必须重新列出元素或重新截图确认 UI 按预期变化后再进入下一步如果预期元素尚未出现应短暂等待后再次检查而不是盲目点击。Action → mobile_list_elements_on_screen或 mobile_take_screenshot→ 比对预期变化 → 继续下一步这个验证闭环是防止 Agent 在动画过渡期盲点的关键也是移动自动化任务成功率的最大来源。实战技巧详解SKILL 文档的 Tips 部分浓缩了多次迭代沉淀的实战经验逐条展开如下。点击元素中心而不是左上角元素的 bounds 描述的是矩形包围盒。点击时应取矩形的中心点而不是左上角——左上角往往落在元素边界、间距或圆角上容易点到相邻元素。从 src/format-elements.ts 的元素输出看每个元素都带有atx,y sizeWxH中心点即(x W/2, y H/2)。而 mobilecli 模式下的tapByRefsrc/mobile-device.ts直接按 ref 点击由底层自动定位元素中心是比手工计算坐标更可靠的选择。输入文本的正确姿势正确流程是先点击输入框 → 确认其已聚焦 → 再调用mobile_type_keys。跳过聚焦确认直接键入文本可能落入错误的控件。mobile_type_keys的实现src/server.ts说明了一个细节当submit: true时它会在发送文本后追加一次ENTER按键等价于mobile_press_button(ENTER)用于提交表单或触发搜索。截图保存与屏幕录制用户需要图片文件时用mobile_save_screenshot保存到磁盘支持.png、.jpg、.jpeg见 src/server.ts需要视频时用mobile_start_screen_recording启动录制、mobile_stop_screen_recording停止并返回文件路径、大小与时长。录制是后台运行的进程mobile_start_screen_recording通过screenrecord --device id --output path --silent生成 mp4必要时支持timeLimit自动停止每个设备同时只允许一个活跃录制见 src/server.ts。崩溃日志排查App 崩溃时用mobile_list_crashes列出设备上可用的崩溃报告再用mobile_get_crash id获取完整内容。崩溃列表与内容获取均通过 mobilecli 的device crashes list/get命令完成src/mobilecli.ts返回 JSON 中的content字段即为崩溃报告正文src/server.ts。屏幕尺寸与坐标系先用mobile_get_screen_size获取屏幕的像素尺寸后续所有坐标操作都基于该坐标系。注意两点截图通常会被等比缩小默认最大边 1024px见 src/server.ts而点击坐标基于完整屏幕尺寸两者需要换算iOS 的屏幕尺寸以 point 计量而全尺寸截图以像素计量两种空间往往不一致。mobile_take_screenshot返回截图时会附带一段坐标映射说明——describeCoordinateMappingsrc/coordinate-mapping.ts会提示将截图中的 x 乘以系数、y 乘以系数得到屏幕坐标。这也是截图坐标不能直接用于点击的根本原因。云端真机无本地硬件本机没有真实设备时可以租用云端真机流程为mobile_login_to_cloud_provider # 浏览器 device-code 登录仅需一次 mobile_list_remote_devices # 查看可预留的机型目录 mobile_allocate_remote_device # 预留一台真机独占使用 mobile_release_remote_device # 任务结束后释放回共享池从源码看mobile_allocate_remote_device支持按platform、name支持iPhone*前缀匹配、version支持18等比较前缀、type过滤并可设置wait: true阻塞等待分配完成、timeoutSeconds控制等待上限默认 900 秒见 src/server.ts。释放是破坏性操作设备上的安装包、推送文件等会话期间改动会丢失且再次分配可能拿到不同的物理机因此整段任务结束才释放不要为保持整洁而中途释放再分配见 src/server.ts。源码级支撑工具如何落地mobilecli统一的设备驱动 CLImobile-mcp 默认基于mobilecli二进制工作。Mobilecli类src/mobilecli.ts封装了所有底层命令设备枚举、崩溃日志、agent 状态检查/安装、远程设备分配等。它会自动按平台linux/macos/windows × amd64/arm64定位二进制优先读MOBILECLI_PATH环境变量再在node_modules中查找平台化 scoped 包mobilenext/mobilecli-platform-arch兼容 1.0.6 及更早版本的 bin 目录布局src/mobilecli.ts。Robot 抽象与两种驱动模式所有设备操作统一收敛到Robot接口src/robot.ts它定义了屏幕尺寸、滑动、截图、应用管理、键鼠输入、元素读取等能力。接口上有不少可选方法getForegroundApp?、setLocation?、getClipboard?、getLogs?等因为不同驱动后端的能力并不完全一致。server 层通过createRobotFromDevicesrc/server.ts按设备 id 分派默认 mobilecli 模式一切设备统一走MobileDevicesrc/mobile-device.ts它对每个动作翻译为一条 mobilecli 子命令例如io tap x,y、io swipe、apps launch、dump ui、device info等Legacy 模式设置MOBILEMCP_LEGACY_ROBOT1时iOS 走IosRobot/Simctl基于 WebDriverAgentsrc/iphone-simulator.tsAndroid 走AndroidRobot直接封装 adb 与 UIAutomatorsrc/android.ts。从 src/mobile-device.ts 可以看到无障碍树的底层来源dump ui返回的元素树经flattenUIElement扁平化为带 ref 的平铺列表这正是mobile_list_elements_on_screen的数据基础。而双击在 mobilecli 模式下是两次 tap 的组合src/mobile-device.ts。工具注解让 Agent 安全地使用工具每个工具都注册了readOnlyHint/destructiveHint/openWorldHint注解用于向 Agent 传达副作用边界。完整的注解矩阵由 test/server-annotations.test.ts 固化并逐项断言例如mobile_list_available_devices是只读的readOnlyHint: true而mobile_release_remote_device、mobile_uninstall_app被标记为破坏性操作。安全校验文件与 URL 白名单输出类工具保存截图、日志、录制通过validateOutputPath限制写入目录——只允许写入当前工作目录与系统临时目录含 macOS 下/tmp、/private/tmp的符号链接处理防止路径逃逸src/utils.ts扩展名校验截图仅.png/.jpg/.jpeg日志仅.log/.txt/.jsonl录制仅.mp4安装包仅.apk/.ipa/.zip/.appsrc/server.tsURL 白名单mobile_open_url默认只允许http://与https://打开自定义 scheme 需要显式设置MOBILEMCP_ALLOW_UNSAFE_URLS1src/server.ts。批处理减少往返的mobile_batch_commands对于填表、多步流程等场景可用mobile_batch_commands在一次调用内顺序执行多个工具如 click、type、click、type并以stopOnError控制遇错是否中断、listElementsAtEnd在末尾追加一次元素列表。其实现直接复用已注册的工具回调而绕过 MCP transportsrc/server.ts注意它不允许嵌套自身且mobile_take_screenshot因返回图片而不能用于批处理可改用mobile_save_screenshot。用验证闭环代替盲点一条最小可运行路径将上述内容串成一条可复现的最小路径假设 Android 模拟器已启动mobile_list_available_devices拿到 device idmobile_list_elements_on_screen确认当前界面mobile_click_on_screen_at_coordinates点击目标优先用 ref重新mobile_list_elements_on_screen确认 UI 已变化如过渡未完成则稍候再查必要时用mobile_take_screenshot做视觉确认需要落盘时用mobile_save_screenshot录制用mobile_start_screen_recording/mobile_stop_screen_recording异常排查用mobile_list_crashes/mobile_get_crash无本地硬件时走云端登录 → 列表 → 分配 → 释放。这套工作流同样适用于多步用户旅程自动化Agent 每一步都先看后动、动完再验配合mobile_batch_commands在信任区间内合并往返即可稳定驱动真实设备完成表单填写、内容搜索、点赞评论、预订等复合任务。仓库中的 README.md 提供了大量此类多步骤提示词示例如搜索视频并点赞评论分享、下载应用注册并评分、在 Substack 阅读高亮并收藏等可以直接作为 Agent 提示词的起点。赞分享人工智能AI AgentMCP 服务GUI 自动化移动开发测试【免费下载链接】mobile-mcpModel Context Protocol Server for Mobile Automation and Scraping (iOS, Android, Emulators, Simulators and Real Devices)项目地址https://gitcode.com/GitHub_Trending/mo/mobile-mcp点击查看免费下载相关推荐Playwright 移动端真机测试Android/iOS 设备连接与自动化Playwright 移动端真机测试Android/iOS 设备连接与自动化 引言告别模拟器痛点拥抱真机测试新范式 你是否还在忍受移动端模拟器测试的三大痛测试开发工具浏览器控制react-native-reusables 实战用 Argent MCP 驱动 iOS 模拟器与 Android 模拟器的移动端开发测试工作流react native reusables 实战用 Argent MCP 驱动 iOS 模拟器与 Android 模拟器的移动端开发测试工作流 导读 在 rUI组件移动开发前端mobile-mcp移动自动化的终极革命让AI轻松操控iOS和Android设备mobile mcp移动自动化的终极革命让AI轻松操控iOS和Android设备 你是否曾经为移动应用测试的复杂性而头疼是否希望有一种简单的方法让AI助手人工智能AI AgentMCP 服务GUI 自动化移动开发测试创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表