1. D8、R8 发展历程
Android Studio 版本 | Android Gradle Plugin 版本 | 变更 |
---|---|---|
3.1 | 3.0.1 | 引入 D8 |
3.2 | 3.2.0 | 引入 R8、D8 脱糖默认开启 |
3.4 | 3.4.0 | 默认开启 R8 |
1.1 D8 编译器
Google
在 Android Studio 3.1
版本中引入 D8
编译器作为默认的 DEX
字节码文件编译器。通过在 gradle.properties
中新增 android.enableD8=true
开启 D8
编译器。
D8
编译器特点是:
- 编译更快、时间更短;
DEX
编译时占用内容更小;.dex
文件大小更小;D8
编译的.dex
文件拥有相同或者是更好的运行时性能;
根据 Google Android
团队使用 Dex
与 D8
编译器的测试对比数据:
1.2 R8 工具
Google
在 Android Studio 3.2
中引入 R8
作为 ProGuard
的替代工具,用于代码的压缩(shrinking
)和混淆(obfuscation
)。通过在 gradle.properties
中新增 android.enableR8 = true
开启 R8
工具。
Disables R8 for Android Library modules only.
android.enableR8.libraries = false
Disables R8 for all modules.
android.enableR8 = false
1.3 Android Studio 3.4 版本 D8 R8 变更
在 Android Studio 3.4
版本中,R8
把 desugaring
、shrinking
、obfuscating
、optimizing
和 dexing
都合并到一步进行执行。在 Android Studio 3.4
以前的版本编译流程如下:
合并之后编译流程如下:
注意,如果我们在 build.gradle
中配置了 useProguard = false
则不管是否开启 R8
编译都会使用 R8
进行压缩代码。
2. 脱糖
Android Studio
为使用部分 Java 8
语言功能及利用这些功能的第三方库提供内置支持。默认