Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

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

免責事項

  • あくまで技術的好奇心を満たすのが目的であり、ゲームの自動化を推奨するものではありません
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away