Pocket

開発PCで、API=29のAVDでテスト成功したので、gitにpushしたところ、Jenkinsサーバからビルド失敗のメールが届きました。Console Outputを見ると、

com.android.builder.testing.ConnectedDevice > No tests found.[305SH - 4.4.4] FAILED
No tests found.

開発PCに、Android 4.4の実機をUSB接続して、テスト実行してみると、確かにテスト失敗しました。API=19のAVDでも、テスト失敗です。

アプリ自体は、Android 4.4でも動きます。

原因は multiDexEnabled

プロジェクトを新規作成して、Empty Activityのアプリを作りました。Android 4.4のAVDや実機で試すと、アプリ自体もandroidTestも動きました。

問題のアプリのapp/build.gradleから1行づつコピーしながら、android 4.4のAVDで、androidTestを実行して、どこで No tests foundになるか調べました。

原因は、multiDexEnabled true でした。

対応1、android.enableD8MainDexList

"multidexenabled No tests found"で検索して、次の記事が見つかりました。

(1)app/build.gradle に追加

(2)gradle.propertiesに追加

これらを設定して、gradle syncしたら、次のメッセージが。

WARNING: The following project options are deprecated and have been removed:
android.enableD8MainDexList
This property has no effect, D8 is always used to compute the main dex list.

ターミナルで、androidTestを実行したら、No tests foundのままでした。

対応2、multiDexKeepProguard

さきほどの記事が参照していた記事を見ると、別の対応策が書かれていました。

(1)app/build.gradle

(2)app/multidex.pro

android 4.4でテストを実行できるようになりましたが、テストクラス29のうち、8クラスしか実行していませんでした。

結論

ソースはもとに戻しました。Jenkinsサーバには、実機のandroid 5.0を接続することにしました。