RobolectricのOffline設定

Kenji Abe
4 min readSep 6, 2017

--

RobolectricのOffline設定のメモです。

Robolectricは最初の実行時にjarをダウンロードします。2回目以降はダウンロードしたものを使うのでローカル環境ならまだ良いんですけど、CircleCIの場合は毎回実行します。そしてたまにダウンロードに失敗します。

たまにCIが失敗するのでなんとかしたいと思います。Robolectricにはofflineっていう設定項目があってそれを利用します。

Robolectricのインストールとかは省略

Offlineのgradle設定ファイル

robolectricのoffline設定とjarのダウンロードのタスクの設定したファイルをプロジェクト直下に配置します。ファイル名は prepare-roborectric.gradle にしてます。

この例だと、 .robolectric-dependencies というディレクトリにjarをダウンロードします。

dependencies に依存のjarを設定するのですが、これがテストの設定とかで微妙に異なります。

確認する方法です。後述するapp/build.gradleの設定をまだしない状態でやってください。

最初に ~/.m2/repository/org/robolectric が存在する場合は一度削除しておきます。次に ./gradlw testDebug -d を実行します。ログがたくさん出てくるんですが、次のような箇所を探します。

[TestEventLogger]     Downloading: org/robolectric/android-all/o-preview-4-robolectric-0/android-all-o-preview-4-robolectric-0.pom from repository sonatype at https://oss.sonatype.org/content/groups/public/

これが必要なものになります。今回は一つですが、複数の場合もあります。

app/build.gradle

で、 app/build.gradle に先程の設定を読み込ませます。

apply from: '../prepare-robolectric.gradle'

実行

./gradlew testDebug./gradlew downloadRobolectricDependencies を実行すれば、あとは勝手にディレクトリが作られてjarがダウンロードされると思います。

CircleCI設定

CircleCIはこの .robolectric-dependencies ディレクトリをキャッシュするようにします。最初の1回目はダウンロード必要ですが、それ以降はキャッシュがあるので大丈夫なはずです。注意としては、 ~/.gradle もキャッシュしないとまたダウンロードされます。実行順とか気をつけてください。

設定は後述するサンプルを見てください。

.gitignore

.robolectric-dependencies はgitに含めないようにします。

サンプル

サンプルを置いておきます。

まとめ

ここまで書いておいてアレですが、面倒な割にそこまで劇的なメリットはないですね…ちょこっとCIが落ちる確率を減らすくらいです。速度もほとんど変わらないし。

ただ、少しでも改善したい方は設定しておくと良いかもしれません。

--

--

Kenji Abe

Programmer / Gamer / Google Developers Expert for Android, Kotlin / @STAR_ZERO