困っていたこと
gradleのコマンドでInstrumentationテストを実行する際、複数の実機/エミュレーターが接続されているとテストが全ての端末で同時に実行されてしまう。
$ ./gradlew testApp:connectedCheck
$ (省略)
Starting 32 tests on Pixel_2_API_28(AVD) - 9
Starting 32 tests on SO-03J - 8.0.0
これはこれで、Matrixテストになっていいかも知れないですが、どれか特定の端末でだけ実行したい場合の方が多いのではないかと思います。
その度に接続を外したりエミュレーターを落としてその後また必要になったら再起動したりするのも面倒ですよね。
解決策
ANDROID_SERIAL
環境変数を使う。
(1)adb devicesでデバイスリストを表示
例えば、実機1台とエミュレーター1台をそれぞれ接続、起動しているとします。
$ adb devices
List of devices attached
XXXXXXX device
emulator-5554 device
(2)環境変数を指定してからgradleコマンドを実行する
リストされた端末のうち、エミュレーターを使いたい場合の例。
$ export ANDROID_SERIAL=emulator-5554
$ ./gradlew testApp:connectedCheck
環境変数は同じターミナルから実行し続ける限りは有効なので、その後のコマンドでも同じ端末が選択されます。
実機の方を使いたい場合は、"XXXXXX"という方を指定すれば良いです。
参考ページ
おまけ
複数端末でテストが実行されたときに、テストレポートはどうなっているのだろうと確認したら、ちゃんとMatrixの結果表示になっていました。
ちょっと感動しました。
![]() |
---|