# 逍遥模拟器 ADB 端口与连接设置（MEmu Play）

> 通过 21503 端口把 MEmu Play 连接到 Macro Automation Studio，找到逍遥模拟器 ADB 端口，添加为设备，修复设备离线错误，并用 MAS 宏替代录制器。

Source: https://automationmacro.com/zh-CN/docs/memu-setup-guide (设备, updated 2026-09-05)

这篇指南介绍如何通过 ADB 把 MEmu Play（逍遥模拟器）连接到 Macro Automation Studio（MAS），逍遥模拟器 ADB 端口是多少，以及 MAS 宏与 MEmu 的宏录制器有什么不同。MEmu 只有 Windows 版本，所以下面的每一步都是 Windows 上的步骤。

## 开始之前

- 已在 Windows 10 或 11 上安装并登录 MAS。试用期内 MAS 可免费下载；从[下载页](/download)获取。
- 已从 [memuplay.com](https://www.memuplay.com/) 安装 MEmu 并至少启动过一次。
- 实例已完全启动到安卓主屏幕。
- 已在 BIOS 中开启虚拟化，以保证实例稳定。

## 1. 安装 MEmu

1. 从官方网站下载 MEmu 并运行安装包。
2. 启动 MEmu，等待主屏幕出现。
3. 在把设备添加到 MAS 之前，先登录要自动化的应用。

## 2. 设定固定分辨率

MAS 逐像素匹配模板图片。打开 MEmu 的设置，选择一个固定分辨率，并保持不变。按 MAS 基准编写的宏预期竖屏 **540x960**、**240 DPI**；你自己写的宏预期的是你在 Asset Lab 中截取时的分辨率。MEmu 要求时重启实例。

> [!WARNING]
> 截取模板之后再改分辨率，每个匹配都会偏移。分辨率选定一次，之后保持不变。

## 3. 在 MEmu 中开启 ADB

MEmu 的官方文档没有显示 ADB 开关。运行中的实例会把安卓的 adb 端口转发到宿主机的 `127.0.0.1:21503`，这也是 MEmu 自己的命令行指南使用的地址。如果你的 MEmu 版本在设置中有 ADB 或开发者选项，保持开启即可。启动实例，等主屏幕出现后再继续。

## 4. 逍遥模拟器 ADB 端口与 MAS 的扫描方式

MEmu 的默认实例监听 **21503**。MAS 不用 `adb devices` 来发现模拟器。它扫描运行中的进程，保留符合以下规则的端口：

- 进程名包含 `memuheadless` 或 `memuhyper`。
- 端口不小于 21503、以 3 结尾且小于 30000。所以 21513 和 21523 这样的端口也符合。
- 套接字监听在 `127.0.0.1` 上。

匹配的端口会出现在添加设备对话框中，标注为 `MEmu`，例如 `21503 - MEmu`。扫描在你打开设备组时以及每次点击**刷新**时进行。

## 5. 在 MAS 中通过 ADB 连接 MEmu Play

1. 在侧边栏打开**设备组**，打开一个组，或新建一个。
2. 点击**添加设备**。
3. 输入不超过 50 个字符的**设备名称**。
4. 在**端口**中选择这个实例对应的 `MEmu` 项。列表为空时点击**刷新**。
5. 如果 MEmu 使用的端口不符合上面的规则，选择**自定义端口**并输入。MAS 接受 1024 到 65535。
6. 可选：选择一个**启动宏**。
7. 点击**添加设备**，然后在设备卡片上点击**启动**。

卡片会显示**连接中**，然后是**运行中**。MAS 启动它的 adb 服务器，移除 `127.0.0.1:<port>` 的任何过期条目，然后对它运行 `adb connect`。

## MEmu 上的宏

MEmu 的宏录制器按固定坐标捕获点击和滑动并重放，可以选择重复执行。它不看屏幕，所以加载缓慢、弹窗或移动了的按钮都会打断序列，而且流程只能在 MEmu 内部工作。

MAS 宏是一段在行动前先检查屏幕的 Python 脚本。它用模板匹配找到按钮，用 OCR 读取文字，用重试等待，并根据看到的内容分支。同一段脚本无需修改就能在 MEmu、其他模拟器和云设备上运行，因为 MAS 通过 adb 驱动设备。

- 要把录制的流程重建为会看屏幕的宏，按照[图像识别宏](/docs/guides/image-recognition-macros)操作。
- 要让它循环到满足某个条件为止，或者按计划运行，阅读[循环、停止条件与定时](/docs/guides/loops-and-scheduling)。
- Marketplace 宏安装后就是 MAS 宏，在你指定的设备上运行。

> [!NOTE]
> 在 MAS 中启动设备之前，先停掉 MEmu 的录制器。两者都向同一个屏幕发送输入，会互相干扰。

## 多个 MEmu 实例

MEmu 多开管理器中的每个实例都监听自己的端口。把每个实例作为单独的设备添加到同一个设备组，按设备指定宏和设置方案，然后在组上使用**全部启动**和**全部停止**。按设备设置参数和代理，参见[设备组](/docs/device-groups)。

## 故障排查

### MEmu ADB 连接

设备卡片显示**错误**或 "Failed to start device"，或者 MAS 没有列出任何 `MEmu` 项。逐条排查这些原因：

- 实例还在启动。等主屏幕出现后再点击**刷新**并重新启动。
- 端口不符合扫描规则，MAS 跳过了它。用**自定义端口**填入 MEmu 使用的端口号。
- 端口属于另一个实例。在卡片上用**编辑设备**修正。
- 扫描报告 "Failed to scan emulator ports"。重启 MAS 并重新打开对话框。
- 设备日志里 adb 输出了 "connection refused" 或 "cannot connect"。这个端口上没有任何东西在监听；重启实例并重新核对端口号。

### MEmu ADB 设备离线

当实例内的 adb 守护进程停止响应时，adb 会把设备标记为 `offline`，通常发生在休眠、更新或机器上出现第二个 adb 服务器之后。在卡片上点击**停止**，重启 MEmu 实例，关闭任何运行自带 adb 服务器的工具，然后点击**启动**。MAS 每次启动都会断开过期条目并重新连接。仍然离线时，重启 MAS 让它的 adb 服务器干净地启动。

### MEmu 宏录制器与 MAS 的对比

在 MEmu 中录制的流程无法导入 MAS，因为 MAS 只运行 Python 宏。请重新制作：在 Asset Lab 中把按钮截成模板，用 `find_object_retry` 点击它们，再用停止条件循环。这样得到的宏能扛住弹窗、加载缓慢和布局变化这些会打断录制序列的情况，并且能在 MAS 控制的任何设备上运行。如果 MAS 宏卡住，打开设备卡片上的**日志**：`ImageNotFoundError` 和 `TimeoutError` 会指出失败的步骤。

## 用 Python 控制它

卡片处于**运行中**时，宏的 `src/app.py` 通过 `mas` 包驱动实例。端口由 MAS 选择，所以脚本从不引用它。

```python
import mas

size = mas.get_screen_size()
mas.log(f"MEmu screen is {size.width}x{size.height}")

match = mas.find_object_retry(1234, total_tries=3, time_sleep=2.0)
if match:
    mas.click(match.x, match.y)
```

各命名空间见 [SDK 概览](/docs/sdk)；完整的第一个脚本见[用 Python 控制安卓模拟器](/docs/guides/control-an-emulator-from-python)。
