Difference between D8 and R8 android
Asked Answered
A

3

33

As android studio introduced two new tools D8 and R8. As per google documentation D8 is a dex tool and R8 is a progourd tool but as their explanation both are doing almost same thing like below:

D8 is a dexer that converts java byte code to dex code.

R8 is a java program shrinking and minification tool that converts java byte code to optimized dex code.

It seems both converts java byte code to dex code literally. So, Whats actually they are doing internally in case of converting dex code?

Alexis answered 29/3, 2018 at 6:14 Comment(0)
A
31

D8 dexer and R8 shrinker

D8->D8 is a dexer that converts java byte code to dex code.

R8->R8 is a java program shrinking and minification tool that converts java byte code to optimized dex code.

Android developers know that dex compilation is a key step in building an APK. This is the process of transforming .class bytecode into .dex bytecode for the Android Runtime (or Dalvik, for older versions of Android). The dex compiler mostly works under the hood in your day-to-day app development, but it directly impacts your app's build time, .dex file size, and runtime performance.

The R8 project uses depot_tools from the chromium project to manage dependencies. Install depot_tools and add it to your path before proceeding.

The R8 project uses Java 8 language features and requires a Java 8 compiler and runtime system.

  • New version number scheme following the SDK Tools revision number.
  • Support for true debug build. No need to change the value of debuggable in the Android Manifest.

    Incremental build will automatically insert debuggable==true while using the "export signed/unsigned application package" will not. If debuggable=true is set, then release builds will actually do a debug build.

  • Automatic Proguard support in release builds. Only need to have a proguard.config

    property in default.properties that points to a proguard config file.

  • Completely rewritten Visual Layout Editor. This is very much a work in progress.

    • full drag and drop from palette to layout for all Layout classes.
    • Move widgets inside a Layout view, from one Layout view to another and from one layout file to another.

    • Contextual menu with enum/flag type properties.

    • New zoom controls.
Ahumada answered 8/4, 2018 at 3:35 Comment(0)
C
20

I think the introduction of this blogpost is a great resource to answer that question: https://jakewharton.com/r8-optimization-staticization

R8 is a version of D8 that also performs optimization. It’s not a separate tool or codebase, just the same tool operating in a more advanced mode. Where D8 first parses Java bytecode into its own intermediate representation (IR) and then writes out the Dalvik bytecode, R8 adds optimization passes over the IR before its written out.

Caryloncaryn answered 15/12, 2018 at 14:0 Comment(0)
J
4

D8 processes each Java class file individually without looking at the entire program. This makes the conversion to DEX fast, since classes can be processed in parallel, and during development it allows fast recompilation when the code of a class is modified.

On the other hand, R8 (like ProGuard) reads in the entire application and makes changes and optimizations (e.g. inlining) that require knowing the entire class hierarchy. For instance, R8 will remove unused classes and methods ("tree shaking") and rename classes, methods and fields (except for the application's entry points).

In Android Studio 3.1, D8 has replaced DX as the tool that converts Java class files to DEX, but R8 has not been enabled yet.

Jacobo answered 7/4, 2018 at 18:56 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.