Posted at

Android の操作を記録して爆速で再生する

More than 3 years have passed since last update.

Android 扱ってると操作を自動化したくなることがあると思います。

Android の自動化は簡単に実現できます。


1. adb shell input による自動化

adb コマンドを使ってタップやスワイプを端末に送信できます。

下記のサイトなどで詳しく解説されています。

getevent/sendeventでAndroid端末の操作自動化

また、下記の記事(英語)で解説されているスクリプトを使用すれば、操作を簡単に記録・再生することもできます。

Android Record and Playback | FatTuba.com

下記は↑の記事のスクリプトを OSX で動作するようにちょっと調整したものです。

https://github.com/pm11op/AndroidRecorder


動作イメージ

あらかじめ手書きメモアプリを立ち上げて、文字を書く操作を記録しておいたものを再生する様子


メリット・デメリット

この方法は 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. 100回タップするのにかかる時間を計測

具体的にどれくらいの差がでるか、下記の手順で計測してみました。


adb shell input

下記スクリプトを time コマンドで計測


sample1.sh

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 コマンドで計測


sample2.sh

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 秒で終わりました。

両者を組み合わせればなんでもできそうですね。


免責事項


  • あくまで技術的好奇心を満たすのが目的であり、ゲームの自動化を推奨するものではありません