Android上で操作したタップイベントをadbで取得して見やすく表示したり、操作を記録して再生したりする方法(Windows/Linux対応)

adbにはAndroid上で操作したイベントをリアルタイムで表示する機能があります。(記事はWindowsで作成しましたが、Linuxでもadbが使えれば問題ありません)

adb devices
adb -s 127.0.0.1:62025 shell getevent

今回は緑枠で囲った 127.0.0.1:62025 で認識されるAndroidをあれこれしたいと思います。
Android_Inputのすぐ上の緑枠のイベント番号が後で必要になるので覚えておきます。

出力例

getevent に-tlオプションを付けると少し見やすく表示されます

adb shell getevent -tl の出力をさらに見やすくタップイベントのみ表示させるスクリプト

以下のAwkスクリプトを使用します。
AWKやSLEEPコマンドが必要ですので、ない人は BusyBoxを使えるようにしてください。

eventproc.awk

使い方

adb -s 127.0.0.1:62025 shell getevent -tl /dev/input/event4 | awk -f eventproc.awk

実行の様子

察しがいい人はもうお判りかと思いますが、バッチファイルとしてリダイレクトをすることで記録、再生が可能です。

adb -s 127.0.0.1:62025 shell getevent -tl /dev/input/event4 | awk -f eventproc.awk > hogehoge.bat

ADBで操作を記録、再生

カスタマイズ

eventproc.awk の冒頭を見ると設定項目があります

# adb -s 127.0.0.1:62025 shell getevent -tl /dev/input/event4  | busybox awk -f eventproc.awk
BEGIN {
    ADB_NAME = "adb"
    ADB_DEVICE = "-s 127.0.0.1:62025"
    COMMAND_TAP   = "shell input touchscreen tap"
    COMMAND_SLEEP = "sleep"

    UpTime = ""
}

ADB_NAME
adbやnox_adb

ADB_DEVICE\
adv devices で表示されたデバイス名

COMMAND_TAP
adbでタップするときのコマンド。
 これを書き換えることはないでしょう。

COMMAND_SLEEP
sleepコマンドがない場合 TimeOut に書き換えると良いでしょう

謝辞

AWKスクリプト内で16進数→10進数を変換するため、以下のサイトのhex2decimalを丸パク(ry 参考にさせていただきました。

16進10進変換でAWK内部を窺う
http://awkytalky.jugem.jp/?eid=5

コメント

タイトルとURLをコピーしました