Android新Dex编译器D8与新混淆工具R8

.class自己码转化为.dex字节码作为Apk打包的关键步骤,Google打算在Android 3.0中引入D8作为原先Dex的升级版,以及R8作为原本Proguard 压缩与优化(minification、shrinking、optimization)部分的替代品。

I. D8

D8目前还在preview阶段,不过Google Android团队测试了多款应用结果都是很不错的,预计会在接下来的几个月中对其进行Release,如果你使用中有遇到任何问题可以到这里给他们提。

1. D8优化部分

其实单就优化dex的文件大小与运行时性能,最出名的开源解决方案应该是Facebook的redex

  • Dex编译时间更短
  • .dex文件大小更小
  • D8编译的.dex文件将拥有相同或者是更好的运行时性能

Java 8支持相关

目前Java 8语言支持的处理是在javac之后,与字节码处理工具处理之前。在接下来的几个月,这个步骤将会被移动到pipeline的后一个阶段,作为D8的一部分。

其带来的影响:

  1. 减少这块的编译时间
  2. 可以优化更多代码
  3. 这么一来,所有字节码处理工具就必须要支持Java8的字节码格式了。

测试数据

根据Google Android团队对这个项目进行分别使用Dex与D8的测试数据:


2. D8的使用

已经在Android Studio 3.0 Beta release中引入

Android Studio 3.0

需要主动在gradle.properties文件中新增:

1
android.enableD8=true

Android Studio 3.1或之后的版本

在3.1或之后的版本D8将会被作为默认的Dex编译器。

II. R8

R8作为原本Proguard 压缩与优化(minification、shrinking、optimization)部分的替代品,依然使用与Proguard一样的keep规则。

目前R8已经开源: r8/r8,其包含了D8与R8。

目前R8还没有整合进Android Gradle plugin,不过由于其已经开源,根据文档可以很快的在python环境下运行起来:

  1. 确保本地已经安装了python 2.7或更高版本(macOS Sierra自带python 2.7)。
  2. 由于R8项目使用chromium项目提供的depot_tools管理依赖,因此先安装depot_tools
  3. Clone R8项目:git clone https://r8.googlesource.com/r8 && cd r8
  4. 下载一个Gradle版去编译,并且声称两个jar文件: build/libs/d8.jarbuild/libs/r8.jar: python tools/gradle.py d8 r8
  5. 根据r8文档进行使用即可

Jacksgong wechat
欢迎关注Jacks Blog公众号,第一时间接收原创技术沉淀干货。