groovyでAndroidアプリが書けるようになったらしいので早速触ってみた。
環境
- Android Studio 0.5.9
- Android SDK Tools 22.6.3
- Android SDK Platform-tools 19.0.2
- Android SDK Build-tools 19.1
- groovy-2.4.0-SNAPSHOT-grooid
- gradle 1.11
- gradle plugin 0.9.+
ビルド
参考のリポジトリにはjcenter()からgroovy-2.4.0-SNAPSHOT-grooid.jarを取得していますが、not foundになっていました。
http://jcenter.bintray.com/org/codehaus/groovy/groovy-json/2.4.0-SNAPSHOT/groovy-json-2.4.0-SNAPSHOT.jar
http://jcenter.bintray.com/org/codehaus/groovy/groovy/2.4.0-SNAPSHOT/groovy-2.4.0-SNAPSHOT-grooid.jar
groovy-coreのコードをGitHubから取得してビルドします。
$ git clone https://github.com/groovy/groovy-core
$ cd groovy-core
$ ./gradlew clean dist
...
$ ls ./target/libs/
groovy-2.4.0-SNAPSHOT-grooid.jar groovy-all-2.4.0-SNAPSHOT-indy.jar
groovy-2.4.0-SNAPSHOT-indy.jar groovy-all-2.4.0-SNAPSHOT.jar
groovy-2.4.0-SNAPSHOT.jar
./target/libs
以下にjarが生成されます。
groovy-2.4.0-SNAPSHOT-grooid.jar
をlibs
に入れbuild.gradle
に*.groovyをコンパイルするtaskを追記してAndroidプロジェクトをビルドします。
android.applicationVariants.all {
task "groovy${name}Compile"(type: GroovyCompile) {
source = javaCompile.source + fileTree('src/main/java').include('**/*.groovy')
destinationDir = javaCompile.destinationDir
classpath = javaCompile.classpath
groovyClasspath = classpath
sourceCompatibility = '1.6'
targetCompatibility = '1.6'
doFirst {
def runtimeJars = plugins.findPlugin(com.android.build.gradle.AppPlugin).runtimeJars
classpath = files(runtimeJars) + classpath
}
}
javaCompile.dependsOn("groovy${name}Compile")
javaCompile.enabled = false
}
ちなみにgradle 1.11で gradle plugin 0.9.+でないとAndroidアプリのビルドが通りませんでした。
サンプルコード
おまけ
Javaとgroovyで書いてdebug buildしたアプリをbaksmaliにかけてsmaliにしたものです。
https://gist.github.com/epy0n0ff/ea658a4b2b879784428d
参考
https://github.com/melix/gr8confagenda
https://speakerdeck.com/melix/groovy-on-android