# 模拟器多开同步运行：MAS 设备组

> 在 Macro Automation Studio 中把多开的安卓模拟器窗口和云设备编成设备组，给每台设备分配宏、参数和代理，实现模拟器多开同步一键启动。

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

设备组是 Macro Automation Studio（MAS）用来在多台设备上运行宏的单位，无论是模拟器多开同步运行的一组窗口，还是一组云设备。组里每台设备都有自己的宏、参数、代理和 Webhook，组本身有**全部启动**和**全部停止**。这一页介绍两种组类型、按设备配置、批量运行、日志和定时。

## 开始之前

- 已安装 MAS 并用有效的试用或套餐登录。
- 本地组：一个或多个模拟器实例正在运行，并已开启 ADB。端口规则见[设备](/docs/devices)。
- 云端组：至少在**云设备**页创建了一台云设备。参见[云设备](/docs/cloud-devices)。[云设备页](/cloud-devices)说明了附加项包含什么。

## 两种组

一个组只容纳一种设备，在创建时选定，之后不可更改：

| 类型 | 类型选项 | 容纳的设备 | 宏在哪里运行 |
|---|---|---|---|
| 本地（`byod`） | **本地** | 这台电脑上的模拟器，以及通过 adb 连接的你自己的手机 | 在这台电脑上，通过 adb 驱动设备 |
| 云端 | **云端** | MAS 为你运行的云设备 | 在 MAS 服务器上，所以应用可以关闭 |

云设备只能加入云端组，模拟器只能加入本地组。混用会被拒绝并提示 "a cloud device can only be added to a cloud group"。

## 创建组

1. 在侧边栏打开**设备组**，点击**新建组**。
2. 输入 3 到 255 个字符的**名称**和可选的**描述**。
3. 选择**类型**：**本地**或**云端**。
4. 点击**创建组**。

组列表显示每个组的设备数和实时的运行中设备数。可以用网格或表格视图，按名称、创建时间或设备数排序，按名称搜索。**编辑**可以修改名称和描述；类型不能改。

## 添加设备

<div class="doc-tabs" data-tabs="kind">
<section data-tab="本地组">

1. 打开组，点击**添加设备**。
2. 输入**设备名称**。
3. 在**端口**下选择模拟器的端口。点击**刷新**重新扫描，或选择**自定义端口**并输入。
4. 可选：选择一个**启动宏**。
5. 点击**添加设备**。

</section>
<section data-tab="云端组">

1. 打开组，点击**添加云设备**。
2. 从列表中选择一台设备。已在这个组里的设备会被隐藏。
3. 点击**添加**。

云设备在**云设备**页创建，不在这里。列表为空时，对话框会链接到那里。

</section>
</div>

### BlueStacks、LDPlayer 和其他多开安卓模拟器

每个模拟器实例监听自己的 adb 端口，MAS 把每个端口当作一台单独的设备。所以三个 BlueStacks 窗口或三个 LDPlayer 实例会成为组里的三台设备，各有自己的宏和参数。[BlueStacks](/docs/bluestacks-setup-guide)、[LDPlayer](/docs/ldplayer-setup-guide)、[MuMu Player](/docs/mumu-setup-guide) 和 [MEmu](/docs/memu-setup-guide) 指南说明每个实例的端口在哪里，[多开指南](/docs/guides/multi-instance)完整演示了一个多开挂机场景。

> [!TIP]
> 给设备起和模拟器实例名一致的名字。日志、运行历史和 Webhook 载荷都带着设备名，所以 "LD-3" 比 "Device 7" 更容易追踪。

## 配置每台设备

每张设备卡片都有同样的控件：

- **宏**：选择这台设备运行的宏。没有宏的设备会被**全部启动**跳过。
- **宏设置**：打开这个宏在这台设备上的参数表单。顶部的**方案**栏决定值存在哪里：一个由所有跟随它的设备共享的[设置方案](/docs/settings-profiles)，或者**自定义（仅此设备）**。保存方案会更新所有使用它的设备，栏上会显示有多少台。每个宏都有一个无法删除的 **Default** 方案。**新建**把当前值保存为新方案。
- **运行次数**：宏在这台设备上重复多少次。
- **高级设置**：**代理**选择器、显示有多少 Webhook 会收到这台设备通知的**通知**行（附**管理**链接），以及**今日代理流量**。
- **编辑设备**修改名称和端口；垃圾桶按钮把设备从组里移除。

修改宏或运行次数后点击**保存更改**。代理和方案的选择会自动保存。

### 按设备设置代理

在**代理**下拉框中选择一个代理；**无代理**清除它。每台设备一个代理，默认为固定模式，所以每台设备保持自己的 IP。在模拟器上，代理在每次运行期间生效；在云设备上，它在设备下次启动时生效。细节、限制以及 Webhook 中的出口 IP 见[代理](/docs/proxies)页。

### 按设备设置 Webhook

Webhook 端点在 **Webhook** 页上设定作用范围：所有设备、指定的组或指定的设备。设备卡片只显示有多少端点覆盖这台设备；要改范围请到 Webhook 页。运行事件携带 `device_id`、`device_name`、`device_port` 和 `group_id`，所以一个端点就能区分设备。参见 [Webhook](/docs/webhooks)。

## 启动与停止

卡片上的**启动**只运行这一台设备。本地设备由 MAS 通过 adb 连接并启动宏；云设备则启动一次服务端运行。

**全部启动**运行整个组：

- 设备按列表顺序依次启动，间隔半秒。
- 没有分配宏的设备会被跳过并计为失败；其余设备照常启动。
- 结果是一个计数，例如 9 台成功、1 台失败，提示框中最多显示 5 条错误信息。**正在启动所有设备**对话框显示进度和操作日志。
- 在云端组中，**全部启动**依次为每台设备启动一次服务端运行。套餐的运行中设备上限仍然适用，无法启动的设备会在自己的提示框中说明。

**全部停止**以同样的方式结束组里的每次运行。停止云端运行会保持云设备开机。

每张卡片显示自己的状态：**已停止**、**连接中**、**下载中**、**启动中**、**运行中**、**停止中**或**错误**。组标题把它们汇总为在线、空闲和错误的数量。

## 按设备查看日志

每张卡片都有一个**仪表盘**标签页（宏有运行时 UI 时显示它）和一个**日志**标签页（显示这台设备自己的输出）：

- 按**全部**、**用户**、**执行**、**错误**或**警告**筛选。用户行是你脚本自己的 `print` 和 `mas.log` 输出；执行行来自运行器。
- **搜索日志**按文本筛选，**跟随**让最新一行保持在视野内，**时间**切换时间戳。
- **保存**把日志写入文件；**清空**清空面板。

代理和 Webhook 事件出现在同一个面板中，例如 "Proxy connected via office, traffic routed through 203.0.113.9"。云设备的面板显示服务端运行输出的末尾。已完成的运行连同退出码和时长列在**运行记录**下。

## 为组设置定时任务

[定时任务](/docs/scheduler)在你选定的时间、在一个端口上运行一个宏。要为整个组设置定时，请为每台设备创建一个时间和重复规则相同的任务。属于某个组的设备上的定时运行会携带该组的 ID，所以以组为范围的 Webhook 也会触发。

## 供 API 密钥使用的组和设备路由

[API 密钥](/docs/api-keys)可以读取你的组和设备：`GET /api/emulator/groups` 和 `GET /api/emulator/devices`。两者只返回密钥所有者拥有的内容，设备行包含端口、宏、组和设置方案。创建、编辑和删除组或设备，以及启动或停止它们，需要应用自身的登录。参见 [REST API](/docs/rest-api)。

## 故障排查

### 全部启动报告有设备失败

打开提示框或操作日志。"device X has no macro assigned" 表示卡片没有选择**宏**。无法连接的本地设备会带着 adb 错误失败；按照 [ADB 故障排查](/docs/adb-troubleshooting)处理。已经启动的设备会继续运行。

### 云设备无法加入组

这个组是本地组。创建一个**类型**设为**云端**的组，把设备加到那里。同样的规则也阻止模拟器加入云端组。

### 两个实例显示相同的端口

每个端口只属于一台设备。如果两个模拟器窗口报告同一个端口，其中一个的 ADB 是关闭的，或者没有完全启动。等第二个实例启动完成，在端口列表中点击**刷新**，然后用它自己的端口添加。
