D8和R8 android之间的区别

时间:2018-03-29 06:14:50

标签: android dex android-d8 android-r8

随着android studio推出了两款新工具D8和R8。 根据谷歌文档D8是一个dex工具,R8是一个progourd工具,但因为他们的解释几乎完全相同的事情如下:

  

D8是一个将java字节代码转换为dex代码的dexer。

     

R8是一个java程序缩小和缩小工具,可将java字节代码转换为优化的dex代码。

它似乎都将java字节代码逐字转换为dex代码。那么,实际上他们在转换dex代码时是在内部做什么的?

4 个答案:

答案 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编译器和运行时系统。

  • 遵循SDK工具版本号的新版本号方案。
  • 支持真正的调试版本。无需更改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)

  • D8是将将Java字节代码转换为dex 代码的dexer。D8是 DX dexer的替代品。
  • R8是Java程序 缩小工具,可将Java字节代码转换为优化的dex代码

for more detail...

答案 3 :(得分:0)

D8单独处理每个Java类文件,而不查看整个程序。这使得转换为DEX的速度很快,因为类可以并行处理,并且在开发期间,它允许在修改类的代码时快速重新编译。

另一方面,R8(与ProGuard一样)读入整个应用程序并进行需要了解整个类层次结构的更改和优化(例如内联)。例如,R8将删除未使用的类和方法("树摇动")并重命名类,方法和字段(应用程序的入口点除外)。

在Android Studio 3.1中,D8已取代DX作为将Java类文件转换为DEX的工具,但R8尚未启用。