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 からの実行両方で動作します。


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

0 件のコメント:

コメントを投稿