Androidアプリ開発 Java8 AndroidアプリをJava8で開発する

2016年09月04日(編集2016年09月04日)
このエントリーをはてなブックマークに追加

Androidアプリ開発で、sdk24からJava8が利用できるようになりました。
この記事は、AndroidアプリでJava8を利用する方法を記載した記事です。

環境はAndroid 7.0 (API level 24) です。

環境

  • OS X Yosemite
  • Oracle jdk version 1.8.0_72
  • Android Studio 2.1.3
  • android sdk 24

Java8

Java8はJava7で利用できないラムダ式やストリーム処理等の便利な機能が利用できます。
これらの機能により、バグが少ない短いコードを書くことができます。

sdk 24

Java8を使う場合は、sdk 24が必要です。
Java8の他にsdk 24をインストールしてください。

sdk24

Java8

コンソールでJava8がインストールされていることを確認します。

terminal
java -version
java version "1.8.0_72"
Java(TM) SE Runtime Environment (build 1.8.0_72-b15)
Java HotSpot(TM) 64-Bit Server VM (build 25.72-b15, mixed mode)
        

build.gradle

Java8の利用は、build.gradleの設定が必要です。
利用しないbuild.gradleは以下のようになります。

Before

{project_folder}/app/build.gradle
apply plugin: 'com.android.application'

android {
    compileSdkVersion 24
    buildToolsVersion "24.0.2"

    defaultConfig {
        applicationId "java_lang_programming.com.android_reactivex_demo"
        minSdkVersion 16
        targetSdkVersion 24
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}
        

Java8を使えるよう、以下のように修正します。

After

{project_folder}/app/build.gradle
apply plugin: 'com.android.application'

android {
    compileSdkVersion 24
    buildToolsVersion "24.0.2"

    defaultConfig {
        applicationId "java_lang_programming.com.android_reactivex_demo"
        minSdkVersion 16
        targetSdkVersion 24
        versionCode 1
        versionName "1.0"
        +jackOptions {
            enabled true
        }
    }
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}
        

変更後は、Build Rebuild Projectでビルドを実行します。
設定がうまくいっていれば、正常にビルドが終了します。

Instant Run

java8のためにDSL method jackOptionsを利用すると、Instant Runは使えなくなります。なので、Instant Runを解除します。

disable Instant Run

以上で準備は完了です。

setOnClickListenerのJava8化

例として、ボタンのクリック処理で利用するsetOnClickListenerをJava8に置き換えてみます。

Before

{project_folder}/ui/SampleActivity.java
        Button async_subject = (Button) findViewById(R.id.async_subject);
        async_subject.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                moveAsyncSubjectActivity();
            }
        });
        

以下のように変更します。

After

{project_folder}/Application.mk
        Button async_subject = (Button) findViewById(R.id.async_subject);
        async_subject.setOnClickListener(view -> {
            moveAsyncSubjectActivity();
        });
        

コンパイルして同じように動くことを確認しましょう。

まとめ

ようやくAndroidでもJava8が利用できるようになりました。
Instant Runが利用できないのが不便ですが、そのうち解決されるはずなので軽量なアプリなら導入して良いでしょう。

もうすぐJava9もリリースされます。文字列のCGが大きく改善されているようなので、こちらの対応もなるべく早くして欲しいですね。

関連記事

タグ検索で調べてみよう

Android7.0 Java8 Android Studio