Python で Android ゲーム を自動操作

Android自動操作

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

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

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

目標

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

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

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

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

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

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

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

準備

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

Python

Python

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

Python

ちゃんとインストール出来たか確認するには?

コマンドプロンプトに下記を入力すると確認できます。

python --version

android-auto-play-opencv

OpenCV の画像認識を使って、Android を自動操作するライブラリです。

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

インストール方法

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

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

pip install android-auto-play-opencv

Successfully と出れば成功です。

Android Debug Bridge(adb)

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

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

SDK Platform-Tools

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

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

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

サンプル集

Android自動操作ライブラリを使ったサンプル集です。無くても問題ないです。

android-auto-play-opencv

noitaro/android-auto-play-opencv
Contribute to noitaro/android-auto-play-opencv development by creating an account on GitHub.

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

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

拡張子を表示させる

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

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

これで準備完了です。

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

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

適当なフォルダを作って作業して下さい。今回は展開した「android-auto-play-opencv-master」フォルダ内で作業します。

フォルダ内を右クリックし、新規作成の「テキストドキュメント」選択します。

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

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

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

こんな感じになればOK。

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

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

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

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

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

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

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

雛形をコピペする

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

# This Python file uses the following encoding: utf-8
# pip install android-auto-play-opencv
import android_auto_play_opencv 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」と入力しエンターキーを押し、コマンドプロンプトを開きます。

開いたコマンドプロンプトに下記コマンドを入力すると Python を実行することが出来ます。

python ./Main.py

「アンドロイド端末が接続されていません。」と出れば成功です。Python が正しく機能しています。

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

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

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

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

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

USBモードを メディアデバイス にする。

USBモードは メディアデバイス

それでも駄目な場合は、アンドロイド実機の 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')

待機

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

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

画面キャプチャ

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

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

chkImg 指定画像の存在確認1

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

見つけた場合は True を返し、それ以外は False を返します。

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

chkImg2 指定画像の存在確認2

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

見つけた場合は True と X座標、Y座標 を返し、それ以外は False を返します。

# 古龍の心臓 が見つかったら位置を戻す。
result, x, y = aapo.chkImg2('./template/koryunosinzo.png')
print('result=' + str(result) + ', x=' + str(x) + ', y=' + str(y))

if result:
    # 見つかった位置から指定ピクセルズラしてロングタップ(5秒)
    aapo.longTouchPos(x+50, y+50, 5000)

touchImg 指定画像をタップ

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

指定画像をタップしたらTrue、指定画像が無くてタップ出来なかったらFalseを戻してくれます。

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

touchPos 指定位置をタップ

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

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

touchPos 指定位置をロングタップ

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

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

swipeTouchPos スワイプ

# X=750、Y=800 から、X=750、Y=400 まで、1秒かけてスワイプする.
aapo.swipeTouchPos(750, 800, 750, 400, 1000)

inputtext 文字入力

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

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

inputkeyevent キーイベント入力

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

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

キーイベントのキーコード表はこちら

imgSave キャプチャ画像の保存

画面キャプチャしたデータを保存することが出来ます。

# キャプチャ画像を保存
aapo.imgSave('screenshot.png')

# 現在の日時でキャプチャ画像を保存
aapo.imgSave('img/screenshot_' + datetime.datetime.now().strftime('%Y%m%d%H%M%S') + '.png')
# ↑をする場合「import datetime」をファイルの先頭に書くこと。

NoxPlayer を自動操作する

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

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

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

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

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

おわりに

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

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

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

新しい自動操作ツールを作りました

新しくアンドロイド自動操作ツールを作りました。

アンドロイド自動操作ツール
アンドロイド自動操作ツール を作りました。Blockly(ブロックベースのビジュアルプログラミング)を使って、アンドロイドを自動操作出来るようにしました。シンプルに仕上げたので使って下さい。ちなみに、何があっても自己責任で...
タイトルとURLをコピーしました