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

山下寛人オフィシャルブログ

オイシックス株式会社 執行役員 システム本部長 山下寛人の公式ブログです。

GroovyでAndroidアプリ

試してみました。
AndroidStudio1.0.2 / groovy 2.4.0 / gradle-groovy-android-plugin 0.3.5
バージョンによって設定方法が微妙に変わるのでよく確認しましょう。

まずAndroidアプリのプロジェクトを新規に作成します。
左の「Gradle Scripts」の中に2つbuild.gradleがあります。上のほうのbuild.gradle(Project: xxx)には1行追加します。dependenciesの中に
classpath 'org.codehaus.groovy:gradle-groovy-android-plugin:0.3.5'
です。
ファイル全体ではこうなります。

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:1.0.0'
        classpath 'org.codehaus.groovy:gradle-groovy-android-plugin:0.3.5'
        // NOTE: Do not place your application dependencies here; they belong         // in the individual module build.gradle files
    }
}

allprojects {
    repositories {
        jcenter()
    }
}
下の方のbuild.gradle(Module: app)には2行追加します。
android{}の下に
apply plugin: 'groovyx.grooid.groovy-android'
dependenciesの中に
compile 'org.codehaus.groovy:groovy:2.4.0:grooid'
です。
ファイル全体では以下のようになります。
apply plugin: 'com.android.application'
android {
    compileSdkVersion 21
    buildToolsVersion "21.1.2"
    defaultConfig {
        applicationId "com.example.h_yamashita.cartgroovy"
        minSdkVersion 15
        targetSdkVersion 21
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}
apply plugin: 'groovyx.grooid.groovy-android'
dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:21.0.3'
    compile 'org.codehaus.groovy:groovy:2.4.0:grooid'
}
勝手にリポジトリからダウンロードしてくれるようです。便利です。
ソースコードはapp/src/main/groovyの下に入れます。拡張子は.groovyです。こちらの記事のサンプルを動かしてみました。

AndroidStudio0.6.1とGroovy2.4-beta-1で、とりあえずGroovyでAndroidアプリを作ってみた。

Androidアプリではパフォーマンスが厳しいので@CompileStaticで静的コンパイルをしたほうがよいという記事がありました。上記のサンプルは動的型付けになっているので@CompileStaticにしてみます。するといろいろコンパイルエラーが出ました。上記のJavaコードを参考に型をちゃんと指定したりキャストして以下のようなコードになりました。


(略)

@CompileStatic
class MainActivity extends ListActivity {

    @Override
    void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState)

        def items = ["Android", "Java", "Groovy", "Gradle"]
        def adapter = new ArrayAdapter<string>(
                this, android.R.layout.simple_list_item_1, items
        )

        listAdapter = adapter
        listView.setOnItemClickListener { AdapterView<?> parent, view, int position, id ->
            String message =((ArrayAdapter<string>)parent.adapter).getItem(position)
            Toast.makeText(this, message, Toast.LENGTH_LONG).show()
        }
    }

}
CompileStaticにすると型チェックが厳しくなってまるで別の言語になったみたいです。でもコード書いている感覚はこちらのほうがSwiftに近いです。