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の記述もこれに併せて直せば動きそう。
動いた!