LoginSignup
29
44

More than 5 years have passed since last update.

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

Posted at

Android 扱ってると操作を自動化したくなることがあると思います。
Android の自動化は簡単に実現できます。

1. adb shell input による自動化

adb コマンドを使ってタップやスワイプを端末に送信できます。
下記のサイトなどで詳しく解説されています。
getevent/sendeventでAndroid端末の操作自動化

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

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

動作イメージ

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

メリット・デメリット

この方法は 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 秒で終わりました。
両者を組み合わせればなんでもできそうですね。

免責事項

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

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
29
44