快来体验一下新一代 Dex 编译器吧

Android 应用开发者们都知道 Dex 编译是 Apk 构建过程中是很关键的一步,这个过程是将 .class 的字节码转换为 Android 运行时(Android Runtime)所需 的 .dex 字节码(或用于旧版 Android 的 Dalvik 虚拟机)的过程。 Dex 编译器主要在日常应用程序开发中起作用,但它直接影响到应用程序的构建时间、.dex 文件大小和运行时性能。这也就是 Android 开发团队为什么要在 Dex 编译器上花费大量精力进行重要改进原因。现在新一代 Dex 编译器 D8 已经随着 Android Studio 3.0 测试版一同发布了。

与当前的 Dex 编译器进行比较,D8 编译速度更快,并且最后输出的 .dex 文件也更小了,同时兼具更好的应用程序运行时性能。D8 编译器的相关测试如下图:

Dex 编译时间测试

Dex 文件大小对比:DX vs D8

那么怎么才能使用 D8 编译器呢?D8 编译器已经随着 Android Studio 3.0 测试版一起发布了,要使用 D8 编译器很简单,只需要在项目的 gradle.properties 文件中开启如下设置即可:android.enableD8=true。在未来的几个月内 D8 编译器的预览版会随着 Android Studio 3.0 版一起发布。在这期间 Android 开发团队会中断解决从社区收到的任何错误报告。Android 开发团队计划在 Android Studio 3.1 版本的时候结束 D8 的预览版并将其作为默认的 Dex 编译器,之后 DX 编译器将进入日常维护模式并只修复一些较为严重的 Bug。

除了 D8 编译之外,Android 开发团队也在开发一个名为 R8的 Proguard 的替代品,目前 R8 已经开源但还木有集成进 Android Gradle 插件里,但是已经向社区提供了预览版,再过段时间 Android 开发团队将会公布 R8 的更多详细信息。

而对于工具开发者而言要做好让字节码工具迎接 Java 8 的准备,4月份的时候 Android 开发团队宣布推出解析 Java 8 语言特性语法糖的功能。 这个过程会发生在Java编译(javac)之后,以及任何字节码读取或重写工具之前。 作为 D8 的一部分,在接下来的几个月中,这个过程将被移入整个流程的最后一步执行。 这将使我们能够进一步缩短整体构建时间并生成更优化的代码。 这种改变意味着任何字节码读取或重写工具都将在最后一步之前执行解析 Java 8 语言特性语法糖的步骤。 如果你为Android 开发了.class 字节码读取或重写工具,则需要确保在 D8 内执行解析 Java 8 语言特性语法糖时,它们可以正确的处理 Java 8 字节码的格式。

一些有用的 Link

  1. 测试基准项目
  2. Android Studio Beta
  3. D8 相关问题反馈

编译:谷饭  原文:Android Developers Blog 配图:Android Developers Blog

分享到
label, , , ,

About the author

Add a Comment

电子邮件地址不会被公开。 必填项已用*标注