Android编译
Android 编译
简易编译流程

完整编译流程

D8 和 R8
早期 Android 生成 apk 过程

- javac:将.java 文件编译成.class 文件
- desugar:用于将 Java8 的特性在 Android 平台上适配
- Proguard:用于剔除无用的 Java 代码并做一些优化
- dx:将所有的 Java 代码转换为 dex 格式
D8 和 R8 引入
Android Studio 3.x 后,引入了 D8 Dex 编译器和 R8 混淆压缩工具。
D8
D8 编译器特点:
- 编译更快、时间更短
- DEX 编译时占用内容更小
- .dex 文件大小更小
- D8 编译的.dex 文件拥有相同或是更好的运行时性能
R8
AS3.2 引入 R8 替换 Proguard,用于代码压缩 (shringking) 和混淆 (obfuscation)。
AS3.4 D8 和 R8 合并
在 Android Studio 3.4 版本中,R8 把 desugaring、shrinking、obfuscating、optimizing 和 dexing 都合并到一步进行执行。在 Android Studio 3.4 以前的版本编译流程如下:
合并之后编译流程如下:
脱糖
脱糖用于在 Android 中支持 Java8 部分特性