Android Studio 切换到新的 D8 编译器

  • Sergio De Simone
  • 谢丽

2018 年 4 月 17 日

话题:移动GoogleAndroid语言 & 开发

看新闻很累?看技术新闻更累?试试下载 InfoQ 手机客户端,每天上下班路上听新闻,有趣还有料!

据谷歌软件工程师 Jeffrey van Gogh 介绍,近日发布的Android Studio 3.1切换到了一个新的DEX 编译器,旨在提供更好、更快的编译。

除了速度更快之外,新编译器 D8 据称与之前的 DX 编译器相比有着同等或更好的运行时性能。

把.class 字节码转换成.dex 字节码,是 Android 运行时构建 Android 应用时的必要步骤,直接影响整体构建时间和 App 性能。谷歌通过自己的基准测试项目测出,编译时间缩短了 20%,而且.dex 文件更小,虽然只有几个百分比。这些结果应该要打个折扣,因为它们是基于单一的框架。实际上,有用户已经报告,他们在 Android Studio 3.0 中使用 D8 时编译时间增加了。

除了其他好处外,使用 D8 还有一个好处,就是支持脱糖,让 Java 8 才提供的特性(如 lambdas)可以转换成 Java 7 特性。把脱糖步骤集成进 D8 影响了所有读或写.class 字节码的开发工具,因为它会使用 Java 8 格式。你可以在 gradle 文件中设置一个属性,恢复到以前的行为,让脱糖发生在 Java 编译之后,.class 字节码仍遵循 Java 7 格式:

android.enableD8.desugaring = true

如果你在使用 D8 时遇到了任何一般性问题,你可以通过修改 gradle.properties 文件里的一个属性恢复到 DX,如下所示:

android.enableD8=false

虽然 D8 现在是 Android Studio 的默认编译器,但那不是说开发人员要忙着迁移他们的 App。事实上,在谷歌可以确信 D8 不会导致任何用户的退化之前,旧的 DX 编译器将一直可用。也就是说,至少在六个月内,谷歌将继续修复在 DX 中发现的 Bug。在第一阶段,谷歌工程师将密切监控 D8 Bug 追踪器,查找任何可能影响迁移计划的问题。在六个月没有重大退化之后,谷歌还将保留 DX 至少一年,以确保任何开发团队都有足够的时间迁移。此后,将只有旧版本的 Android Studio 提供 DX。

查看英文原文Android Studio Switched to New D8 Compiler

移动GoogleAndroid语言 & 开发