sumioの技術メモ

Androidについての記事が多くなると思います。

Roppongi.aar #2で、UI Automator 2について発表しました #roppongi_aar

2015/11/17(火)に開催された、Roppongi.aar #2で「UI Automator Becomes Friendly with Espresso」というタイトルで発表してきました。以下が発表資料です。

新しくなったUI Automator 2では、Espressoと混ぜて使うことができる、という内容です。

Espressoを使ったテストを書いている時に、連携先のアプリを操作したくなることがあると思います。 そういうときに、連携先のアプリに遷移したところだけUI AutomatorAPIを使ってテストを書くことができるのです。

新しいUI AutomatorAndroid Instrumentation Testをベースに書き直されたことによって、このようなことが可能になりました。

具体的な動作例はGitHubにアップロードしましたので、参照してみてください。

UI Automator 2の仕組みについて

ところで、Android Instrumentation Testは、テストコードと同一の開発者署名が施されたアプリケーションしか操作できなかったはずです。 それにもかかわらず、UI Automatorは、異なる署名のアプリを操作できています。これは、どのような経緯によるものなのでしょうか。

UI Automator 2のソースコードを辿っていくと、最終的にInstrumentationUiAutomatorBridgeというクラスからUiAutomationを参照していることが分かります。

このUiAutomationクラスのインスタンスInstrumentation.getUiAutomation()から取得することができますので、Instrumentation Testから呼び出すことができるのです。

UI Automator 2は、UiAutomationが提供しているメソッドを駆使して第三者が署名したアプリの操作を実現している、ということになります。これらのAPIの利用には、特殊な権限はいりません。

アクセシビリティまわりのAPI構造を理解していないとなかなか使いこなすのが難しそうですが、これらのAPIを駆使すればUI Automatorの気に入らない部分だけ自作したり、あるいは新しいテストフレームワーク全体を作ることもできるはずで、色々と夢は広がります!

最後に

今回の勉強会は「英語推奨」ということで、スライドだけはなんとか英語にして本番に臨んだのですが、 喋りについては日本語で発表させていただきました。 海外の参加者も何人かいらっしゃったので、発表も英語でできれば良かったのですが、そこまでは手が回りませんでした。 また発表の機会があったら、次回は頑張りたいと思います。

発表後の懇親会では、Androidのテストについての苦労話を、色々な方から伺うことができました。大変だという思いは皆さん一緒なのだと改めて思いました。Androidのテストについて、色々な方の考えを聴けるのは本当に参考になります!

今回の勉強会を主催してくださった@petitvioletさん、@tomoaki_imaiさん、株式会社メルカリのみなさん、どうもありがとうございました。