看新闻很累?看技术新闻更累?试试下载 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。
评论