随着android studio推出了两款新工具D8和R8。 根据谷歌文档D8是一个dex工具,R8是一个progourd工具,但因为他们的解释几乎完全相同的事情如下:
D8是一个将java字节代码转换为dex代码的dexer。
R8是一个java程序缩小和缩小工具,可将java字节代码转换为优化的dex代码。
它似乎都将java字节代码逐字转换为dex代码。那么,实际上他们在转换dex代码时是在内部做什么的?
答案 0 :(得分:11)
D8 dexer和R8收缩机
D8-> D8是一个将java字节代码转换为dex代码的dexer。
R8-> R8是一个java程序缩小和缩小工具,可将java字节代码转换为优化的dex代码。
Android开发人员知道dex编译是构建APK的关键步骤。这是将.class字节码转换为Android运行时(或Dalvik,旧版Android)的.dex字节码的过程。 dex编译器主要在日常应用程序开发中工作,但它直接影响应用程序的构建时间,.dex文件大小和运行时性能。
R8项目使用chromium项目中的depot_tools来管理依赖项。安装depot_tools并在继续之前将其添加到您的路径中。
R8项目使用Java 8语言功能,需要Java 8编译器和运行时系统。
支持真正的调试版本。无需更改debuggable的值 Android Manifest。
增量构建将在使用时自动插入debuggable == true "导出签名/未签名的应用程序包"将不会。 如果设置了debuggable = true,那么发布版本实际上会进行调试构建。
发布版本中的自动Proguard支持。只需要有一个proguard.config
default.properties中的属性,指向proguard配置文件。
完全重写Visual Layout Editor。这非常重要。
将小部件移动到布局视图中,从一个布局视图移动到另一个布局视图,从一个布局文件移动到另一个布局文件。
具有枚举/标志类型属性的上下文菜单。
答案 1 :(得分:4)
我认为此博客文章的介绍是回答以下问题的好资源:https://jakewharton.com/r8-optimization-staticization
R8是D8的一个版本,也可以执行优化。它不是单独的工具或代码库,而是在更高级模式下运行的同一工具。 D8首先将Java字节码解析为自己的中间表示(IR),然后写出Dalvik字节码,而R8在IR上添加优化遍历,然后将其写出。
答案 2 :(得分:1)
答案 3 :(得分:0)
D8单独处理每个Java类文件,而不查看整个程序。这使得转换为DEX的速度很快,因为类可以并行处理,并且在开发期间,它允许在修改类的代码时快速重新编译。
另一方面,R8(与ProGuard一样)读入整个应用程序并进行需要了解整个类层次结构的更改和优化(例如内联)。例如,R8将删除未使用的类和方法("树摇动")并重命名类,方法和字段(应用程序的入口点除外)。
在Android Studio 3.1中,D8已取代DX作为将Java类文件转换为DEX的工具,但R8尚未启用。