IntelliJ IDEA 13のGradle:Android Moduleプロジェクト作成時に起きるエラーの解消方法

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の開発を行う場合はこれを選びます。

![スクリーンショット 2014-02-16 0.44.04.png](https://qiita-image-store.s3.amazonaws.com/0/3324/4503d875-b884-a2f1-1c7b-4454ae555f20.png)

はじめに「Gradle: Android Module」を選んで以降のプロジェクト初期設定は今までのAndroidプロジェクトと同じです。

![スクリーンショット 2014-02-16 0.45.34.png](https://qiita-image-store.s3.amazonaws.com/0/3324/6d165d60-3c41-12ad-05ac-cf8ff54f3242.png)

ひと通り設定してFinishをクリックするとプロジェクトが作成されます。
自動で作成されるプロジェクトの構成が通常のAndroidプロジェクトとは少し変わります。
Gradle:Android Moduleプロジェクトではプロジェクトルートの下にModleのフォルダが出来て、その下にAndroidの各ファイルが配置され、build.gradleファイルなどのGradle用の設定ファイルが各所に配置されます。

![スクリーンショット 2014-02-16 0.40.46.png](https://qiita-image-store.s3.amazonaws.com/0/3324/e47322f7-bf31-8378-a272-f8e2555fe97b.png)

このようにプロジェクトの作成まではスムーズに行えますが、このままではビルドするまでにいくつかの問題が起きます。

## プロジェクト作成後に起きた問題と解決策

Gradle: Android Moduleのビルド環境はAndroid SDKやGradleの環境に依存しているためそれらの組み合わせによってはうまく動かないことがあります。ただし、環境に依存する問題なので必ず全てのエラーが発生するというわけではありません。

### １．Failed to import Gradle project

プロジェクトを作ってすぐに起きるエラーです。
Android SDKのAndroid Support Repositoryが無いのが原因です。
これはAndroid Studioで同様の問題が起きるようで、Android Developersの公式サイトでも回避方法がアナウンスされています。
[Error: Gradle project refresh failed - Android Developers](http://developer.android.com/intl/ja/sdk/installing/studio.html#Troubleshooting)

Android SDK Managerを起動してExtrasの中にあるAndroid Support Repositoryをインストールすることで解決します。

![スクリーンショット 2014-02-16 23.49.06.png](https://qiita-image-store.s3.amazonaws.com/0/3324/60109677-c5d6-22e3-6bd0-7b4a6932c9b0.png)

##### 参考
[Android StudioでGradleエラーが出て新規プロジェクトが作成できない - kidd0320のメモ](http://kidd0320.hatenablog.com/entry/2013/07/17/103237)


### ２．org.gradle.api.artifacts.result.ResolvedModuleVersionResult

ビルドを実行した時にResolvedModuleVersionResultクラスが見つからないというエラーが発生します。

```text
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が出ています。

```text
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'](https://code.google.com/p/android/issues/detail?id=63822)

使用するGradleのバージョンはPreferences > Gradleで設定できるため、1.10以上のバージョンは残したまま1.9のインストールパスを指定することで複数バージョンを使い分けることが可能です。

![スクリーンショット 2014-02-16 12.25.51.png](https://qiita-image-store.s3.amazonaws.com/0/3324/c8e231bc-7225-00b1-60ee-78a590668d9d.png)

##### 参考
[Can't find org.gradle.api.artifacts.result.ResolvedModuleVersionResult when apply Android plugin in Gradle - Stack Overflow](http://stackoverflow.com/questions/20812703/cant-find-org-gradle-api-artifacts-result-resolvedmoduleversionresult-when-appl)


### ３．Main Manifest missing...

自動生成されたbuild.gradleをそのまま使ってビルドを実行するとManifestファイルが見つからないというエラーが発生します。

![スクリーンショット 2014-02-16 12.59.16.png](https://qiita-image-store.s3.amazonaws.com/0/3324/522b88bf-d2aa-46e2-7877-5623a6e5bba9.png)

これはbuild.gradleにManifestファイルのパスを明示的に指定することで解決します。
プロジェクトの構成にもよりますが通常は以下の様な記述をbuild.gradleに追加することで解決します。

```groovy
android {
  sourceSets {
      main {
          manifest.srcFile 'src/main/AndroidManifest.xml'
      }
  }
```

なお、manifest.srcFile以外にもjava.srcDirsやres.srcDirsなどもあわせて設定しておくのが良いと思います。

##### 参考
[Android Studio Manifest Missing Error](http://stackoverflow.com/questions/17096983/android-studio-manifest-missing-error)


## まとめ

Gradleはまだ新しいビルドシステムでIntelliJ IDEAではサポートされたばかりということで初期設定に少しとっつきにくさがありますが、一度設定してしまえば快適に利用することができます。

##### 補足

IntelliJ IDEA 13からサポートされたGradle関連の情報はJetBrainsのブログに紹介されています。
[IntelliJ IDEA 13のAndroidデベロッパにうれしい新機能群の紹介](http://blog.jetbrains.com/jp/2013/12/12/328)