随着安卓工作室引入了两个新工具D8和R8。
根据谷歌文档,D8是一个DEX工具,而R8是一个progourd工具,但是根据他们的解释,两者都在做以下几乎相同的事情:
D8是一个dexer,将java字节码转换为dex代码。
R8是一个Java程序缩小和最小化工具,将Java字节码转换为优化的dex代码。
从表面上看,两者都将Java字节码直接转换为dex代码。那么,实际上他们在转换dex代码方面内部到底做了什么呢?
随着安卓工作室引入了两个新工具D8和R8。
根据谷歌文档,D8是一个DEX工具,而R8是一个progourd工具,但是根据他们的解释,两者都在做以下几乎相同的事情:
D8是一个dexer,将java字节码转换为dex代码。
R8是一个Java程序缩小和最小化工具,将Java字节码转换为优化的dex代码。
从表面上看,两者都将Java字节码直接转换为dex代码。那么,实际上他们在转换dex代码方面内部到底做了什么呢?
D8 dexer和R8 shrinker
D8->D8是一种将Java字节码转换为dex字节码的dexer。
R8->R8是一种Java程序缩小和最小化工具,可将Java字节码转换为优化的dex代码。
Android开发人员知道,dex编译是构建APK的关键步骤。这是将.class字节码转换为Android Runtime(或较旧版本的Android的Dalvik)的.dex字节码的过程。dex编译器在日常应用程序开发中大多在幕后运作,但它直接影响您的应用程序的构建时间、.dex文件大小和运行时性能。
R8项目使用来自Chromium项目的depot_tools管理依赖项。在继续之前,请安装depot_tools并将其添加到路径中。
R8项目使用Java 8语言特性,需要Java 8编译器和运行时系统。
支持真正的调试构建。无需更改Android清单中的debuggable值。
增量构建将在使用“导出已签名/未签名应用包”时自动插入debuggable==true, 而在设置debuggable=true的情况下,发布构建实际上将进行调试构建。
在发布构建中自动支持Proguard。只需要在default.properties中具有proguard.config
指向proguard配置文件的属性即可。
完全重写的可视化布局编辑器。这还是一个正在进行中的工作。
将小部件移动到布局视图内,从一个布局视图移动到另一个布局视图,从一个布局文件移动到另一个布局文件。
带有枚举/标志类型属性的上下文菜单。
我认为这篇博客文章的介绍是回答该问题的好资源:https://jakewharton.com/r8-optimization-staticization
R8是D8的一个版本,也可以执行优化。它不是单独的工具或代码库,而只是以更高级模式运行的相同工具。 D8首先将Java字节码解析为其自己的中间表示(IR),然后编写Dalvik字节码,R8在编写之前对IR进行优化处理。