Groovy 2.4でAndroidのサポートが始まったので、練習がてら卓球ハウスの在宅APIを閲覧できるアプリを作りました。
ソースコードはGitHubに公開しています。
Groovyで書いてみてどうか
Jsonの扱いが楽
基本的にGroovyで書けるのは便利で、例えばAndroidでjsonをパースする時はJavaだとJsonObjectを使って手動パースしたり、あるいはGsonとかJacksonを使う事が多いと思いますが、GroovyはJsonの読み書きをネイティブサポートしているので、例えばこんな感じで柔軟に処理する事ができます。ただ、JsonSlurper#parseTextのreturnはObject型なのでIDEの恩恵が受けられなくなるのがちょっと不便でした。
package tqkey.android.events
import groovy.json.JsonSlurper
import tqkey.android.entity.User
class SuccessCallApiEvent {
List<User> users
SuccessCallApiEvent(String content) {
users = new ArrayList<User>()
new JsonSlurper().parseText(content).users.each {
users.add(new User(it))
}
}
}
Injection系のライブラリが使えない
ButterKnifeとかアノテーションプロセッサを利用できないのが結構不便です。只、JavaとGroovyを混在させる事ができるので必要に応じて使い分けるのが良いのかもしれません。試していませんが。
後、変数やメソッドのシグニチャで型宣言をしないと色々IDEの恩恵が受けられなかったり、publicを省略したりする(defaultでpublic)事もできるのですが、万が一拡張子を変更する時に修正する所が増えるので、そこら辺も考えて必要に応じてGroovyのシンタックスで書く、というスタイルが良いのではないかと思いました。
gradle-groovy-android-plugin
GroovyでAndroidを利用する為にはbuild.gradleにゴニョゴニョおまじないを書く必要がありますが、既にgradle-groovy-android-pluginという便利プラグインが公開されているので、こちらを利用するのがいいと思います。
build.gradle
にこんな感じで追記します。oss.jfrog.org
にGroovy 2.4.0-SNAPSHOTがホストされているのでそっちを使うとローカルでビルドしなくて良くて便利です。
buildscript {
repositories {
mavenCentral()
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:0.11.+'
classpath 'me.champeau.gradle:gradle-groovy-android-plugin:0.1'
}
}
allprojects {
repositories {
mavenCentral()
maven {
url='https://oss.jfrog.org/oss-snapshot-local/'
}
}
}
apply plugin: 'groovy-android'
Android Studioを0.6.0にアップデートするとandroid plugin 0.11+が必須になってver:0.1が利用できなくなったのですが、先程対応済の0.0.2が公開されたようです。
Release 0.2 of the #groovylang plugin for #android is out, supporting #android plugin 0.11+ http://t.co/oVlixlGEgS /cc @pledbrook
— Cédric Champeau (@CedricChampeau) 2014, 6月 8