Android 开发者都知道,Dex 编译是 APK 构建过程中非常关键的一步。在此编译过程中,将 .class 字节码转换为用于 Android 运行时(对于较早版本的 Android,则是用于 Dalvik)的 .dex 字节码。在您的日常应用开发过程中,Dex 编译器大多在后台运行,但它会直接影响应用的构建时间、.dex 文件的大小和运行时性能。
正因如此,我们投入大量精力,对 Dex 编译器做出了一些重要的改进。我们很兴奋地宣布:作为 Android Studio 3.0 测试版的一部分,下一代 Dex 编译器 D8 现已开放预览。
与当前 DX 编译器相比,D8 的编译速度更快,输出的 .dex 文件更小,同时却能保持相同乃至更出色的应用运行时性能。
何不试一下?
D8 预览版将随 Android Studio 3.0 测试版一起开始提供。要试用此预览版,您可以在项目的 gradle.properties 文件中进行以下设置:
android.enableD8=true
我们在许多应用上测试了 D8 的正确性和性能,结果鼓舞人心。我们有足够的信心,相信我们改用 D8 作为构建 AOSP 的默认 Dex 编译器会取得成功。
后续计划
我们计划在未来几个月内随 Android Studio 3.0 版一起开放 D8 预览。在此期间,我们将重点解决我们从社区收到的任何关键错误报告。我们计划在 Android Studio 3.1 中结束 D8 预览并将其作为默认 Dex 编译器。届时,DX 编译器将正式进入维护模式。此后,将只修复 DX 的关键问题。
除 D8 之外,我们还在开发 R8,后者用于取代 Proguard 对整个程序进行精简和优化。尽管 R8 项目已经开放源代码:
https://r8.googlesource.com/r8
但目前尚未集成到 Android Gradle 插件中。不久之后,当我们准备面向社区开放 R8 预览时,我们将提供更多相关详情。
4 月,我们宣布推出 Java 8 语言脱糖功能。目前,在 Java 编译 (javac) 之后,在运行任何字节码读取或重写工具之前,会立即执行脱糖步骤。未来两个月,脱糖步骤将会作为 D8 的一部分,移到整个管道后面一个阶段中。这样,我们将可以进一步缩短总体构建时间并生成更优化的代码。这一变更意味着任何字节码或重写工具将在脱糖步骤之前执行。
如果您在开发用于 Android 的 .class 字节码读取或重写工具,您将需要确保它们能够处理 Java 8 字节码格式,以便在我们将脱糖步骤移入 D8 之后,它们仍可继续正确工作。