# MuMu 模拟器 ADB 端口与连接设置（MuMu Player 12）

> 查看 MuMu 模拟器 ADB 端口，把 Macro Automation Studio 连接到 MuMu Player 12，把每个多开实例添加为设备，并用 MAS 宏替代操作录制。

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

这篇指南介绍如何查看 MuMu 模拟器 ADB 端口并把 MuMu Player 12 的实例连接到 Macro Automation Studio（MAS），并解释 MAS 宏与 MuMu 的操作录制有什么不同。步骤以 Windows 为主；末尾有一小节介绍 Mac 版本。

## 开始之前

- 已在 Windows 10 或 11，或 Apple Silicon Mac 上安装并登录 MAS。试用期内 MAS 可免费下载；从[下载页](/download)获取。
- 已从 [mumuplayer.com](https://www.mumuplayer.com/) 安装 MuMu Player 12 并至少启动过一次。
- 实例已完全启动到安卓主屏幕。
- 要自动化的应用已在 MuMu Player 中安装并登录。

## 1. 安装 MuMu Player 12

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

## 2. 设定固定分辨率

MAS 逐像素匹配模板图片，所以分辨率选定一次就不要再改。

1. 点击 MuMu Player 窗口右上角的**设置**。
2. 打开**显示**，选择自定义分辨率。
3. 输入宽 540、高 960、DPI 240。这是 MAS 基准；你自己写的宏预期的是你在 Asset Lab 中截取时的分辨率。
4. 保存，MuMu Player 要求时重启实例。

> [!WARNING]
> 截取模板之后再改分辨率，每个匹配都会偏移。MuMu 自带的录制器也遵循同样的规则。

## 3. 在 MuMu Player 12 中开启 ADB

官方 ADB 指南显示 MuMu Player 12 没有开关。运行中的实例不需要任何设置就会在它的端口上响应 adb，所以你需要的只是端口号：

- 单个实例：打开窗口右上角的菜单，选择**问题诊断**。ADB 调试端口列在那里。
- 多个实例：打开 **MuMu 多开器 12**，点击运行中实例上的 ADB 图标查看它的端口。

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

MuMu Player 12 给主实例的端口是 **16384**，之后每个实例加 32：16416、16448 等等。端口被占用时，MuMu 会加 1，所以可能出现 16385。MAS 不用 `adb devices` 来发现模拟器。它扫描运行中的进程，只有满足以下全部条件时才保留端口：

- 进程名包含 `nemuheadless` 或 `mumu`。
- 端口在 16384 到 16576 之间、26624 到 27264 之间、恰好是 7555，或者是 5555 到 5599 之间的奇数。
- 套接字监听在 `127.0.0.1`、`0.0.0.0` 或所有网卡上。

16384 到 16576 的范围覆盖主实例和后面六个；7555 和 5555 范围来自较旧的 MuMu 版本。匹配的端口会出现在**添加新设备**对话框中，标注为 `MuMu`，例如 `16384 - MuMu`。MAS 在你打开设备组时以及每次点击**刷新**时扫描。

## 5. 在 MAS 中通过 ADB 连接 MuMu Player

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

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

## MuMu Player 上的宏

MuMu 的**操作录制**记录点击并从文件重放，提供三种停止条件（**执行 x 次后停止**、**执行 xx 时间后停止**和**无限循环直到手动停止**）和一个**循环间隔**。官方提醒回放时的分辨率必须与录制时一致。文件按固定坐标重放，不看屏幕，所以加载缓慢、弹窗或移动了的按钮都会打断序列，而且它只能在 MuMu Player 内部运行。

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

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

> [!NOTE]
> 在 MAS 中启动设备之前，先结束所有正在运行的操作录制。两者都向同一个屏幕发送输入，会互相干扰。

## 多个 MuMu 实例

从右上角的工具箱图标打开 **MuMu 多开器 12**。**+新建**创建一个实例，**设备设置**设定它的性能和显示，所以请给每个实例相同的分辨率。每个实例监听自己的端口，比前一个大 32。把每个实例作为单独的设备添加到同一个设备组，按设备指定宏和设置方案，然后在组上使用**全部启动**和**全部停止**。从第八个实例开始，端口超过 16576，MAS 不再列出它；用**自定义端口**添加。按设备设置参数和代理，参见[设备组](/docs/device-groups)。

## Mac 上的 MuMu Player

MuMu 也提供面向 Apple Silicon Mac 的版本。官方指南把 ADB 放在菜单栏里：设备运行时，打开**工具**，选择**打开 ADB（设备端口号）**。这一项会显示端口；默认同样是 16384。如果 MAS 的扫描没有列出它，用**自定义端口**添加。

Mac 上的 MAS 需要一个 adb 可执行文件：它先在应用包内查找，然后是你的 PATH，最后是 Homebrew 的目录。如果 MAS 提示 "ADB executable not found. Please install ADB using your package manager"，用 Homebrew 安装 adb 后重启 MAS：

```bash
brew install android-platform-tools
```

MAS 始终连接 `127.0.0.1`，所以 MuMu Player 必须运行在同一台 Mac 上。

## 故障排查

### MuMu ADB 端口

MAS 没有列出 `MuMu` 项，或者列出的项属于另一个实例。

- 从**问题诊断**或 **MuMu 多开器 12** 中的 ADB 图标读取端口，和设备卡片上的对比；用**编辑设备**修正。
- 从 16384 起按每个实例 32 递增计算，端口被占用时再加 1（16385 而不是 16384）。
- 实例还在启动，端口还没打开。等主屏幕出现后点击**刷新**。
- 端口超过 16576 或不在扫描规则之内。选择**自定义端口**并输入。

### MuMu ADB 连接失败

设备卡片显示**错误**并提示 "Failed to start device"，日志写着 "unable to connect to device"，或者 adb 输出 "cannot connect" 或 "connection refused"。

- 这个端口上没有任何东西在监听。按上面的方法核对端口号，并确认实例正在运行。
- 第二个 adb 服务器持有过期条目。关闭其他运行自带 adb 服务器的工具，点击**停止**，重启实例，然后点击**启动**；MAS 会从头重新连接。
- `adb devices` 把端口显示为 `offline`。重启实例；仍然离线时重启 MAS，让它的 adb 服务器干净地启动。
- 扫描报告 "Failed to scan emulator ports"。重启 MAS 并重新打开对话框。

要查看 adb 的原始回复，在终端运行 `adb connect 127.0.0.1:16384`。更多修复方法见 [ADB 故障排查](/docs/adb-troubleshooting)。

### MuMu 上的脚本循环

设为**无限循环直到手动停止**的录制无法判断循环是否应该继续，所以达到目标或出现弹窗后它仍然会一直点。MAS 宏在 Python 中带停止条件循环：一个出现的模板、一个 OCR 读到的数字，或者一个轮次计数。[循环、停止条件与定时](/docs/guides/loops-and-scheduling)展示了这些模式。如果 MAS 循环卡住，打开设备卡片上的**日志**：`ImageNotFoundError` 和 `TimeoutError` 会指出失败的步骤，最常见的原因是分辨率与模板不再匹配。

## 用 Python 控制它

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

```python
import mas

size = mas.get_screen_size()
mas.log(f"MuMu 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)。
