# MEmu Play の ADB 接続とポート設定: MAS 向け

> MEmu Play をポート 21503 の ADB で Macro Automation Studio に接続してデバイスとして追加し、offline エラーを直し、レコーダーの代わりに MAS マクロを実行します。

Source: https://automationmacro.com/ja/docs/memu-setup-guide (デバイス, updated 2026-09-05)

このガイドでは、MEmu Play を ADB 接続 (adb connect) で Macro Automation Studio (MAS) につなぐ方法と、MAS のマクロが MEmu のマクロレコーダーとどう違うかを説明します。MEmu は Windows 専用なので、以下の手順はすべて Windows のものです。

## 始める前に

- Windows 10 か 11 に MAS がインストール済みでサインインしていること。MAS はトライアル向けに無料でダウンロードできます。[ダウンロードページ](/download) から入手してください。
- [memuplay.com](https://www.memuplay.com/) から MEmu をインストールし、1 度起動してあること。
- インスタンスが Android のホーム画面まで完全に起動していること。
- インスタンスを安定させるため、BIOS で仮想化を有効にしてあること。

## 1. MEmu をインストールする

1. ベンダーサイトから MEmu をダウンロードし、インストーラーを実行します。
2. MEmu を起動し、ホーム画面を待ちます。
3. MAS にデバイスを追加する前に、自動化したいアプリにサインインします。

## 2. 解像度を固定する

MAS はテンプレート画像をピクセル単位で照合します。MEmu の設定を開き、固定の解像度を選んで、そのままにします。MAS の基準に合わせて書かれたマクロは縦向きの **540x960**、**240 DPI** を前提とします。自分で書くマクロは、Asset Lab で取り込んだ解像度を前提とします。MEmu に求められたらインスタンスを再起動します。

> [!WARNING]
> テンプレートを取り込んだ後に解像度を変えると、すべての一致位置がずれます。解像度は一度決めたら変えないでください。

## 3. MEmu で ADB を有効にする

MEmu の公式ドキュメントに ADB のトグルは載っていません。起動中のインスタンスは Android の adb ポートをホストの `127.0.0.1:21503` に転送しており、これは MEmu 自身のコマンドラインガイドが使うアドレスです。お使いの MEmu ビルドの設定に ADB や開発者向けのオプションがあれば、オンのままにします。続ける前にインスタンスを起動し、ホーム画面を待ちます。

## 4. MEmu の ADB ポートと MAS のスキャン方法

MEmu の既定のインスタンスは **21503** で待ち受けます。MAS はエミュレータを検出するために `adb devices` を使いません。起動中のプロセスをスキャンし、次の規則に合うポートを残します:

- プロセス名に `memuheadless` か `memuhyper` が含まれる。
- ポートが 21503 以上で、末尾が 3、かつ 30000 未満である。したがって 21513 や 21523 のようなポートも該当します。
- ソケットが `127.0.0.1` で待ち受けている。

該当するポートはデバイス追加ダイアログに `MEmu` のラベル付きで表示されます (例: `21503 - MEmu`)。スキャンはデバイスグループを開いたときと、**更新** をクリックするたびに実行されます。

## 5. MAS で MEmu Play を ADB 接続する

1. サイドバーで **デバイスグループ** を開き、グループを開くか作成します。
2. **デバイスを追加** をクリックします。
3. 50 文字以内の **デバイス名** を入力します。
4. **ポート** で、このインスタンスの `MEmu` 項目を選びます。一覧が空なら **更新** をクリックします。
5. MEmu が上の規則に合わないポートを使っている場合は、**カスタムポート** を選んで入力します。MAS は 1024 から 65535 を受け付けます。
6. 必要なら **起動時マクロ** を選びます。
7. **デバイスを追加** をクリックし、デバイスカードの **開始** をクリックします。

カードは **Connecting**、次に **Running** と表示されます。MAS は adb サーバーを起動し、`127.0.0.1:<port>` の古い項目を削除し、それに対して `adb connect` を実行します。

## MEmu でのマクロ

MEmu のマクロレコーダーは、固定座標のタップとスワイプを取り込んで再生し、必要なら繰り返します。画面を見ないため、遅い読み込み、ポップアップ、位置の変わったボタンで手順が崩れ、しかもルーチンは MEmu の中でしか動きません。

MAS のマクロは、動く前に画面を確認する Python スクリプトです。テンプレートマッチングでボタンを見つけ、OCR で文字を読み、リトライで待ち、見えたものに応じて分岐します。MAS はデバイスを adb で操作するため、同じスクリプトが MEmu、他のエミュレータ、クラウドデバイスで編集なしに動きます。

- 記録したルーチンを画面を認識するマクロに作り直すには、[画像認識マクロ](/docs/guides/image-recognition-macros) に従ってください。
- 条件を満たすまでループさせたり、スケジュール実行したりするには、[ループ、停止条件、スケジュール実行](/docs/guides/loops-and-scheduling) をお読みください。
- Marketplace のマクロは MAS のマクロとしてインストールされ、割り当てたデバイスで動きます。

> [!NOTE]
> MAS でデバイスを開始する前に MEmu のレコーダーを止めてください。どちらも同じ画面に入力を送るため、互いに干渉します。

## 複数の MEmu インスタンス

MEmu のマルチインスタンスマネージャーで作った各インスタンスは、それぞれ固有のポートで待ち受けます。同じデバイスグループに別々のデバイスとして追加し、デバイスごとにマクロと設定プロファイルを割り当て、グループの **すべて開始** と **すべて停止** を使います。デバイスごとの引数とプロキシについては [デバイスグループ](/docs/device-groups) を参照してください。

## トラブルシューティング

### MEmu の ADB 接続

デバイスカードが **Error** か「Failed to start device」になる、または MAS に `MEmu` の項目が表示されません。次の原因を順に確認します:

- インスタンスがまだ起動中です。ホーム画面を待ってから、**更新** をクリックしてもう一度開始します。
- ポートがスキャン規則に合わないため、MAS が飛ばしました。MEmu が使う番号で **カスタムポート** を使います。
- ポートが別のインスタンスのものです。カードの **デバイスを編集** で直します。
- スキャンが「Failed to scan emulator ports」と報告しました。MAS を再起動してダイアログを開き直します。
- デバイスログに adb が「connection refused」か「cannot connect」を出力しました。そのポートで待ち受けているものがありません。インスタンスを再起動し、番号をもう一度確認します。

### MEmu の ADB device offline

インスタンス内の adb デーモンが応答しなくなると、adb はデバイスを `offline` と表示します。多くはスリープ、アップデート、またはマシン上の 2 つ目の adb サーバーの後に起きます。カードの **停止** をクリックし、MEmu のインスタンスを再起動し、独自の adb サーバーを動かす他のツールを閉じてから **開始** をクリックします。MAS は開始のたびに古い項目を切断して接続し直します。それでも offline のままなら、MAS を再起動して adb サーバーをまっさらな状態で立ち上げます。

### MEmu のマクロレコーダーと MAS の違い

MEmu で記録したルーチンは MAS に取り込めません。MAS は Python のマクロだけを実行するからです。作り直してください: Asset Lab でボタンをテンプレートとして取り込み、`find_object_retry` でクリックし、停止条件付きでループします。結果は、記録した手順を壊すポップアップ、遅い読み込み、レイアウト変更に耐え、MAS が操作するどのデバイスでも動きます。MAS のマクロが止まる場合は、デバイスカードの **ログ** を開きます。`ImageNotFoundError` と `TimeoutError` が失敗したステップを示します。

## Python から操作する

カードが **Running** の状態で、マクロの `src/app.py` が `mas` パッケージを通してインスタンスを操作します。ポートは MAS が選ぶので、スクリプトがポートを参照することはありません。

```python
import mas

size = mas.get_screen_size()
mas.log(f"MEmu 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 から Android エミュレータを操作する](/docs/guides/control-an-emulator-from-python) をお読みください。
