当前位置: 首页 > news >正文

Android中的DX、D8、R8

Kotlin 版本所需的 AGP、D8 和 R8 版本 :https://developer.android.google.cn/build/kotlin-support?hl=zh_cn

R8:https://developer.android.google.cn/tools/retrace?hl=zh_cn
D8:https://developer.android.google.cn/tools/d8?hl=zh_cn

在这里插入图片描述
如上图,这张图片是来自Google官方视频里面的。当时还没有R8,所以让DeepSeek要了一张:
在这里插入图片描述
在这里插入图片描述

  • DX 编译流程​​(传统方案),​​特点​​:脱糖→转换→DX 编译是​​离散的三步​​,效率低且输出臃肿
  • D8 编译流程​​(2017年推出),特点​​:整合脱糖到编译器内部,​​一步完成语法转换和 Dex 生成​
  • R8 编译流程​​(2018年推出),特点​​:​​全功能一体化引擎​​,一步完成脱糖+优化+混淆+压缩+Dex生成

核心能力对比​

Android 编译工具演进对比:DX vs D8 vs R8

特性DXD8R8
✅ 核心功能.class → .dex 转换.class → .dex 转换 + 脱糖D8功能 + 混淆/压缩/优化
⏱️ 编译速度⚠️ 慢
(需多阶段处理)
🟢 比 DX 快 30%🟢 与 D8 接近
(额外优化耗时低)
📦 输出 Dex 大小⚠️ 较大
(无优化)
⚠️ 比 DX 小约 5%✅ 比 D8 小 10-20%
(经代码压缩)
🔒 混淆能力❌ 无
(需 ProGuard)
❌ 无
(需 ProGuard)
内置
(替代 ProGuard)
🧬 脱糖支持❌ 需独立工具✅ 原生整合✅ 原生整合
⚡ 代码优化❌ 无⚠️ 基础优化高级优化
(内联/死代码删除等)
🛠️ 维护状态❌ 已弃用
(AGP 7.0+)
✅ 基础编译
(过渡方案)
官方推荐
(现代项目首选)

关键差异说明​

Android编译工具演进

  1. DX(旧编译流程)

    • 多步骤处理:javac → 独立脱糖 → transforms → DX编译
    • 脱糖是独立步骤,增加IO开销
    • 无任何优化功能
  2. D8(DX的现代化替代)

    • 简化流程:javac → transforms → D8 + 脱糖
    • 关键升级:脱糖集成到编译器内部
    • 编译速度比DX快30%
    • Dex文件缩小5%
  3. R8(D8的全功能升级)

    • 单一流程:javac → transforms → R8引擎
    • 五合一功能:
      • 脱糖(继承自D8)
      • 深度代码优化(方法内联等)
      • 混淆(取代ProGuard)
      • 资源/代码压缩
      • 最终dex生成
    • Dex文件比D8小10 - 20%
    • 构建速度比"D8 + ProGuard"快2倍

实际项目配置​
在 gradle.properties 中强制启用 R8(AGP 4.0+ 默认启用):

# 显式启用 R8(AGP 7.0+ 默认)
android.enableR8 = true
# 开启全模式优化(代码压缩+混淆+优化)
minifyEnabled true

在 build.gradle 中的配置对比:

// DX时代(已过时)
android {// 无特别配置
}// D8使用方式
android {// 默认启用(AGP 3.0+)
}// R8完整配置
android {buildTypes {release {minifyEnabled true   // 启用R8全功能shrinkResources true // 资源压缩proguardFiles getDefaultProguardFile('proguard-android-optimize.txt')}}
}

总结​

  • DX​​:旧时代的过渡工具,已被彻底淘汰
  • D8​​:​​编译基石​​,专注高效的 .class→.dex 转换
  • ​​R8​​:​​终极形态​​,集成编译+优化+混淆三位一体
http://www.xdnf.cn/news/1015363.html

相关文章:

  • HTML5实现好看的邀请函网页源码
  • 1.13使用 Node.js 操作 SQLite
  • 7. TypeScript接口
  • gazebo仿真中对无人机集成的相机进行标定(VINS-Fusion)
  • 西电新增信息力学与感知学院,26考研正式招生
  • qt配合海康工业相机取图开发
  • UE 新版渲染器输出视频
  • HOT 100 | 73.矩阵置零、54.螺旋矩阵、48.旋转图像
  • 贫血模型与充血模型
  • 从0到1:Dify AI智能体部署与使用全攻略
  • 如何存储和和使用比特币---第1关:比特币的存储
  • 机器学习--分类
  • Kafka入门4.0.0版本(基于Java、SpringBoot操作)
  • [Godot] C#读取CSV表格创建双层字典实现本地化
  • Yarn与NPM缓存存储目录迁移
  • c++ std::function
  • MySQL查询缓存深度剖析
  • 多环境开发配置,Spring boot
  • RK3576 Android14 DMIC调制
  • 前端构建工具Webapck、Vite——>前沿字节开源Rspack详解——2023D2大会
  • 打卡第44天:无人机数据集分类
  • android过渡动画
  • 【Pytorch】(1)Pytorch环境安装-①创建虚拟环境
  • NB-IoT-下行同步、广播信道和信号
  • Volta 管理 Node 版本最佳实践教程
  • 【CATIA的二次开发28】抽象对象Document涉及应用程序连接的属性
  • python中的面向对象:继承、封装、多态
  • 中小企业数字化转型:如何选择靠谱的软件开发服务商?
  • 【知识图谱构建系列2】LLM4KGC项目安装运行
  • Profinet转Modbus网关:破解热处理炉协议壁垒的温控通讯密码