IntelliJ IDEA 13からAndroidの開発でGradleの使用が正式にサポートされました。
しかし実際にGradleのビルドができるようになるまでに幾つかエラーが起きてその回避のために環境設定が必要だったのでまとめました。
なお、特にOSに依存しない問題ですが投稿時の動作環境はMac OS Xです。また、あらかじめOS上のGradleのインストールやIntelliJ IDEAのGradleプラグインは導入できている前提で話を進めます。
まずはGradleベースのAndroidプロジェクト作成手順について簡単に説明します。
プロジェクトの作成
IntelliJ IDEA 13からNew Projectダイアログで「Gradle: Android Module」が選べるようになりました。
Gradleベースのビルド方式でAndroidの開発を行う場合はこれを選びます。
はじめに「Gradle: Android Module」を選んで以降のプロジェクト初期設定は今までのAndroidプロジェクトと同じです。
ひと通り設定してFinishをクリックするとプロジェクトが作成されます。
自動で作成されるプロジェクトの構成が通常のAndroidプロジェクトとは少し変わります。
Gradle:Android Moduleプロジェクトではプロジェクトルートの下にModleのフォルダが出来て、その下にAndroidの各ファイルが配置され、build.gradleファイルなどのGradle用の設定ファイルが各所に配置されます。
このようにプロジェクトの作成まではスムーズに行えますが、このままではビルドするまでにいくつかの問題が起きます。
プロジェクト作成後に起きた問題と解決策
Gradle: Android Moduleのビルド環境はAndroid SDKやGradleの環境に依存しているためそれらの組み合わせによってはうまく動かないことがあります。ただし、環境に依存する問題なので必ず全てのエラーが発生するというわけではありません。
1.Failed to import Gradle project
プロジェクトを作ってすぐに起きるエラーです。
Android SDKのAndroid Support Repositoryが無いのが原因です。
これはAndroid Studioで同様の問題が起きるようで、Android Developersの公式サイトでも回避方法がアナウンスされています。
Error: Gradle project refresh failed - Android Developers
Android SDK Managerを起動してExtrasの中にあるAndroid Support Repositoryをインストールすることで解決します。
参考
Android StudioでGradleエラーが出て新規プロジェクトが作成できない - kidd0320のメモ
2.org.gradle.api.artifacts.result.ResolvedModuleVersionResult
ビルドを実行した時にResolvedModuleVersionResultクラスが見つからないというエラーが発生します。
Failed to refresh Gradle project 'GradleExample'
Unable to load class 'org.gradle.api.artifacts.result.ResolvedModuleVersionResult'.
This is an unexpected error. Please file a bug containing the idea.log file.
ログファイルを見るとCalssNotFoundExceptionが出ています。
Caused by: java.lang.ClassNotFoundException: org.gradle.api.artifacts.result.ResolvedModuleVersionResult
at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
... 100 more
このエラーはGradleのバージョンが1.10以上を使っていると発生します。
Android側がGradle 1.10以上をサポートできていないようです。
Issue 63822: Unable to load class 'org.gradle.api.artifacts.result.ResolvedModuleVersionResult'
使用するGradleのバージョンはPreferences > Gradleで設定できるため、1.10以上のバージョンは残したまま1.9のインストールパスを指定することで複数バージョンを使い分けることが可能です。
参考
3.Main Manifest missing...
自動生成されたbuild.gradleをそのまま使ってビルドを実行するとManifestファイルが見つからないというエラーが発生します。
これはbuild.gradleにManifestファイルのパスを明示的に指定することで解決します。
プロジェクトの構成にもよりますが通常は以下の様な記述をbuild.gradleに追加することで解決します。
android {
sourceSets {
main {
manifest.srcFile 'src/main/AndroidManifest.xml'
}
}
なお、manifest.srcFile以外にもjava.srcDirsやres.srcDirsなどもあわせて設定しておくのが良いと思います。
参考
Android Studio Manifest Missing Error
まとめ
Gradleはまだ新しいビルドシステムでIntelliJ IDEAではサポートされたばかりということで初期設定に少しとっつきにくさがありますが、一度設定してしまえば快適に利用することができます。
補足
IntelliJ IDEA 13からサポートされたGradle関連の情報はJetBrainsのブログに紹介されています。
IntelliJ IDEA 13のAndroidデベロッパにうれしい新機能群の紹介