ラベル Airtest の投稿を表示しています。 すべての投稿を表示
ラベル Airtest の投稿を表示しています。 すべての投稿を表示

2021年4月3日土曜日

ウマ娘にハマってしまっていた

 最近、ブログ執筆ペースが落ちてるのですが
「ウマ娘」にハマってしまっていました。
中高生のときにパワプロにドハマリしてたころを思い出しますね。

今まであまりおおっぴらにはしてこなかったのですが、
自分がプレイしてるゲームの「自動化」を趣味でやってて、
Airtest 使った UI オートメーションだったり、RPA 使った通知システムだったり、
そんなのを作ってます。

ウマ娘では「ハルウララ金策」自動化をしました。
育成開始から目標失敗で終わるまで自動で進めてくれます。
テキトーに組んだシナリオですが、それなりに確度高くできてると思いますね。
(記者の吹き出しの色がミドリで、たまに選択肢のミドリと誤認識してたのを気をつけたくらい)

「ハルウララ金策」は見るに堪えない作業ですが、自動化すれば心も痛みません!(え
(実際には TP 足らなくてほとんど出番はないですが…)

Airtest 使えば誰でも簡単にできちゃうと思いますが、
この手のツールを使った自動化は BAN 対象になりうるので自己責任でお願いします。
では。

2020年4月7日火曜日

Airtest を Android 10 で動かす

Airtest の最新バージョン(v1.2.3)で Android 10 のサポートが入りました。
私物の端末に Android 10 が来ていたので、反射的にアップグレードして Airtest が動かなくなってしまったのですが、助かりました。

ただし、普通に connect した場合におそらく minitouch の Permission denined error が発生すると思います。
[07:11:37][DEBUG] C:\Python27amd64\lib\site-packages\airtest\core\android\static\adb\windows\adb.exe -s BH900FPXD1 shell /data/local/tmp/minitouch -n 'minitouch_19717' 2>&1
[07:11:37][DEBUG] [minitouch_server]'open: Permission denied'
[07:11:37][DEBUG] [minitouch_server]'Unable to open device /dev/input/event8 for inspectionopen: Permission denied'
[07:11:37][DEBUG] [minitouch_server]'Unable to open device /dev/input/event7 for inspectionopen: Permission denied'
[07:11:37][DEBUG] [minitouch_server]'Unable to open device /dev/input/event6 for inspectionopen: Permission denied'
[07:11:37][DEBUG] [minitouch_server]'Unable to open device /dev/input/event5 for inspectionopen: Permission denied'
[07:11:37][DEBUG] [minitouch_server]'Unable to open device /dev/input/event4 for inspectionopen: Permission denied'
[07:11:37][DEBUG] [minitouch_server]'Unable to open device /dev/input/event3 for inspectionopen: Permission denied'
[07:11:37][DEBUG] [minitouch_server]'Unable to open device /dev/input/event0 for inspectionopen: Permission denied'
[07:11:37][DEBUG] [minitouch_server]'Unable to open device /dev/input/event2 for inspectionopen: Permission denied'
[07:11:37][DEBUG] [minitouch_server]'Unable to open device /dev/input/mice for inspectionopen: Permission denied'
[07:11:37][DEBUG] [minitouch_server]'Unable to open device /dev/input/event1 for inspectionUnable to find a suitable touch device'

これの対応に1ステップ必要なので紹介します。

IDE の場合
最新バージョンに更新するのはもちろんですが、 ADB connect のオプションを変える必要があります。

スクリプトの場合
実行する python 環境にインストールされている airtest を更新します。

pip install -U airtest

続いて、スクリプトファイルの auto_setup 後に device の touch_method を ADBTOUCH に変更します。
from airtest.core.api import *
from airtest.core.android import *

auto_setup(__file__)
dev = device()
if isinstance(dev, Android):
    dev.touch_method ="ADBTOUCH"


auto_setup(__file__, ["Android:///?touch_method=ADBTOUCH"])
でも touch_method を指定可能ですが、
IDE のスタートボタンから実行した場合は、auto_setup の時点でデバイスのセットアップ済みのため、
auto_setup で指定した touch_method に切り替わりません。
なので、接続中のデバイスが「Android」だったら touch_method を上書きするようにしています。
この書き方であればスクリプト単体実行と IDE からの実行両方で動作します。


公式ドキュメントだと微妙に名前が違ったりしてハマりましたが、ソースコード解析してなんとか解決できました。。
今回は以上です。では。