エミュレーターと ADB の接続
デバイスレイヤーは、コアプログラムとゲームクライアントを繋ぐ唯一の I/O パイプラインです。担当領域は明確に4つに分かれます:ADB への接続、スクリーンショットの取得、タップ操作の注入、ゲームプロセスの管理。この4つの動作を理解することで、「接続できない」「認識がずれる」「タップが効かない」といった問題の大部分を自力で解決できます。
デバイス接続パイプライン
gui.py / alas.py
└── Device
├── Connection(ADB パス、Serial、ポートフォワーディング)
├── Screenshot(設定に応じたバックエンドへの画像取得ディスパッチ)
├── Control(タップ / スワイプ / ドラッグ操作の注入)
└── Platform(エミュレーターの検出・起動・停止)Device は初回生成時に必要に応じてエミュレーターの起動(最大4回試行)や簡易パフォーマンステスト、操作バックエンドのプリヒートを自動実行します。スケジューラー配下の Device は auto_start_emulator=False で生成されます——エミュレーターを再起動すべきかどうかの判断はスケジューラーが下し、デバイスレイヤーが勝手に判断することはありません。
必須設定項目
| 設定項目 | 設定キー | 説明 |
|---|---|---|
| エミュレーター Serial | Emulator.Serial | ADB 接続先アドレスまたは auto |
| ゲームサーバー | Emulator.PackageName | 対象ゲームのパッケージ名(デフォルト:auto) |
| スクリーンショット方式 | Emulator.ScreenshotMethod | 画面取得バックエンド(デフォルト:auto) |
| 操作方式 | Emulator.ControlMethod | タップ操作注入バックエンド(推奨:MaaTouch) |
| ゲーム内サーバー | Emulator.ServerName | メンテナンス検出用(「使用しない」設定も可能) |
Serial の入力方法
| 利用環境 | 推奨入力値 |
|---|---|
| エミュレーターが1台のみ起動中 | auto |
| 多重起動中、または複数種類のエミュレーターを併用 | 明示的な host:port を手動入力 |
| MuMu Player 12 | 127.0.0.1:16384(多重起動時はポートがインクリメント) |
| LDPlayer(雷電) | emulator-5554 または 127.0.0.1:5555 |
| BlueStacks Hyper-V | bluestacks5-hyperv(多重起動時は -1、-2) |
実際の Serial の確認方法:エミュレーターのインストールディレクトリにある adb.exe を使用し、コマンドプロンプト等で adb devices を実行します。ステータスが device と表示されている必要があります。offline は ADB のバージョン不一致や接続ハングを示し、unauthorized は端末側でデバッグ認可ダイアログが未承認であることを示します。
ゲームサーバー
| サーバー種別 | 代表的なパッケージ名 |
|---|---|
| 日本版(JP) | com.YoStarJP.AzurLane |
| グローバル版(EN) | com.YoStarEN.AzurLane |
| 中国大陸版(CN) | com.bilibili.azurlane |
| 台湾版(TW) | com.hkmanjuu.azurlane.gp |
エミュレーター内に複数のクライアントをインストールしている場合は、誤判定を防ぐために auto ではなく明示的に目的のパッケージ名を選択してください。
スクリーンショット方式
スクリーンショットの取得速度は自動化ループ全体のレスポンス速度に直結します:標準の adb exec-out screencap は1フレームに 300〜500ms を要しますが、最適化された内部チャネルを利用すれば数十ミリ秒で取得できます。
| 方式名 | 適合環境 | 特徴と留意点 |
|---|---|---|
auto | 汎用 | 初回起動時にパフォーマンステストを行い最速の方式を自動選択 |
DroidCast_raw | 汎用 | 最も高速。エミュレーターが補助アプリの自動インストールを許可している必要あり |
ADB_nc | 汎用 | Netcat パイプラインを使用。高い互換性と速度のバランス |
ADB | フォールバック | 最も低速ですが最も安定 |
uiautomator2 | フォールバック | UI Automator サービスと接続を共有 |
aScreenCap / aScreenCap_nc | 一部環境 | 専用バイナリを端末へプッシュしてキャプチャ |
nemu_ipc | MuMu Player 12 | エミュレーターの共有メモリ IPC を直接読み取り。極めて低遅延 |
ldopengl | LDPlayer(雷電) | OpenGL レンダリングバッファから直接取得 |
azurpilot_android | Android ホスト | 共有メモリフレームチャネル。Android 実機ではこれを選択 |
nemu_ipc の操作制限
nemu_ipc 方式は対応する操作バックエンドとセットで使用する必要があります。低スペック PC ではスワイプの途切れやドラッグ変形が生じやすく、不具合が生じた場合は操作方式を MaaTouch に戻してください。
操作方式(タップ・スワイプ)
| 方式名 | 動作速度 | 特徴 |
|---|---|---|
MaaTouch | 高速 | 推奨設定。最新の Android バージョンにも高互換 |
minitouch | 高速 | 一部の最新 OS や特殊解像度で不安定な場合あり |
ADB | 中速 | input tap/swipe コマンドを使用。最も高互換 |
uiautomator2 | 低速 | ユーザー補助サービスに依存 |
Hermit | 中速 | 特定の仮想化環境向け |
azurpilot_android | 高速 | Android ホスト専用のネイティブブリッジ注入 |
タップ処理は単なる「固定座標のクリック」ではありません:ボタンの判定領域内で毎回ランダムに座標を散らし、スワイプ操作にはベジェ曲線と微小な手振れジッターを付加することで、人間の自然なタッチ操作を再現しています。これらはコアプログラムの内部アルゴリズムであり、設定変更は不要です。
エミュレーターのプロセス管理
「システム設定 → 模擬器設置」でエミュレーターの種類、インストール先ディレクトリ、インスタンス名を登録できます。正しく設定することで以下の自動制御が有効になります:
- 定期再起動:
Alas.EmulatorManagement.ScheduledEmulatorRestartを有効化すると、RestartIntervalHours(デフォルト4時間)ごとにタスクの合間でエミュレーターを再起動します。 - 強制定期再起動:
ForceScheduledRestartを有効にすると、タスク実行中であっても時間到来時に強制中断して再起動します。 - 障害復旧再起動:連続フリーズや ADB 切断が閾値に達した際、エミュレーター全体を自動で再起動して復旧を試みます。
- ディープ再起動:MuMu 等でゾンビプロセスが残存した際、関連プロセスツリーを強制クリーンアップして再起動します。
SSH による遠隔管理
エミュレーターが別マシン(NAS、自宅サーバー等)上で稼働している場合、EnableRemoteSSH を有効化してエミュレーター再起動の前後にリモート SSH コマンドを実行できます:
| 設定項目 | 用途 |
|---|---|
RemoteSSHHost / Port / User | SSH 接続先ホスト情報 |
RemoteSSHPublicKey | 認証用秘密鍵データ |
RemoteStartCommand / RemoteStopCommand | サービスの起動 / 停止コマンド(例:docker restart <container>) |
秘密鍵の漏洩に注意
SSH 秘密鍵は設定ファイル内に平文で保存されます。設定のエクスポートや Issue 投稿の際は、必ず当該フィールドを削除してください。
サーバーメンテナンス検知
Emulator.ServerName を設定しておくと、スケジューラーは各タスクの実行前にゲームサーバーの稼働状況を確認します:
- メンテナンス中 → 待機ループに入り、ゲームの無駄な再起動を抑制します。
- メンテナンス終了時 → 設定を再読込し、
Restartタスクを挿入してゲームを起動し直します。 - 状態確認 API がタイムアウト → 直接ゲームへの接続を試行します。
ベンチマークテスト
「ツール → 性能テスト」を実行すると、利用可能なスクリーンショット方式および操作方式を順次テストし、所要時間を計測して推奨設定を構成ファイルに書き戻します。特定の方式で処理落ちが発生している疑いがある場合に実行してください。
よくある接続トラブル
| 現象 | 主な原因 | 対処方法 |
|---|---|---|
adb devices の結果が空 | エミュレーターの ADB 設定が無効 | エミュレーター設定で「ADB デバッグ」を有効化 |
デバイス状態が offline | ADB バージョンの不一致 | エミュレーター付属の adb を使用するか adb サーバーを再起動 |
| スクリーンショットが真っ黒 | エミュレーターが独立描画バックエンドを使用中 | DroidCast_raw または nemu_ipc に変更 |
| タップ位置がずれる | 解像度が 1280×720 になっていない | エミュレーターの解像度と DPI を推奨値に変更 |
GameStuckError が頻発 | フレームレート不足または演出スキップ | 60fps 設定を適用し、高倍率の加速機能を停止 |
| エミュレーター再起動が動かない | インストール先パスが未設定 | EmulatorInfo.name と path を正しく設定 |
より詳細な切り分け手順はコアプログラムトラブルシューティングを参照してください。