tsurutanのつぶやき

備忘録としてつぶやきます

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 など)

Effective Android

Effective Android

  • 作者: TechBooster,小太刀御禄,出村成和,重田大助,西岡靖代,宮川大輔,柏本和俊,あんざいゆき,八木俊広,木村尭海,小林慎治,有山圭二,中西良明,わかめまさひろ,新井祐一,桝井草介,久郷達也,寺園聖文,shige0501,山下智樹,前田章博,秋葉ちひろ,末広尚義,中澤慧,日高正博,塚田翔也,井形圭介,中川幸哉,山崎誠,山下武志,なまそで,橋爪香織,さとうかずのり,l_b__,ゼロハチネット,長汐祐哉
  • 出版社/メーカー: インプレスジャパン
  • 発売日: 2014/01/17
  • メディア: 単行本(ソフトカバー)
  • この商品を含むブログ (8件) を見る

Reactive Messaging Patterns with the Actor Model: Applications and Integration in Scala and Akka

Reactive Messaging Patterns with the Actor Model: Applications and Integration in Scala and Akka

Learning Reactive Programming with Java 8

Learning Reactive Programming with Java 8