検索

デバイス

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

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

  • Windows
  • エミュレータ
  • Studio
  • Python SDK
初級 更新日 約8分で読めます
このページの内容
  1. 始める前に
  2. 1. MEmu をインストールする
  3. 2. 解像度を固定する
  4. 3. MEmu で ADB を有効にする
  5. 4. MEmu の ADB ポートと MAS のスキャン方法
  6. 5. MAS で MEmu Play を ADB 接続する
  7. MEmu でのマクロ
  8. 複数の MEmu インスタンス
  9. トラブルシューティング
  10. MEmu の ADB 接続
  11. MEmu の ADB device offline
  12. MEmu のマクロレコーダーと MAS の違い
  13. Python から操作する

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

始める前に

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

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

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

2. 解像度を固定する

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

3. MEmu で ADB を有効にする

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

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

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

  • プロセス名に memuheadlessmemuhyper が含まれる。
  • ポートが 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、他のエミュレータ、クラウドデバイスで編集なしに動きます。

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

複数の MEmu インスタンス

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

トラブルシューティング

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 のマクロが止まる場合は、デバイスカードの ログ を開きます。ImageNotFoundErrorTimeoutError が失敗したステップを示します。

Python から操作する

カードが Running の状態で、マクロの src/app.pymas パッケージを通してインスタンスを操作します。ポートは 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 概要 を、完全な最初のスクリプトは Python から Android エミュレータを操作する をお読みください。

次のステップ

関連ページ

このページは役に立ちましたか?

質問がありますか? Discordで質問する