Android Studio 3.3がリリースされたのに今更感がありますが、AndroidでGradle Plugin 3.2.0からD8のDesugaringがデフォルト有効になっています。
そこで改めて、dexコンパイラのDXとD8それぞれでdesugarする場合にどのようにAPKが生成されるかを簡単にまとめました。
公式ページは以下の通りです。
gradle.properties
は意図的に表現しています。
実際はCompatibility
の指定やGradle Plugin
のバージョンによってデフォルト値が以下のように決まっています。
android.enableDesugar = true // Compatibility で Java8 を指定していればデフォルトtrue
android.enableD8 = true // Gradle Plugin 3.1.0 以降であればデフォルトtrue
android.enableD8.desugaring = true // Gradle Plugin 3.2.0 以降であればデフォルトtrue
DXでJava7を使う場合
android {
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_7
targetCompatibility JavaVersion.VERSION_1_7
}
}
android.enableDesugar = false
android.enableD8 = false
DXでJava8を使う場合
android {
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}
android.enableDesugar = true
android.enableD8 = false
D8でJava8を使う場合(Desugaring in D8がOFF)
android {
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}
android.enableDesugar = true
android.enableD8 = true
android.enableD8.desugaring = false
D8でJava8を使う場合(Desugaring in D8がON)
android {
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}
android.enableDesugar = true
android.enableD8 = true
android.enableD8.desugaring = true
まとめ
この辺は普段はあまり意識してなかったんですが、ちょっと調べる機会があったのでまとめてみました。
もしおかしなところがあれば、コメントいただけると幸いですm(_ _)m
dexコンパイラもDXからD8になって高速化し、生成されるdexファイルも軽量化されているようです。さらにDesugaring in D8により、効率的なビルドができるようになっているようです。
しかし、アプリを作っているとどんどん機能追加もされ、ファイル数も多くなりビルド時間はさらに長くなっていきがちです・・・。
こういったサポートはかなりうれしいですが、それだけでなく日々の開発でもビルド時間は意識して、自分たちで改善をしていく必要があると改めて感じます。