LoginSignup
9
4

More than 5 years have passed since last update.

Android dexコンパイラ と desugar

Posted at

Android Studio 3.3がリリースされたのに今更感がありますが、AndroidでGradle Plugin 3.2.0からD8のDesugaringがデフォルト有効になっています。
そこで改めて、dexコンパイラのDXとD8それぞれでdesugarする場合にどのようにAPKが生成されるかを簡単にまとめました。

公式ページは以下の通りです。

gradle.propertiesは意図的に表現しています。
実際はCompatibilityの指定やGradle Pluginのバージョンによってデフォルト値が以下のように決まっています。

gradle.properties
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を使う場合

app/build.gradle
android {
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_7
        targetCompatibility JavaVersion.VERSION_1_7
    }
}
gradle.properties
android.enableDesugar = false
android.enableD8 = false

DX & Java7.png

DXでJava8を使う場合

app/build.gradle
android {
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
}
gradle.properties
android.enableDesugar = true
android.enableD8 = false

DX & Java8.png

D8でJava8を使う場合(Desugaring in D8がOFF)

app/build.gradle
android {
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
}
gradle.properties
android.enableDesugar = true
android.enableD8 = true
android.enableD8.desugaring = false

D8 & Java8.png

D8でJava8を使う場合(Desugaring in D8がON)

app/build.gradle
android {
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
}
gradle.properties
android.enableDesugar = true
android.enableD8 = true
android.enableD8.desugaring = true

Desugaring in D8 & Java8.png

まとめ

この辺は普段はあまり意識してなかったんですが、ちょっと調べる機会があったのでまとめてみました。
もしおかしなところがあれば、コメントいただけると幸いですm(_ _)m

dexコンパイラもDXからD8になって高速化し、生成されるdexファイルも軽量化されているようです。さらにDesugaring in D8により、効率的なビルドができるようになっているようです。

しかし、アプリを作っているとどんどん機能追加もされ、ファイル数も多くなりビルド時間はさらに長くなっていきがちです・・・。
こういったサポートはかなりうれしいですが、それだけでなく日々の開発でもビルド時間は意識して、自分たちで改善をしていく必要があると改めて感じます。

9
4
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
9
4