android appを操作できるいいことないかなーと思いながら、過ごしていると、目につく記事があったので、そこからできるか試してみた話。
結論、操作はできるのだけど、有効な活用方法はまだ思いついていない。
とりあえず実行環境を作る
Pythonでできるらしいので、よく使っているPycharmでやっていきます。
import android-auto-play-opencvsすればよいだけなので、あまり詳しく書きません。
過去の記事参照でよろしくお願いします。
勘のいいひとならわかるようにキャプチャだけ↓

以下をターミナルで実行するだけでも構いません。
pip install android-auto-play-opencv
正直、私の作業で必要だったのはこれだけ。
Android Debug BridgeというSDKも必要らしいので、ない方はDLしておきましょう。

platform-toolsというファイルが入手できます。任意の場所に保存します。
リファレンスでできること確認
任意のアプリを起動させる

日本語で書かれているので、、、こういうこと考えるのは日本人ということなのかな?とでも思っておきます。
ぱっと見で残念なのは、任意の画面にパスで飛べないようです。
アプリの起動コードが以下で
aapo.start('com.aniplex.fategrandorder/jp.delightworks.Fgo.player.AndroidPlugin')
パッケージ名/クラス名 のように/を境に表現されている様子。
パッケージ名はGooglePlayのURLに記載されているid=~~~

クラス名は、対象アプリを起動した状態でコマンドプロンプトから以下を実行すると一発で確認できます。
adb -s デバイスのシリアル番号 shell dumpsys window | findstr mCurrentFocus
シリアル番号は adb devices で確認できます。実行結果の例:
※シリアル番号はadb devicesで確認できます。
mCurrentFocus=Window{d823f3e u0 パッケージ名/クラス名}
/ 以降がクラス名です。
因みに、このクラス名は起動させる画面を指定する役割があるので、任意の画面を起動させる場合、このクラス名を変更することになります。
aapo.start('com.google.android.youtube/com.google.android.apps.youtube.app.application.Shell_HomeActivity')
これを実行するとyoutubeアプリの起動ができました。
画像指定でクリック
画像指定でクリック位置を探す方法について。完全一致なのかどうかは調べてませんが、基本的に完全に一致する画像を用意することを前提にします。
まずは画像の準備は、操作したい任意アプリを起動して、クリックしたい場所がある状態でスクショ、これをトリミングで加工して、クリック位置が。。おそらく真ん中になる状態で加工します。
適当に名前を付けてmain.pyの周辺に保存でもします。

aapo.screencap()
aapo.touchImg('./template/image.png')
上記のような位置関係で、image.pngという画像をタップするコード、これで終わり。
実行前にキャプチャを入れているのは、おそらく必要だと思うから。
その他
あとは、座標指定でタップや、スクロール、大体これで操作の大半はできます。終了方法も確認しておくと、困りはしない。リファレンスを見れば理解できるので説明いらないです。
座標指定のタップをする場合は、開発者モードの入力項目、ポインタ位置の表示をした状態で使ってると、X Y座標がわかります。
後、おそらくですが、画面サイズ(機種とか)が違ってしまうと、うまく動かないと思います。画像認識タップにおいて、キャプチャ画像の直接加工でない場合、うまく認識しなかったり、画面サイズが違うと座標も変わるので。。
最後にサンプルを上げておきます。作ったものですが、何のアプリかは秘密です。
# This Python file uses the following encoding: utf-8
# pip install android-auto-play-opencv
import time
import android_auto_play_opencv as am
adbpath = 'C:/development/platform-tools/'
aapo = am.AapoManager(adbpath)
# appを開く
aapo.start("*****")
aapo.sleep(2)
#座標指定でクリック X=676 Y=2292
aapo.touchPos(676, 2292)
aapo.sleep(2)
# X=526 Y=1466
aapo.touchPos(526, 1466)
aapo.sleep(2)
# 535 1894
aapo.touchPos(535, 1894)
aapo.sleep(2)
aapo.end('*****')
実行するにはPCにつないでおかないと動かないので、スマホ単独で実行できるようにならないかな?ポケット入れてる間に勝手に動いてほしい。。。できるようならこの記事か別記事で公開します。
まとめ
これで、スマホのアプリ自動操作もある程度、まともにで切るようになったので、すぐに役立てるとすれば、仕事でアプリの評価に使うか。。
ゲームの自動巡回系も使えなくはないと思いますが、androidはゲーム端末にしない方が良いです。
iPhoneはゲーム機ですね、androidはツールとしての使いやすさが素晴らしいのでツール系の操作に使いましょう。
とはいえ、個人でスマホ操作の自動化は正直需要がない。※PCにつないでいる状態では
ゲーム以外で何か面白い使い方を思いついた人がいればコメントで教えてほしいです。(切実)


コメント