Android新Dex编译器D8与新混淆工具R8
本文最后更新于:2017年8月13日 凌晨
将.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的一部分。
其带来的影响:
- 减少这块的编译时间
- 可以优化更多代码
- 这么一来,所有字节码处理工具就必须要支持Java8的字节码格式了。
测试数据
根据Google Android团队对这个项目进行分别使用Dex与D8的测试数据:
2. D8的使用
Android Studio 3.0
需要主动在gradle.properties
文件中新增:
1 |
|
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环境下运行起来:
- 确保本地已经安装了python 2.7或更高版本(macOS Sierra自带python 2.7)。
- 由于R8项目使用chromium项目提供的depot_tools管理依赖,因此先安装depot_tools
- Clone R8项目:
git clone https://r8.googlesource.com/r8 && cd r8
- 下载一个Gradle版去编译,并且声称两个jar文件:
build/libs/d8.jar
与build/libs/r8.jar
:python tools/gradle.py d8 r8
- 根据r8文档进行使用即可
Android新Dex编译器D8与新混淆工具R8
https://blog.dreamtobe.cn/android_d8_r8/