Androidの自動化アプリを作りたくて、色々試してみたので備忘録します。
まず結論から。
スマホ単体では実現できませんでした。
セキュリティの問題で、普通のアプリには権限が付与されていないみたいです。
rootアプリやシステムアプリなら出来るんですが、それだと敷居が高いので今回は対象外です。
それを踏まえたうえでご覧ください。
方法1
パソコンから 「input touchscreen」コマンドを投げる。
言わずと知れた方法ですね。
検索するとたくさん出てきます。
Android と パソコンを USBデバッグ で繋いで adb で shell を実行します。
./adb shell input touchscreen tap x y
この方法は、前回 Python でやっているので割愛です。
方法2
Android アプリ内で Shell コマンドを実行する。
Android は Java で動いているので、Runtime.exec() で 別プログラムが実行できます。
なので、exec で 「input touchscreen tap x y」をやって上げれば クリック出来るんじゃないかと思います。
出来ませんでしたけどね。
エラーにならないで、空振りしている感じです。
試しにアプリを作ってみました。

adb shell から投げれるコマンドを アプリ内から直接実行してみました。
./adb shell pm list packages

これで、行ける!!
って思ったんですが、そうは問屋が卸しません。
アプリがハングアップしました。

方法3
1+2のハイブリッド型
アプリだけで完結出来ないので、1+2のハイブリッド型で実装します。

まず最初に、パソコンから adb shell を使って Input Host Server を立ち上げます。
次に、アプリから Input Host Server にタッチ情報を送ってデバイスをタップさせます。
欠点は、初めに一度だけ、パソコンと繋いで Input Host Server を立ち上げないと行けないことですね。
でもまあ一度立ち上げてしまえば、アンドロイドを再起動するまで使えるので、いいんじゃないでしょうか。
よくないか。
物は試しでアプリにしました。

Input Host Server 開始
APK を入れたら、パソコン側から adb を使って Shell 権限で実行させます。
./adb shell
sh -c "CLASSPATH=/data/app/com.example.resetmara-1/base.apk /system/bin/app_process /system/bin com.example.resetmara.InputHost"
ちなみに CLASSPATH はインストールした端末毎に違います。
調べ方は pm コマンドでパッケージパスを投げると返ってきます。
./adb shell pm path com.example.resetmara

この部分は、起動ツールでも作ろうと思います。
今はとりあえずコマンドを直叩きします。
アプリの TAP ボタンを押す
したらば、Input Host Server に タップ情報が投げられて、Input Host Server が実機をタップします。

ちゃんと指定した箇所がタップされています。
おわりに
とりあえず、やりたいことのやり方が分かりました。
次は、今回のことを踏まえて、Android アプリでマクロを組めるようにしてみたいと思います。
参考サイト

