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

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をインストールしてください。

Java8
コンソールでJava8がインストールされていることを確認します。
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
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
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を解除します。

以上で準備は完了です。
setOnClickListenerのJava8化
例として、ボタンのクリック処理で利用するsetOnClickListenerをJava8に置き換えてみます。
Before
Button async_subject = (Button) findViewById(R.id.async_subject); async_subject.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { moveAsyncSubjectActivity(); } });
以下のように変更します。
After
Button async_subject = (Button) findViewById(R.id.async_subject); async_subject.setOnClickListener(view -> { moveAsyncSubjectActivity(); });
コンパイルして同じように動くことを確認しましょう。
まとめ
ようやくAndroidでもJava8が利用できるようになりました。
Instant Runが利用できないのが不便ですが、そのうち解決されるはずなので軽量なアプリなら導入して良いでしょう。
もうすぐJava9もリリースされます。文字列のCGが大きく改善されているようなので、こちらの対応もなるべく早くして欲しいですね。