afjkの技術メモ

主に技術系備忘録

Androidの操作を自動化する

Androidアプリの試験を自動化するため、Rubyでスクリプトを書きました。
実際の操作と比べると実行速度は遅いですが、特に繰り返し試験では自動化のメリットは大きいです。

使い方

AndroidとPCをUSB接続し、コマンドプロンプトから実行

  • 操作をログファイルへ記録
>ruby autoInput.rb r
  • ログファイルから自動入力
>ruby autoInput.rb p
  • ログファイルから自動入力(ループ)
>ruby autoInput.rb p l

autoInput.rb

解説

Androidでのユーザー入力イベントはadb shell geteventで取得出来ます。

>adb shell getevent /dev/input/event0
0003 002f 00000000
0003 0030 0000000a
:

これをadb shell sendeventに渡してやれば、コマンドラインからAndroidへ入力出来ます。

>adb shell sendevent /dev/input/event0 0 0 0
>adb shell sendevent /dev/input/event0 3 48 10
:

geteventで取得できる値は16進数なので、sendeventに渡す際に10進数へ変換する必要があります。
Rubyからのadb shellへの入出力はopen3を使い標準入出力経由で実行しました。

また、実際の操作時間に合わせるため入力イベントの時間差分を記録し、再生時にその時間分sleepさせています。