GroovyでAndroidアプリを作る

2014年 8月23日 Groovy Android

GroovyがAndroid上で実行可能にということで、GroovyでAndroidアプリが作れるようなので試してみました。
Groovy 2.4のベータ版から公式にサポートされるとのことです。



Groovy 2.4のインストール

まずはGroovy 2.4のインストールです。
gvmにbeta2があったのでインストールします。

$ gvm list groovy
================================================================================
Available Groovy Versions
================================================================================
     2.4.0-beta-2         2.1.5                1.8.9                1.7.4          
 > * 2.3.6                2.1.4                1.8.8                1.7.3          
     2.3.5                2.1.3                1.8.7                1.7.2          
     2.3.4                2.1.2                1.8.6                1.7.11         
     2.3.3                2.1.1                1.8.5                1.7.10         
     2.3.2                2.1.0                1.8.4                1.7.1          
     2.3.1                2.0.8                1.8.3                1.7.0          
     2.3.0                2.0.7                1.8.2                1.6.9          
     2.2.2                2.0.6                1.8.1                1.6.8          
     2.2.1                2.0.5                1.8.0                1.6.7          
     2.2.0                2.0.4                1.7.9                1.6.6          
     2.1.9                2.0.3                1.7.8                1.6.5          
     2.1.8                2.0.2                1.7.7                1.6.4          
     2.1.7                2.0.1                1.7.6                1.6.3          
     2.1.6                2.0.0                1.7.5                1.6.2          
 
================================================================================
+ - local version
* - installed
> - currently in use
================================================================================
$ gvm install groovy 2.4.0-beta-2
Downloading: groovy 2.4.0-beta-2
 
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
  0     0    0     0    0     0      0      0 --:--:--  0:00:01 --:--:--     0
100 32.0M  100 32.0M    0     0   450k      0  0:01:12  0:01:12 --:--:--  729k
 
Installing: groovy 2.4.0-beta-2
Done installing!
 
Do you want groovy 2.4.0-beta-2 to be set as default? (Y/n): Y
 
Setting groovy 2.4.0-beta-2 as default.

Gradle Android Pluginの適用

Android Studioで適当にプロジェクトを作成します。
その後、GradleにGroovy Android Pluginを適用します。
現時点での最新版は0.3.0なので、それを適用します。

gradle
// Top-level build file where you can add configuration options common to all sub-projects/modules.
 
buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:0.12.2'
        classpath 'me.champeau.gradle:gradle-groovy-android-plugin:0.3.0'   // 追加
    }
}
 
allprojects {
    repositories {
        jcenter()
    }
}
gradle
// App-level build file
 
apply plugin: 'com.android.application'
 
android {
    compileSdkVersion 20
    buildToolsVersion "20.0.0"
 
    defaultConfig {
        applicationId "com.misfrog.androidgroovy"
        minSdkVersion 19
        targetSdkVersion 20
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            runProguard false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}
 
apply plugin: 'me.champeau.gradle.groovy-android'   // 追加
 
dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'org.codehaus.groovy:groovy:2.4.0-beta-2:grooid'   // 追加
}

ActivityをGroovyにしてみる

プロジェクトのWizardで適当につくったActivity(MyActivity.java)をMyActivity.groovyにします。
でSettingsメニューを選択した際に”Hello Groovy!”と表示する部分をクロージャで書いてみます。

groovy
package com.misfrog.androidgroovy;
 
import android.app.Activity;
import android.os.Bundle
import android.view.Gravity;
import android.view.Menu;
import android.view.MenuItem
import android.widget.Toast
import groovy.transform.CompileStatic;
 
@CompileStatic
public class MyActivity extends Activity {
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_my);
    }
 
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.my, menu);
        return true;
    }
 
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();
        if (id == R.id.action_settings) {
            def hello = { lang ->
                def toast = Toast.makeText(this, "Hello ${lang}!", Toast.LENGTH_LONG)
                toast.setGravity(Gravity.CENTER, 0, 0)
                toast.show()
            }
            hello("Groovy")
            return true;
        }
        return super.onOptionsItemSelected(item);
    }
}

@CompileStaticアノテーションで静的コンパイルしなくてもいけるようですが、
動的コードはパフォーマンス的にきびしいので@CompileStatic推奨のようです。

実行

いけました!

Java8が使えないAndroid開発はGroovyを使うとちょっと楽しくなるかもしれない。

コードをGithubに置きました。



前へ 次へ