Python

こんなことまでできる!?PythonでAndroidスマホを操作するには?

こんなことまでできる!?PythonでAndroidスマホを操作するには?
Pythonについて調べていたら、Androidを操作できることを知りました。
スマホアプリの操作が自動化できたら便利ですよね。

さらに調べを進めたところ、2022年現在、3つの方法を見つけました。

  • 「Selenium」を使う
  • 「Appium」を使う
  • 「android-auto-play-opencv」を使う

そのうち、「UWSC」のように画像認識ができる「android-auto-play-opencv」を使うことにしました。
Windows10で実行する方法をまとめます。

 

用意するものは?

外部ライブラリ「android-auto-play-opencv」

Pythonの外部ライブラリandroid-auto-play-opencv」をインストールします。

pip install android-auto-play-opencv

外部ライブラリインストールの詳しい方法はこちら。

Android Debug Bridge(adb)

「android-auto-play-opencv」を使ってAndroidスマホを操作するのに「adb.exe」というファイルが必要です。
SDK Platform-Toolsから、パソコンのOSと同じもののリンクをクリックします。
こんなことまでできる!?PythonでAndroidスマホを操作するには?

利用規約に同意すると、ダウンロードが開始されます。
こんなことまでできる!?PythonでAndroidスマホを操作するには?
ダウンロードしたZIPファイルを解凍し、任意のフォルダに保存しておきます。
Pythonのコードにパスを使うので、「platform-tools」フォルダをどこに保存したか控えておくと便利です。

通信ケーブル

スマホとパソコンを物理的につなぐケーブルが必要です。
充電用に買ったダイソーのケーブルで試したら、通信もできました。

 

スマホの設定は変更するの?

「開発者オプション」の「USBデバッグ」をオンにすることが必須です。
開発者オプションは、「開発者(ディベロッパー)モード」にしないと表示されません。
開発者(ディベロッパー)モードにするには、「設定」⇒「端末情報」の中にある「ビルド番号」を7回タップすると切り替わります。
こんなことまでできる!?PythonでAndroidスマホを操作するには?
そうすると、開発者オプションが表示されるので、その中にある「USBデバッグ」をオンにして、事前準備完了です。
こんなことまでできる!?PythonでAndroidスマホを操作するには?

 
その他、やっておくと便利なのは、座標を表示させることです。
「android-auto-play-opencv」では、タップする位置を座標で指定することができます。
「開発者オプション」の中にある「ポインタの位置」をオンにすると、画面上に座標が表示されるようになります。タップする位置を調べるのに便利ですね。
こんなことまでできる!?PythonでAndroidスマホを操作するには?

 
また、画面がオフになると自動操作が途切れることもあるので、「自動画面オフ」の設定も見ておくと良いでしょう。

 

Pythonのコードの書き方は?

基本的にはリファレンスに書いてあるものの、実際にやってみて「???」と思ったところを書いていきます。

 

パッケージ名とクラス名

アプリを立ち上げるのに「aapo.start()」を使います。
その引数に、立ち上げたいアプリの「パッケージ名」と「クラス名」が必要です。

パッケージ名は、立ち上げたいアプリをGooglePlayで検索して、出てきたURLに記載されています。
例えば、「YouTubeアプリ」のURLは、「https://play.google.com/store/apps/details?id=com.google.android.youtube」です。その中の「id=」以降の「com.google.android.youtube」がパッケージ名です。
「id=」の後に「&」がある場合は、その前までがパッケージ名になります。

クラス名は、コマンドプロンプトから「adbコマンド」を実行することで取得できます。
まず、立ち上げたいアプリをインストールしたスマホをパソコンにつなぎます。
次に、コマンドプロンプトで、保存した「platform-tools」フォルダをカレントフォルダにします。
その後、パッケージ名を入れた下記のコードを実行します。

adb shell pm dump 【パッケージ名】

そうすると、アプリに関する情報が大量に出てきます。
その中に「android.intent.action.MAIN:」という文字列があるので、その後にある「パッケージ名」/「クラス名」を控えておきます。
末尾の「filter ~」はクラス名には含まれません。

 

タスクキーを押す

「aapo.inputkeyevent()」で、タスクキーも送れます。

# タスクキーを押す
aapo.inputkeyevent(187)

 

画像認識について

「aapo.chkImg()」で画像の有無を判定できますが、完全一致ではありません
例えば、形が同じで色が違う場合、同じ画像と判定されます。

また、探したい画像は「pngファイル」で作りますが、スマホ本体のスクリーンショット機能ではなく、「aapo.screencap()」と「aapo.imgSave()」を組み合わせて取得した画像を使わないと認識しません

 

まとめ

PythonでAndroidを操作するのに「android-auto-play-opencv」というライブラリを使いました。
Windows11ではAndroidが扱えるので、いずれこれより良い方法が出てくるでしょう。
この方法でもかなり手間が省けるので、とてもありがたいです。

-Python
-, , , , , , , , , , , , , , , , , , , , , , , , , ,