酢ろぐ!

カレーが嫌いなスマートフォンアプリプログラマのブログ。

JenkinsでGradleを使ってAndroidアプリをビルドしたときの失敗と対処方法

初めてJenkinsを使ってAndroidアプリをビルドするにあたって発生したエラーとその対処方法をメモしておきます。Android Studioで開くとIDE側でよしなにしてくれるんだけど、コマンドラインからだと自分でエラーに対処しないといけない。自分が引っかかった内容を残しておきますので問題が発生した時の解決方法として参考になれば幸いです。

ところでGradleって「ぐらどる」って読むんでしょうか。グラビアアイドルの略称ぽくて、仕事の会話に挟むのにちょっと抵抗があるんですけれど……Gradleは「ぐれいどる」って読むらしい。

Gradleを使ったビルド方法

初期設定。

cd {パス}
./gradlew

デフォルトのflavor*1を含めたすべてのflavorのビルドをおこないます。

./gradlew build

単一のflavorを指定してビルドする。下記の例ではHogeというflavorのビルドをおこないます。

./gradlew assembleHoge

トラブルシューティング

Android SDKが参照できない

* What went wrong:
A problem occurred evaluating project ':*****'.
> SDK location not found. Define location with sdk.dir in the local.properties file or with an ANDROID_HOME environment variable.

GradleからAndroid SDKが参照できない場合に発生します。

一度、Android Studioでプロジェクトを開くことでlocal.propertiesにSDKのパスが追加されるようです。また、local.propertiesを作成して、その中にsdk.dirを追加するのもひとつの手です。

(追記:2015/5/21)一度、Android Studioでプロジェクトを開くというのはCI的になしというか、Jenkins的にビルド環境を構築するために人の手を介す必要があるというのはダメだと思うので、id:numanuma08 さんに教えてもらった方法でJenkinsのグローバルプロパティでANDROID_HOMEPATHの設定を追加しました。

f:id:ch3cooh393:20150521232432p:plain

submoduleのソースコードが足りていないのかも

* What went wrong:
A problem occurred configuring project ':***'.
> Cannot evaluate module api : Configuration with name 'default' not found.

理由はたくさんあるようですが、(gitで管理している環境であれば)submoduleのソースコードが足りない場合に発生することがあるようです。 cloneしてきたばかりだとsubmoduleが欠けているので、その状態でgradleを使うことで上記のエラーが発生してしまうようです。

submoduleを取得します。

git submodule init
git submodule update

(追記:2015/5/21)Jenkinsであれば上記のコマンドをビルド前に仕込むよりも、ジョブの設定でSCM(日本語版だとソースコード管理)のAdditional Behavioursの中からAdvance sub-module behaviorsを選択します。

f:id:ch3cooh393:20150521231558p:plain

Build Toolsがインストールされていない。

* What went wrong:
A problem occurred configuring project ':***'.
> A problem occurred configuring project ':***:*****'.
   > failed to find Build Tools revision 21.1.2

SDK ManagerからBuild Toolsをインストールします。

Android Lintにひっかかってる

* What went wrong:
Execution failed for task ':*****:lint'.
> Lint found errors in the project; aborting build.
  
  Fix the issues identified by lint, or add the following to your build script to proceed with errors:
  ...
  android {
      lintOptions {
          abortOnError false
      }
  }
  ...

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.

「エラーが発生しているとビルドを止める」のを止めてしまいます。上記のサジェストの通りbuild.gradleにlintのオプションを追加します。

support-v4-preferencefragment が見つからない

特定のライブラリがみつからない時に発生します。

* What went wrong:
A problem occurred configuring project ':app'.
> Could not resolve all dependencies for configuration ':app:_DebugCompile'.
   > Could not find com.android.support:support-v4-preferencefragment:1.0.0.
     Searched in the following locations:

support-v4-preferencefragmentが見つからない問題は以下の記事の方法で解決できると思います。

Unsupported major.minor version xx.xとでてビルドに失敗する

利用を想定しているJavaのバージョンとJDKのバージョンが異なる場合に発生します。

* What went wrong:
A problem occurred evaluating project ':app'.
> java.lang.UnsupportedClassVersionError: me/tatarka/RetrolambdaPlugin : Unsupported major.minor version 52.0

一致するJDKをインストールして、Android Studioのプロジェクト設定を変更することで解決できると思います。

追記

ぬまさん(id:numanuma08)から指摘をいただきました。

numa08.hateblo.jp

*1:Xcodeで言うところのtarget