Android开发Android开发经验谈Android技术知识

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

2018-07-19  本文已影响33人  Jamin_正宗红罐辣酱

〇.序

将.class自己码转化为.dex字节码作为Apk打包的关键步骤,Google打算在Android 3.0中引入D8作为原先Dex的升级版,以及R8作为原本Proguard 压缩与优化(minification、shrinking、optimization)部分的替代品。升级Dex编译器将直接影响构建时间,.dex文件大小,运行时性能。

一.D8

1.1 D8 的功能是把java字节码转化成dex代码,D8作为DX的一个替换方案。

谷歌通过自己的 基准测试项目测出,编译时间缩短了20%,而且.dex文件更小,虽然只有几个百分比。D8编译的.dex文件将拥有相同或者是更好的运行时性能。

Dex编译时间 DX VS D8 dex文件大小 DX VS D8

Java 8支持相关

Android Studio 3.0 及以上版本支持所有 Java 7 语言功能,以及部分 Java 8 语言功能(具体因平台版本而异)。
注:在开发 Android 应用时,可以选择使用 Java 8 语言功能。 您可以将项目的源代码和目标代码兼容性值保留为 Java 7,但仍须使用 JDK 8 进行编译。
Android Studio 为使用部分 Java 8 语言功能及利用这些功能的第三方库提供内置支持。 如图 1 所示,默认工具链对 javac 编译器的输出执行字节码转换(称为 desugar),从而实现新语言功能。 Jack 不再受支持,您需要首先停用 Jack 才能使用默认工具链内置的 Java 8 支持。

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

其带来的影响:

1.2 D8的使用

已经在Android Studio 3.0 Beta release中引入

二.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.jar与build/libs/r8.jar: python tools/gradle.py d8 r8
    根据r8文档进行使用即可

参考资料

上一篇 下一篇

猜你喜欢

热点阅读