最近 Android Studio 稳定版迎来了3.3版本更新,带来的新特性之一是新一代的代码压缩工具 R8,本文将详细介绍这一新工具 R8。阅读本文内容前需了解:html
做为 Android 开发者,你们都知道缩减 APK 的大小是每一个项目都须要面临的重要工做,而代码缩减有助于经过移除未使用的代码和资源来减小 APK 的大小,并使实际代码占用更少的空间(也称为混淆),因此 R8 这一项工具的目的是让代码缩减过程更快和更有效率。R8 目前已开源:android
咱们开发者使用 Java 或者是 Kotlin 来编写程序代码,而后转换为 Android 设备所须要的 Dalvik 字节码(.dex),整个过程能够简单的用下图来表示: git
对于开发者来讲,构建过程的性能是很是重要的,所以在2015年,谷歌 Android 团队引入了编译器 Jack 和 Jill 。他们只需一步便可集成 Java 编译器、ProGuard 和 Dalvik 编译器的功能: github
这仍然为优化构建过程留下了空间,R8 是 D8 的衍生产品,旨在集成 ProGuard 和 D8 的功能: 工具
R8 一步到位地完成了全部的缩减(shrinking),去糖(desugaring)和 转换成 Dalvik 字节码(dexing )过程。性能
缩减(shrinking)过程实现如下三个重要的功能:gradle
- 压缩:从代码中移除无用的类、段、方法等。
- 优化:使代码在指令级更小,更高效。
- 混淆:使用简短无心义的名称重命名代码里剩余的类,字段和方法。
R8 和当前的代码缩减解决方案 Proguard 相比,R8 能够更快地缩减代码,同时改善输出大小。下面将经过几张数据图来对比(数据源自于 benchmark): 优化
R8 使用的方式很是简单,Android Studio 升级到3.3及以上版本后,只需在项目的 gradle.properties 里加上:ui
android.enableR8=true
复制代码
R8 普通模式是兼容 Proguard的,若原项目里已使用了proguard,直接启用 R8 便可。同时,R8 也有彻底模式,与Proguard不直接兼容。能够在 gradle.properties 文件中另外设置如下内容:google
android.enableR8.fullMode=true
复制代码
本文为我的原创,转载请注明出处。