Python で Android ゲーム を自動操作

Python, プログラミングAndroid, OpenCV, Python

Python を使って アンドロイドのゲームを自動操作する方法を紹介します。

一度作ってしまえば、リセマラの周回とか自動で出来るようになります。

プログラム分からないって人でも出来るように紹介するので、回りくどくてグダグダした説明になってしまうかもしれませんがご了承下さい。

目標

今回出来るようになること

  1. アンドロイドの指定した場所を、自動でタップする。
  2. アンドロイドの画面に、押したいボタン出たら自動で押す。

この2点を目標に説明して行きます。

マウスを自動操作するツールとは何が違うの?

Python で アンドロイドゲームを自動操作 する場合、マウスを奪うことがありません。

なので ネットサーフィンや他のPCゲームで遊びながら、アンドロイド実機を自動操作することができます。

NoxPlayer を自動操作することも出来ます。

準備

ちょっと準備が大変ですが、準備させ整えばゲームの自動化ができるので頑張りましょう。

Python

Python

Microsoft Store から簡単にインストール出来ます。

Python

OpenCV

OpenCVとは、動画や画像処理を簡単に行えるライブラリです。

指定したボタンが出てきたらタップするために使います。

インストール方法

「Win」キーと「R」キーを同時に押して「ファイル名を指定して実行」ダイアログに「cmd」と入力し、コマンドプロンプトを開きます。

で、開いたコマンドプロンプトに 下記コマンド を入力して OpenCV をインストールします。

pip install opencv-python

Successfully installed に opencv-python と書かれていれば成功です。

Android Debug Bridge(adb)

アンドロイドを操作するために adb.exe を入手します。

adb.exe は、SDK Platform-Tools に含まれているので、それをダウンロードして展開します。

SDK Platform-Tools

公式サイト の Downloads の「Download SDK Platform-Tools for Windows」を押して、

利用規約に同意し、ダウンロードします。

適当なフォルダに展開します。

android-auto-play-opencv

アンドロイドを自動操作する Python の モジュールです。

android-auto-play-opencv

Clone or download の「Download ZIP」でダウンロードします。

適当なフォルダに展開します。

拡張子を表示させる

この設定は必須じゃないですが、今後 Python コードを作成するため見えてると作業がしやすいので、表示させておきましょう。

どこでもいいのでフォルダの 表示 を押して「ファイル名拡張子」にチェックを入れます。

これで準備完了です。

アンドロイド自動操作スクリプト作成

では早速、アンドロイドを操作するスクリプトを作成していきます。

展開した「android-auto-play-opencv-master」フォルダ内で右クリックし、新規作成の「テキストドキュメント」選択します。

ファイル名を「Main.py」に変更します。

拡張子も「txt」から「py」に変更するので、確認ダイアログが出ます。

「はい」を押してファイル名を確定しましょう。

こんな感じになればOK。

次に先程作った「Main.py」をテキストエディッタで開きます。

「Main.py」を選択した状態で右クリックをし「プログラムから開く」を選択します。

ファイルを開く方法で「その他のアプリ」を選びます。

メモ帳 を選択してから「OK」ボタンを押します。

これで「Main.py」を メモ帳 で開く事ができました。

中身は空っぽですけどね。

メモ帳じゃなくても、普段使い慣れているテキストエディッタでも大丈夫です。

雛形をコピペする

Python の雛形をコピーして貼り付けます。

from module import AapoManager as am
adbpath = '..\\platform-tools\\'
def main():
    aapo = am.AapoManager(adbpath)
    while True:
        # 画面キャプチャ
        aapo.screencap()
if __name__ == '__main__':
    main()

Python は インデント が重要なので コピペ時に 行頭に空白 を削除しないようにしましょう。

これだけで、USB接続した アンドロイド実機の画面を、スクリーンショット して PCへ転送してくれます。

動作確認

とりあえず、動くか動作確認をします。

「android-auto-play-opencv-master」フォルダのアドレスバーに「cmd」と入力しエンターキーを押し、コマンドプロンプトを開きます。

開いたコマンドプロンプトに「Main.py」と入力し、エンターキーを押すと Python が実行されます。

ダイアログが出れば成功です。

Python が正しく機能しています。

アンドロイド実機を接続して動作確認

次に、アンドロイド実機を PC と USB接続して動作確認してみます。

PC と USB接続してから先程と同じように「Main.py」と入力し、エンターキーを押します。

ひたすら 画面キャプチャ と表示されれば成功です。

一瞬で閉じてしまう場合は?

アンドロイド実機の USBデバッグ が無効になっているかもしれません。

USBデバッグ を有効にする方法

まず、設定 > デバイス情報 > ビルド番号 を 7回タップして 開発者向けオプション を有効にします。

開発者向けオプションを有効にする

開発者向けオプション 内の USB デバッグ を有効にします。

USB デバッグを有効にする

そうすると「USB デバッグを許可しますか?」と表示されるので「常に許可する」にチェックを入れて「OK」して下さい。

USB デバッグを許可しますか?

アンドロイド自動操作スクリプト改造

動作確認が出来たら、Python スクリプトを改造します。

「Main_sample.py」を見て改造するのもいいかもしれません。

今は 画面キャプチャしかしていないので、画面内で見つけたボタンをタップするように改造します。

まず、template フォルダに元となる画像を入れます。

で、下記のようにファイル名を指定すると、その場所をタップしてくれます。

aapo.touchImg('./template/stage_clear.png')

Python を書く時は、インデントに気をつけましょう。

他に何ができるの?

アプリ起動

aapo.start でアプリを起動させることが出来ます。

# FGOを起動する.
aapo.start('com.aniplex.fategrandorder/jp.delightworks.Fgo.player.AndroidPlugin')

アプリ終了

aapo.end でアプリを終了(Kill)させることが出来ます。

# FGOを起動する.
aapo.end('com.aniplex.fategrandorder/jp.delightworks.Fgo.player.AndroidPlugin')

待機

aapo.sleep で処理を待機させることが出来ます。

# 5秒待機.
aapo.sleep(5)

画面キャプチャ

aapo.screencap で PC に 実機のスクリーンショット を取得します。

# 画面キャプチャ
aapo.screencap()

指定画像の存在確認

aapo.chkImg で aapo.screencap で取得した スクリーンショット 内に、指定画像があるか確認します。タップはしません。

あった場合は true を返し、無かった場合は false を返します。

if aapo.chkImg('./template/stage_clear.png'):
    # あった時の処理.
    pass

指定画像をタップ

aapo.touchImg で 指定画像があったらタップします。また、結果も返してくれます。

aapo.touchImg('./template/stage_clear.png')

指定位置をタップ

aapo.touchPos で 指定位置をタップします。

# X=750、Y=400 の位置をタップする.
aapo.touchPos(750, 400)

指定位置をロングタップ

aapo.longTouchPos で 指定位置をロングタップします。

# X=750、Y=400 の位置を5秒間タップする.
aapo.touchPos(750, 400, 5)

文字入力

aapo.inputtext で 文字を入力します。

# abc と入力する.
aapo.inputtext('abc')

キーイベント入力

aapo.inputkeyevent で HOMEキーやバックキーを送ることが出来ます。

# ホームキーを押す.
aapo.inputkeyevent(3)
# バックキーを押す.
aapo.inputkeyevent(4)

NoxPlayer を自動操作する

adbpath を変えることで、NoxPlayer を操作することも出来ます。

adbpath = '..\\platform-tools\\'

NoxPlayer を操作するには、NoxPlayer ようの adb.exe を指定します。

NoxPlayer をインストールした時のパス「Program Files\Nox\bin\」を adbpath に指定すると、NoxPlayer を操作するようになります。

adbpath = 'C:\\Program Files\\Nox\\bin\\'

おわりに

これを使えば イベントの周回とかリセマラの周回とかが自動操作できるようになります。

アンドロイド実機やNoxPlayer でマウスを奪われることもないのでストレスもありません。

敷居が高そうに見えますが、楽をするために頑張ってみるのもいいものですよ。

スポンサーリンク