LoginSignup
1
0

More than 3 years have passed since last update.

Java 8+ API desugaring メモ

Last updated at Posted at 2020-07-19

はじめに

Java 8+ API desugaring1 のメモです。

概要

◆ 特徴

minSdkVersion 的に非対応の Java 8 の機能を使えるようにします。

例えば、API 26 から追加された DateTimeFormatter が、API 25 以下の端末上でも利用できるようになります。

// SimpleDateFormat はスレッドセーフではないので何とかしたい
SimpleDateFormat("yyyy-MM-dd", Locale.US)
// DateTimeFormatter を使えばスレッドセーフになる
//     → だけど API 26 からしか使えない、、、
//         → そうだ、desugaring があるじゃないか!
DateTimeFormatter.ofPattern("yyyy-MM-dd", Locale.US)

◆ desugaring 前

minSdkVersion 的に非対応の Java 8 の機能を使用すると、Android Studio 上では警告が表示されます。

device-2020-07-19-194252.png

ビルドは実行できますが、当該ライブラリが含まれない端末では実行時にエラーとなります。

device-2020-07-19-194252.png

◆ desugaring 後

ビルドも実行もでき、当該ライブラリが含まれない端末での実行も問題なく行うことができます。

device-2020-07-19-194252.png

条件

Android Gradle Plugin 4.0.0 以降

対象API

java.time, java.util.Optional, ConcurrentHashMap(bug fix 済み) など

設定

minSdkVersion > 20 の場合

android {
    compileOptions {
        coreLibraryDesugaringEnabled true
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
}
dependencies {
    coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.0.9'
}

minSdkVersion <= 20 の場合

android {
  defaultConfig {
    // Required when setting minSdkVersion to 20 or lower
    multiDexEnabled true
  }

  compileOptions {
    coreLibraryDesugaringEnabled true
    sourceCompatibility JavaVersion.VERSION_1_8
    targetCompatibility JavaVersion.VERSION_1_8
  }
}

dependencies {
  coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.0.9'
}
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0