コマンドラインからスクリーンロックを解除する
TouchUtils.clickView() とかで UI に触るようなテストを書いてみると、実行時に
java.lang.SecurityException: Injecting to another application requires INJECT_EVENTS permission
とか出て失敗することがあった。 ググってみるとスクリーンがロックされているのが原因らしく、実際スクリーンロックを解除してから実行するとちゃんと通った。
エミュレータを起動した直後は必ずロックされた状態になっていて、emulator-arm -help
見てもそれを解除する方法が見当らない。 emulator-arm -no-window
で起動してすべてコマンドラインで完結させたかったので解決法を考えた結果、adb 経由で Android にキーイベントを送れることがわかったので、 スクリーンロックを解除するメニューキーを押すようなキーイベントを送る方法でいけた。
あとデバイスがオンラインになるまでブロックするのは adb wait-for-device
でいけるけど、デバイスがオンラインになっている状態で adb shell input keyevent 82
しても Killed と言われたりすることもあって、 よくわからないけど Killed が出なくなるまで送り続けるようなスクリプトを書いて実行するようにしてる……