読者です 読者をやめる 読者になる 読者になる

Android Studio 0.6.0 で Groovy on Android

GroovyでAndroidアプリ書けるようになってうれしいですね! 以下の記事を参考に動かしてみたらすぐに動きました!
AndroidStudio - groovyでAndroidアプリを開発 - Qiita

Android Studio を0.6.0にバージョンアップするまでは・・・。

0.6.0にバージョンアップするとビルドできなくなりました。


2014/6/29追記
Android Studio0.6.0に対応したGradleプラグインmelix/groovy-android-gradle-plugin · GitHub)があったので、そちらを利用すればandroid.applicationVariants.allブロックの記述が不要になるので、下記に書いた対応は不要です。
ちなみにGithubのREADMEにはapply plugin: 'me.champeau.gradle.groovy-android'と記述するように書いてありますが、書くとうまくいかず書かなければちゃんとビルドできました。
追記ここまで。


対応としては、PROJECT_ROOT/app/build.gradle の以下の箇所を

def runtimeJars = plugins.findPlugin(com.android.build.gradle.AppPlugin).runtimeJars
classpath = files(runtimeJars) + classpath

以下のように書き換えれば動きました。

def androidBuilder = plugins.findPlugin(com.android.build.gradle.AppPlugin).androidBuilder
classpath = files(androidBuilder.getBootClasspath().join(File.pathSeparator)) + classpath

よかったよかった。正しいやり方かどうか分からないけど、そのうち正式にどこかで公開されるのかな。

以下メモ

以下は調べた内容です。

Android Studioのバージョンを0.6.0に上げると、PROJECT_ROOT/build.gradleのcom.android.tools.build:gradleを"0.9.0+"から"0.11.0+"に書き換えて上げる必要があった。
0.11.0ではPROJECT_ROOT/app/build.gradleの以下の記述がエラーとなる。

def runtimeJars = plugins.findPlugin(com.android.build.gradle.AppPlugin).runtimeJars

エラーメッセージを見るとruntimeJarsプロパティがないよ、と言ってる。

Error:(30) Execution failed for task ':app:groovydebugCompile'.
> No such property: runtimeJars for class: com.android.build.gradle.AppPlugin

実際にソースコードを見てみることに。Macの場合、Gradleがダウンロードしたやつらは~/.gradle/caches/modules-2/files-2.1配下にある。

たしかに、0.9.2の場合は、AppPluginの親クラスであるBasePluginにgetRuntimeJars()っていうメソッドが定義されてる。0.11.0にはない!

getRuntimeJarsってどこで使われるんだろう、と思いソースコード読んでると以下のように使われてた。

// 0.9.2
compileTask.doFirst {
  compileTask.options.bootClasspath = getRuntimeJars()
}

じゃあ、0.11.0はどうなってるか。

// 0.11.0
compileTask.doFirst {
  compileTask.options.bootClasspath = androidBuilder.getBootClasspath().join(File.pathSeparator)
}

これ以上は深追いしてないけど、PROJECT_HOME/app/build.gradleの記述もこれに併せて直せば動きそう。

動いた!