アクトインディ開発者ブログ

子供とお出かけ情報「いこーよ」を運営する、アクトインディ株式会社の開発者ブログです

bitriseで起こった問題と解決方法

この記事はアクトインディ Advent Calendar 2016 1日目になります。 どうぞよろしくお願いします。

アクトインディのAndroid開発ではCIにbitriseを使用しています。 今回はbitriseで起こった問題と解決方法をご紹介します。

発生した問題

2016/11/07頃から突然bitirseでビルドエラーが発生しました。 最初は実装ミスか?と思っていたのですが、ログ調査すると以下のようなログが出力されていました。

File /root/.android/repositories.cfg could not be loaded.
Preparing "Install Solver for ConstraintLayout 1.0.0-alpha8".
"Install Solver for ConstraintLayout 1.0.0-alpha8" ready.
Finishing "Install Solver for ConstraintLayout 1.0.0-alpha8"
Installing Solver for ConstraintLayout 1.0.0-alpha8 in /opt/android-sdk-linux/extras/m2repository/com/android/support/constraint/constraint-layout-solver/1.0.0-alpha8
"Install Solver for ConstraintLayout 1.0.0-alpha8" failed.
Preparing "Install ConstraintLayout for Android 1.0.0-alpha8".
"Install ConstraintLayout for Android 1.0.0-alpha8" ready.
Finishing "Install ConstraintLayout for Android 1.0.0-alpha8"
Installing ConstraintLayout for Android 1.0.0-alpha8 in /opt/android-sdk-linux/extras/m2repository/com/android/support/constraint/constraint-layout/1.0.0-alpha8
"Install ConstraintLayout for Android 1.0.0-alpha8" failed.

ビルドしていたプロジェクトではConstraintLayoutを使用していて、 そのConstraintLayoutのインストールに失敗しているようです。

ConstraintLayoutとは

Android開発で使用する新しく登場したUIレイアウトです。 プロジェクトが依存するライブラリとしてgradleで定義しないといけないものです。 詳しくはこちらを御覧ください。

解決方法

今回の問題を解決した方法が以下になります。

./gradlew dependencies || true ←※このコマンドを追加
./gradlew "--build-file" "build.gradle" "assembleDebug" "--stacktrace"

ビルドコマンドの前に上記の※のコマンドを追加するだけです。

解決方法の解説

ビルドエラーの原因はConstraintLayoutのインストールが失敗したことです。 が、実はConstraintLayoutのインストールは完了していました。 この現象はAndroid StudioからSDK Managerを立ち上げてインストールした場合でも発生します。 以下の画像が発生した時のメッセージです。

f:id:dev-actindi:20180815095850p:plain

「Finish」を押して再度SDK Managerを立ち上げてインストール状況を確認するとインストールしたことになっています。

f:id:dev-actindi:20180815095928p:plain

なので

./gradlew dependencies

このコマンドで依存関係にあるライブラリを先にインストールされます。 インストールは完了していますが結果として異常終了となるので

./gradlew dependencies || true

とすることで正常終了となり、CIが止まることなくビルドすることが出来ます。

以上です。