# 雷电模拟器 ADB 端口与调试连接设置（LDPlayer）

> 在 LDPlayer 9 中开启 ADB 调试，找到雷电模拟器 ADB 端口，把实例连接到 Macro Automation Studio，并用会看屏幕的宏替代操作录制。

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

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

## 开始之前

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

## 1. 安装 LDPlayer 9

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

## 2. 设定固定分辨率

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

1. 点击 LDPlayer 工具栏的齿轮图标打开**设置**。
2. 打开**显示**，选择自定义分辨率选项。
3. 输入宽 540、高 960、DPI 240。这是 MAS 基准；你自己写的宏预期的是你在 Asset Lab 中截取时的分辨率。
4. 点击**保存设置**，LDPlayer 要求时重启实例。

> [!WARNING]
> 截取模板之后再改分辨率，每个匹配都会偏移，为另一种分辨率制作的宏会点到错误的位置。

## 3. 在 LDPlayer 9 中开启 ADB 调试

LDPlayer 的 ADB 默认关闭，需要你手动打开。官方文档把这个开关放在其他设置里：

1. 打开**设置**。
2. 点击**其他设置**。
3. 把 **ADB 调试**设为**开启本地连接**。
4. 点击**保存设置**。
5. 重启实例。设置在重启后生效。

> [!NOTE]
> **开启本地连接**对 MAS 来说足够了，因为 MAS 始终从同一台电脑连接。Root 权限是同一页上的另一个选项，MAS 不需要它。

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

第一个 LDPlayer 实例监听 **5555**。MAS 不用 `adb devices` 来发现模拟器。它扫描运行中的进程，只有满足以下全部条件时才保留端口：

- 进程名包含 `ldvboxheadless`、`ld9boxheadless`、`dnplayer`、`ldplayer` 或 `vboxnetnat`。
- 端口是 5555 到 5599 之间的奇数：5555、5557、5559 等等。
- 套接字监听在 `127.0.0.1`、`0.0.0.0` 或所有网卡上。

匹配的端口会出现在**添加新设备**对话框中，标注为 `LD Player`，例如 `5555 - LD Player`。MAS 在你打开设备组时以及每次点击**刷新**时扫描。后续实例依次使用下一个奇数端口，这就是规则一直到 5599 的原因：它覆盖 23 个运行中的实例。

## 5. 在 MAS 中通过 ADB 连接 LDPlayer

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

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

## LDPlayer 上的宏

LDPlayer 的**操作录制**（工具栏按钮，或 <kbd>Ctrl</kbd> + <kbd>8</kbd>）记录点击、滑动和文字输入，并把它们当作脚本重放。它的脚本设置提供**循环执行**（**按次数循环**、**按时间循环**或**直到手动停止**）、**循环间隔**和**加速**。它做不到的是看屏幕。每一次点击都在你录制时的坐标重放，所以加载延迟、弹窗或移动了的按钮都会让下一次点击落空，而循环照旧继续。脚本也只能在 LDPlayer 内部运行。

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

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

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

## 多个 LDPlayer 实例

在**雷电多开器**（**多开**工具栏按钮，然后**新建模拟器**或**复制模拟器**）中创建的每个实例都监听自己的端口。把每个实例作为单独的设备添加到同一个设备组，按设备指定宏和设置方案，然后在组上使用**全部启动**和**全部停止**。在多开器的**设置**中按实例设定分辨率，让模板在所有实例上都能匹配。按设备设置参数和代理，参见[设备组](/docs/device-groups)。

## 故障排查

### 雷电模拟器 ADB 找不到设备

设备卡片显示**错误**并提示 "Failed to start device"，日志写着 "unable to connect to device"，或者 MAS 没有列出任何 `LD Player` 项。逐条排查这些原因：

- **ADB 调试**没有设为**开启本地连接**，或者改动后没有重启实例。设置、保存，然后重启。
- 实例还在启动。等主屏幕出现后再点击**刷新**和**启动**。
- 端口属于另一个实例。在卡片上用**编辑设备**修正。
- 扫描报告 "Failed to scan emulator ports"。重启 MAS 并重新打开对话框。
- 设备日志里 adb 输出了 "connection refused" 或 "cannot connect"。这个端口上没有任何东西在监听；在终端运行 `adb connect 127.0.0.1:5555` 检查。

### 雷电模拟器显示 offline

`adb devices` 列出 `127.0.0.1:<port>  offline`，命令卡住。实例内的 adb 守护进程停止响应了，通常发生在休眠、更新或机器上出现第二个 adb 服务器之后。在卡片上点击**停止**，重启 LDPlayer 实例，关闭其他运行自带 adb 服务器的工具，然后点击**启动**。MAS 每次启动都会断开过期条目并重新连接。仍然离线时，重启 MAS 让它的 adb 服务器干净地启动。更多修复方法见 [ADB 故障排查](/docs/adb-troubleshooting)。

### 查找雷电模拟器 9 的 ADB 端口

官方 ADB 指南没有指出 LDPlayer 设置中哪里会显示端口，所以请从 MAS 或 adb 读取。在 MAS 中打开**添加新设备**并点击**刷新**：它找到的每个端口都会列出来，旁边标着 `LD Player`，从小到大排列，所以第一个实例是 5555，后面的依次是 5557 和 5559。在终端中，`adb connect 127.0.0.1:5555` 对活动端口返回 "connected"，对无效端口返回 "cannot connect"。知道端口之后，只要你按相同顺序启动实例，它就保持不变。

### 脚本不会动

两种不同的问题共用这个说法。

- 录制的 LDPlayer 脚本点错位置，或者循环但没有效果。录制后分辨率变了、应用现在加载更慢，或者有弹窗盖住了按钮。录制脚本无法从这些情况中恢复；用[图像识别宏](/docs/guides/image-recognition-macros)把流程重建为 MAS 宏。
- MAS 宏卡住或停止。打开设备卡片上的**日志**：`ImageNotFoundError` 和 `TimeoutError` 会指出失败的步骤。检查实例是否运行在截取模板时的分辨率、设备卡片是否处于**运行中**、是否有 LDPlayer 脚本在同时发送输入。

## 用 Python 控制它

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

```python
import mas

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