読者の皆様へ: 皆様のご要望にお応えするべく、ノイズを削減する機能セットを開発しました。皆様が関心をお持ちのトピックを、EメールとWeb通知で受け取ることができます。新機能をぜひお試しください。
先日リリースされたAndroid Studio 3.1では、コンパイル処理が改良および高速化されたDEXコンパイラが新たに採用されている、とGoogleのソフトウェアエンジニアであるjeffrey van Gogh氏が記している。
高速化に加えて、D8と呼ばれる新コンパイラは、従来のコンパイラであるDXに比較して、同等あるいはそれ以上の実行時パフォーマンスを発揮する。
Androidにおける.class
バイトコードから.dex
バイトコードへの変換は、Androidアプリ構築における重要なステップであり、ビルド時間およびアプリのパフォーマンスに直接影響する。独自のベンチマークプロジェクトを使ってGoogleが両方のコンパイル時間を測定した結果では、20パーセント速く、しかもサイズが数パーセント小さな.dex
ファイルが生成された。ただし、この結果は単一のベンチマークに基づいたものであるため、割り引いて捉える必要がある。実際に一部のユーザは、Android Studio 3.0からD8を使用することでコンパイル時間が長くなったと報告している。
D8を使用することによるメリットのひとつがデシュガー(desugaring)、すなわち、lambdaなどJava 8のみで使用可能な機能を、Java 7の機能に変換できることである。デシュガーステップをD8に統合したことは、Java 8フォーマットを使用する.class
バイトコードの読み書きを行うツールの開発者すべてに影響する。gradleファイルにプロパティを設定すれば、デシュガーがJavaコンパイル後に実行され、.class
バイトコードがJava 7フォーマットに従うという、以前の動作に戻すことができる。
android.enableD8.desugaring = true
D8を使用して全体的な問題が発生した場合は、以下に示すように、gradle.properties
の設定を変えることで、DXに戻すことも可能だ。
android.enableD8=false
D8がAndroid Studioのデフォルトコンパイラになったという事実は、開発者がアプリの移行を急がなければならないという意味ではない。事実として、D8がどのユーザに対してもレグレッションを起こさないという十分な確信をGoogleが得るまでは、旧DXコンパイラも引き続き残される予定である。これはつまり、Googleが少なくとも今後6ヶ月間、DXで見つかったバグの修正を続けるという意味だ。Googleのエンジニア達は今回の第1段階において、マイグレーション計画を実施する上で致命的になる可能性のある問題を見つけるために、D8のバグトラッカを慎重にモニタする予定である。大規模なレグレッションのない状況が6ヶ月間続いた後、開発チームがマイグレーションに十分な時間を確保できるように、少なくとも1年間はDXが利用可能な状態を維持する。その後DXは、Android Studioの旧バージョンでのみ利用可能となる。
この記事を評価
- 編集者評
- 編集長アクション