AndroidでJava8を使う(Jackツールチェーン)
Jackツールチェーン
今回はAndroidでJava8を使う方法を紹介したいと思います。 以前までretrolambdaというライブラリーが主流でしたが、Android StudioがアップデートしJackツールチェーンというAndroid StudioでJava8が有効にできる素晴らしいツールが使えるようになり至るところの会社がjackツールチェーンに移行し始めている頃です(多分)。 Jackツールチェーンで扱えるJava8の機能は下記のようになります。
さらにさらに下記のJava8機能のAPIも使えるようになりました。
リフレクションおよび言語関連の API
- java.lang.FunctionalInterface
- java.lang.annotation.Repeatable
- java.lang.reflect.Method.isDefault()
- 以下のような反復アノテーション関連のリフレクション API AnnotatedElement.getAnnotationsByType(Class)
ユーティリティ API
- java.util.function
ただし前のAndroidバージョンでテストをする際は、必ず build.gradle ファイルの compileSdkVersion と targetSdkVersion の値を 23 以下に設定しないといけません。
ちなみにラムダ式を使うと
findViewById(R.id.button).setOnClickListener(new View.setOnClickListener() { @Override public void onClick(View view) { // event } });
これが。。。
findViewById(R.id.button).setOnClickListener(view -> { // event });
こうなります!!最高ですね。
Gradle設定
Jackツールチェーンを有効にするにはapp直下の build.gradle を下記のように書き直します。
android { ... defaultConfig { ... jackOptions { enabled true } } compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } }
以上です!
既知の問題
残念ながらJackチェーンツールにも問題点があります。 Android Studio 2.0(ベータ版)で導入された Instant Run は、現段階では Jack と併用できません。そのため新しいツールチェーンの使用中は、Instant Run が無効になります。
Jack はアプリのコンパイル中に中間クラスファイルを生成しないため、中間ファイルに依存する以下のようなツールは現在 Jack と併用できません。
- クラスファイルに作用する Lint Detector
- アプリのクラスファイルを必要とするツールやライブラリ(JaCoCo や Mockito など)
- 作者: TechBooster,小太刀御禄,出村成和,重田大助,西岡靖代,宮川大輔,柏本和俊,あんざいゆき,八木俊広,木村尭海,小林慎治,有山圭二,中西良明,わかめまさひろ,新井祐一,桝井草介,久郷達也,寺園聖文,shige0501,山下智樹,前田章博,秋葉ちひろ,末広尚義,中澤慧,日高正博,塚田翔也,井形圭介,中川幸哉,山崎誠,山下武志,なまそで,橋爪香織,さとうかずのり,l_b__,ゼロハチネット,長汐祐哉
- 出版社/メーカー: インプレスジャパン
- 発売日: 2014/01/17
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (8件) を見る
Reactive Messaging Patterns with the Actor Model: Applications and Integration in Scala and Akka
- 作者: Vaughn Vernon
- 出版社/メーカー: Addison-Wesley Professional
- 発売日: 2015/07/13
- メディア: Kindle版
- この商品を含むブログを見る
Learning Reactive Programming with Java 8
- 作者: Nickolay Tsvetinov
- 出版社/メーカー: Packt Publishing
- 発売日: 2015/06/24
- メディア: Kindle版
- この商品を含むブログ (1件) を見る