# MuMu Player ADB port: tìm cổng và kết nối với MAS

> Tìm cổng ADB của MuMu Player 12, kết nối Macro Automation Studio với nó, thêm từng instance làm thiết bị, và chạy macro MAS thay cho trình ghi thao tác.

Source: https://automationmacro.com/vi/docs/mumu-setup-guide (Thiết bị, updated 2026-09-05)

Hướng dẫn này chỉ cách tìm MuMu Player ADB port của MuMu Player 12 và kết nối instance với Macro Automation Studio (MAS), đồng thời giải thích macro MAS khác gì với Operation Recording của MuMu. Các bước nhắm vào Windows; một phần ngắn nói về bản Mac và MuMu Player ADB port ở đó.

## Trước khi bắt đầu

- MAS đã cài và đăng nhập trên Windows 10 hoặc 11, hoặc trên Mac Apple Silicon. MAS tải miễn phí để dùng thử; lấy từ [trang tải](/download).
- MuMu Player 12 đã cài từ [mumuplayer.com](https://www.mumuplayer.com/) và đã khởi động một lần.
- Instance đã khởi động xong tới màn hình chính Android.
- Các ứng dụng bạn muốn tự động hóa đã cài và đăng nhập bên trong MuMu Player.

## 1. Cài MuMu Player 12

1. Tải MuMu Player 12 từ trang của nhà cung cấp và chạy bộ cài.
2. Khởi động MuMu Player và chờ màn hình chính.
3. Cài và đăng nhập các ứng dụng bạn muốn tự động hóa trước khi thêm thiết bị vào MAS.

## 2. Đặt độ phân giải cố định

MAS so khớp ảnh mẫu từng pixel, nên hãy chọn độ phân giải một lần và giữ nguyên.

1. Nhấn **Cài đặt** ở góc trên bên phải cửa sổ MuMu Player.
2. Mở **Màn hình** và chọn độ phân giải tùy chỉnh.
3. Nhập chiều rộng 540, chiều cao 960 và DPI 240. Đây là chuẩn cơ sở của MAS; macro bạn tự viết mong đợi độ phân giải bạn đã chụp trong Asset Lab.
4. Lưu và khởi động lại instance khi MuMu Player yêu cầu.

> [!WARNING]
> Đổi độ phân giải sau khi chụp ảnh mẫu làm lệch mọi kết quả khớp. Trình ghi của MuMu cũng có cùng quy tắc.

## 3. Bật ADB trong MuMu Player 12

Hướng dẫn ADB của nhà cung cấp không cho thấy công tắc nào cho MuMu Player 12. Một instance đang chạy trả lời adb trên cổng của nó mà không cần cài đặt gì, nên thứ bạn cần là số cổng:

- Với một instance, mở menu ở góc trên bên phải cửa sổ và chọn **Chẩn đoán sự cố**. Cổng ADB debugging được liệt kê ở đó.
- Với nhiều instance, mở **MuMuPlayer Multi-instance 12** và nhấn biểu tượng ADB trên một instance đang chạy để hiện cổng của nó.

## 4. MuMu Player ADB port và cách MAS quét nó

MuMu Player 12 cho instance chính cổng **16384** và mỗi instance thêm cộng 32: 16416, 16448, và tiếp tục. Khi một cổng đã bị chiếm, MuMu cộng 1, nên 16385 có thể xuất hiện. MAS không dùng `adb devices` để phát hiện giả lập. Nó quét các tiến trình đang chạy và giữ một cổng khi tất cả điều sau đúng:

- Tên tiến trình chứa `nemuheadless` hoặc `mumu`.
- Cổng nằm giữa 16384 và 16576, giữa 26624 và 27264, đúng bằng 7555, hoặc là cổng lẻ giữa 5555 và 5599.
- Socket nghe trên `127.0.0.1`, `0.0.0.0` hoặc mọi giao diện.

Dải 16384 đến 16576 bao instance chính và sáu instance tiếp theo; 7555 và dải 5555 đến từ các phiên bản MuMu cũ hơn. Các cổng khớp xuất hiện trong hộp thoại **Thêm thiết bị mới** với nhãn `MuMu`, ví dụ `16384 - MuMu`. MAS quét khi bạn mở một nhóm thiết bị và mỗi lần bạn nhấn **Làm mới**.

## 5. Kết nối MuMu Player qua ADB trong MAS

1. Mở **Nhóm thiết bị** ở thanh bên và mở một nhóm, hoặc tạo nhóm mới.
2. Nhấn **Thêm thiết bị**.
3. Gõ **Tên thiết bị** tối đa 50 ký tự.
4. Trong **Cổng**, chọn mục `MuMu` của instance này. Nhấn **Làm mới** nếu danh sách trống.
5. Nếu cổng hiển thị trong **Chẩn đoán sự cố** không khớp quy tắc trên, chọn **Cổng tùy chỉnh** và gõ vào. MAS chấp nhận 1024 đến 65535.
6. Tùy chọn, chọn một **Macro khởi động**.
7. Nhấn **Thêm thiết bị**, rồi nhấn **Bắt đầu** trên thẻ thiết bị.

Thẻ hiển thị **Đang kết nối** rồi **Đang chạy**. MAS khởi động máy chủ adb riêng, gỡ mọi mục cũ của `127.0.0.1:<port>`, và chạy `adb connect` tới nó.

## Macro trên MuMu Player

**Operation Recording** của MuMu ghi lại cú chạm và phát lại từ tệp, với ba điều kiện dừng (**Execute x times to stop**, **Execute xx time to stop** và **Infinite loop to manual stop**) và một **Cycle interval**. Nhà cung cấp cảnh báo rằng độ phân giải lúc phát lại phải khớp lúc ghi. Tệp phát lại tọa độ cố định mà không nhìn màn hình, nên một lần tải chậm, một popup hay một nút đã dời chỗ làm hỏng chuỗi thao tác, và nó chỉ chạy bên trong MuMu Player.

Macro MAS là một đoạn mã Python kiểm tra màn hình trước khi hành động: nó tìm nút bằng so khớp mẫu, đọc chữ bằng OCR, chờ bằng các lần thử lại, và rẽ nhánh theo những gì nó thấy. Cùng đoạn mã chạy trên MuMu Player, các giả lập khác và thiết bị cloud mà không cần sửa, vì MAS điều khiển mọi thiết bị qua adb.

- Để dựng lại một bản ghi thành macro nhìn màn hình, làm theo [Macro nhận diện hình ảnh](/docs/guides/image-recognition-macros).
- Để lặp nó cho đến khi đạt điều kiện, hoặc chạy theo lịch, đọc [Vòng lặp, điều kiện dừng và lập lịch](/docs/guides/loops-and-scheduling).

> [!NOTE]
> Kết thúc mọi Operation Recording đang chạy trước khi bạn bắt đầu thiết bị trong MAS. Cả hai gửi thao tác vào cùng một màn hình và gây nhiễu lẫn nhau.

## Nhiều instance MuMu

Mở **MuMuPlayer Multi-instance 12** từ biểu tượng hộp công cụ ở góc trên bên phải. **+Tạo mới** tạo một instance và **Cài đặt thiết bị** đặt hiệu năng và màn hình của nó, nên hãy cho mọi instance cùng độ phân giải. Mỗi instance nghe trên cổng riêng, cao hơn cổng trước 32. Thêm từng cái làm thiết bị riêng trong cùng nhóm thiết bị, gán macro và hồ sơ cài đặt cho từng thiết bị, và dùng **Bắt đầu tất cả** và **Dừng tất cả** trên nhóm. Từ instance thứ tám trở đi, cổng vượt quá 16576 và MAS không liệt kê nữa; thêm nó bằng **Cổng tùy chỉnh**. Xem [Nhóm thiết bị](/docs/device-groups) về tham số và proxy cho từng thiết bị.

## MuMu Player trên Mac

MuMu cũng có bản cho Mac Apple Silicon. Ở đó hướng dẫn của nhà cung cấp đặt ADB trong thanh menu: với một thiết bị đang chạy, mở **Tools** và chọn **Open ADB (device port number)**. Mục này hiển thị cổng; mặc định vẫn là 16384. Nếu lần quét trong MAS không liệt kê nó, thêm bằng **Cổng tùy chỉnh**.

MAS trên Mac cần một tệp nhị phân adb: nó tìm trong gói ứng dụng, rồi trên PATH, rồi trong các thư mục Homebrew. Nếu MAS báo "ADB executable not found. Please install ADB using your package manager", cài adb bằng Homebrew và khởi động lại MAS:

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

MAS luôn quay số `127.0.0.1`, nên MuMu Player phải chạy trên cùng Mac.

## Khắc phục sự cố

### MuMu ADB port

MAS không liệt kê mục `MuMu` nào, hoặc mục nó liệt kê thuộc về một instance khác.

- Đọc cổng từ **Chẩn đoán sự cố** hoặc từ biểu tượng ADB trong **MuMuPlayer Multi-instance 12** và so với thẻ thiết bị; sửa bằng **Sửa thiết bị**.
- Đếm từ 16384 theo bước 32 cho mỗi instance, cộng thêm 1 khi một cổng đã bị chiếm (16385 thay vì 16384).
- Instance vẫn đang khởi động, nên cổng chưa mở. Chờ màn hình chính và nhấn **Làm mới**.
- Cổng lớn hơn 16576 hoặc nằm ngoài quy tắc quét. Chọn **Cổng tùy chỉnh** và gõ vào.

### MuMu ADB connect thất bại

Thẻ thiết bị hiển thị **Lỗi** với "Failed to start device", nhật ký ghi "unable to connect to device", hoặc adb in "cannot connect" hay "connection refused".

- Không có gì nghe trên cổng đó. Kiểm tra số như trên và xác nhận instance đang chạy.
- Một máy chủ adb thứ hai giữ mục cũ. Đóng các công cụ khác chạy máy chủ adb riêng, nhấn **Dừng**, khởi động lại instance, và nhấn **Bắt đầu**; MAS kết nối lại từ đầu.
- `adb devices` hiển thị cổng là `offline`. Khởi động lại instance; nếu vẫn offline, khởi động lại MAS để máy chủ adb của nó khởi động sạch.
- Lần quét báo "Failed to scan emulator ports". Khởi động lại MAS và mở lại hộp thoại.

Để xem câu trả lời thô của adb, chạy `adb connect 127.0.0.1:16384` trong terminal. Thêm cách sửa ở [Khắc phục sự cố ADB](/docs/adb-troubleshooting).

### Macro loop trên MuMu

Một bản ghi đặt **Infinite loop to manual stop** không biết vòng lặp có nên tiếp tục hay không, nên nó cứ chạm tiếp sau khi đã đạt mục tiêu hoặc khi popup xuất hiện. Macro MAS lặp trong Python với điều kiện dừng: một ảnh mẫu xuất hiện, một con số đọc bằng OCR, hoặc số lượt đã chạy. [Vòng lặp, điều kiện dừng và lập lịch](/docs/guides/loops-and-scheduling) chỉ các mẫu. Nếu một vòng lặp MAS bị đứng, mở **Nhật ký** trên thẻ thiết bị: `ImageNotFoundError` và `TimeoutError` nêu tên bước thất bại, và nguyên nhân thường gặp là độ phân giải không còn khớp ảnh mẫu.

## Điều khiển bằng Python

Khi thẻ ở **Đang chạy**, `src/app.py` của macro điều khiển instance qua gói `mas`. MAS chọn cổng, nên mã không bao giờ tham chiếu tới nó.

```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)
```

Đọc [Tổng quan SDK](/docs/sdk) về mọi namespace, và [Điều khiển giả lập Android từ Python](/docs/guides/control-an-emulator-from-python) để có đoạn mã đầu tiên hoàn chỉnh.
