デバイス
MEmu Play の ADB 接続とポート設定: MAS 向け
MEmu Play をポート 21503 の ADB で Macro Automation Studio に接続してデバイスとして追加し、offline エラーを直し、レコーダーの代わりに MAS マクロを実行します。
- Windows
- エミュレータ
- Studio
- Python SDK
このページの内容
このガイドでは、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 をインストールする
- ベンダーサイトから MEmu をダウンロードし、インストーラーを実行します。
- MEmu を起動し、ホーム画面を待ちます。
- MAS にデバイスを追加する前に、自動化したいアプリにサインインします。
2. 解像度を固定する
MAS はテンプレート画像をピクセル単位で照合します。MEmu の設定を開き、固定の解像度を選んで、そのままにします。MAS の基準に合わせて書かれたマクロは縦向きの 540x960、240 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 を使いません。起動中のプロセスをスキャンし、次の規則に合うポートを残します:
- プロセス名に
memuheadlessかmemuhyperが含まれる。 - ポートが 21503 以上で、末尾が 3、かつ 30000 未満である。したがって 21513 や 21523 のようなポートも該当します。
- ソケットが
127.0.0.1で待ち受けている。
該当するポートはデバイス追加ダイアログに MEmu のラベル付きで表示されます (例: 21503 - MEmu)。スキャンはデバイスグループを開いたときと、更新 をクリックするたびに実行されます。
5. MAS で MEmu Play を ADB 接続する
- サイドバーで デバイスグループ を開き、グループを開くか作成します。
- デバイスを追加 をクリックします。
- 50 文字以内の デバイス名 を入力します。
- ポート で、このインスタンスの
MEmu項目を選びます。一覧が空なら 更新 をクリックします。 - MEmu が上の規則に合わないポートを使っている場合は、カスタムポート を選んで入力します。MAS は 1024 から 65535 を受け付けます。
- 必要なら 起動時マクロ を選びます。
- デバイスを追加 をクリックし、デバイスカードの 開始 をクリックします。
カードは 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 のマクロが止まる場合は、デバイスカードの ログ を開きます。ImageNotFoundError と TimeoutError が失敗したステップを示します。
Python から操作する
カードが Running の状態で、マクロの src/app.py が mas パッケージを通してインスタンスを操作します。ポートは MAS が選ぶので、スクリプトがポートを参照することはありません。
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でお知らせください。
質問がありますか? Discordで質問する