Android 扱ってると操作を自動化したくなることがあると思います。
Android の自動化は簡単に実現できます。
1. adb shell input による自動化
adb コマンドを使ってタップやスワイプを端末に送信できます。
下記のサイトなどで詳しく解説されています。
getevent/sendeventでAndroid端末の操作自動化
また、下記の記事(英語)で解説されているスクリプトを使用すれば、操作を簡単に記録・再生することもできます。
Android Record and Playback | FatTuba.com
下記は↑の記事のスクリプトを OSX で動作するようにちょっと調整したものです。
動作イメージ
あらかじめ手書きメモアプリを立ち上げて、文字を書く操作を記録しておいたものを再生する様子
Android 上で記録した操作を再生 pic.twitter.com/g3s9OeOykO
— まさるんこ (@masarunco) 2016年8月1日
メリット・デメリット
この方法は sleep をはさみつつ、順番にクリック・タップをしたい場面で有用です。
逆に、動作が遅いのでとにかく連打したいとかいう場面(?)には不向きです。
2. dd コマンドによる自動化
使い方
デバイスや記録先ファイルのパスは適宜書き換えてください
2.1. $ adb shell "dd if=/dev/input/event5 of=/sdcard/sample2"
2.2. Android 端末上で記録したい操作を実行
2.3. Ctrl+C
2.4. $ adb shell "dd if=/sdcard/sample2 of=/dev/input/event5"
動作イメージ
あらかじめ適当にクリックしまくった操作を連続で再生する様子
暇だからぷにぷにやる合間にぷにぷに自動化してたら 3日で俺よりうまくなった | https://t.co/trXHewSWJO
— まさるんこ (Kinoshit) (@pm11op) 2016年7月15日
メリット・デメリット
動作はくそ速いです。
処理が速すぎて各操作間の時間差はほぼつけられないので、とにかく連打させるくらいにしか使えません。
3. 100回タップするのにかかる時間を計測
具体的にどれくらいの差がでるか、下記の手順で計測してみました。
adb shell input
下記スクリプトを time コマンドで計測
COUNT=0;
while [ $COUNT -lt 100 ]; do
adb shell input touchscreen tap 540 960;
COUNT=$(( COUNT + 1 ));
done;
$ time sh sample1.sh
real 0m32.238s
user 0m0.429s
sys 0m0.395s
dd
3.1. $ adb shell "dd if=/dev/input/event5 of=/sdcard/sample2"
3.2. Android 端末上で10回タップ
3.3. Ctrl+C
3.5. 下記スクリプトを time コマンドで計測
COUNT=0;
while [ $COUNT -lt 10 ]; do
adb shell dd if=/sdcard/sample2 of=/dev/input/event5";
COUNT=$(( COUNT + 1 ));
done;
$ time sh sample2.sh
real 0m0.565s
user 0m0.057s
sys 0m0.064s
まとめ
adb shell input で 30秒以上かかった操作が dd では 0.5 秒で終わりました。
両者を組み合わせればなんでもできそうですね。
免責事項
- あくまで技術的好奇心を満たすのが目的であり、ゲームの自動化を推奨するものではありません