搜索

设备

MuMu 模拟器 ADB 端口与连接设置(MuMu Player 12)

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

  • Windows
  • Mac
  • 模拟器
  • Studio
  • Python SDK
入门 更新于 阅读约 8 分钟
本页目录
  1. 开始之前
  2. 1. 安装 MuMu Player 12
  3. 2. 设定固定分辨率
  4. 3. 在 MuMu Player 12 中开启 ADB
  5. 4. MuMu 模拟器 ADB 端口与 MAS 的扫描方式
  6. 5. 在 MAS 中通过 ADB 连接 MuMu Player
  7. MuMu Player 上的宏
  8. 多个 MuMu 实例
  9. Mac 上的 MuMu Player
  10. 故障排查
  11. MuMu ADB 端口
  12. MuMu ADB 连接失败
  13. MuMu 上的脚本循环
  14. 用 Python 控制它

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

开始之前

  • 已在 Windows 10 或 11,或 Apple Silicon Mac 上安装并登录 MAS。试用期内 MAS 可免费下载;从下载页获取。
  • 已从 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 要求时重启实例。

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 来发现模拟器。它扫描运行中的进程,只有满足以下全部条件时才保留端口:

  • 进程名包含 nemuheadlessmumu
  • 端口在 16384 到 16576 之间、26624 到 27264 之间、恰好是 7555,或者是 5555 到 5599 之间的奇数。
  • 套接字监听在 127.0.0.10.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 驱动每一台设备。

多个 MuMu 实例

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

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 故障排查

MuMu 上的脚本循环

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

用 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 概览;完整的第一个脚本见用 Python 控制安卓模拟器

下一步

相关页面

这个页面有帮助吗?

有疑问? 在 Discord 提问