8/11/17

Next-generation Dex Compiler Now in Preview

Posted by James Lau, Product
Manager



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.



That's why we are investing in making important improvements in the dex
compiler. We're excited to announce that the next-generation dex compiler, D8,
is now available for preview as part of href="https://developer.android.com/studio/preview/index.html">Android Studio
3.0 Beta release.



When comparing with the current DX compiler, D8 compiles faster and outputs
smaller .dex files, while having the same or better app runtime performance.








* Tested with benchmark project href="https://github.com/jmslau/perf-android-large/tree/android-30">here.







*Tested with benchmark project href="https://github.com/jmslau/perf-android-large/tree/android-30">here.



How to try it?




D8 is available for your preview starting with href="https://developer.android.com/studio/preview/index.html">Android Studio
3.0 Beta. To try it, set the following in your project's gradle.properties
file:




android.enableD8=true


We have tested D8's correctness and performance on a number of apps, and the
results are encouraging. We're confident enough with the results that we are switching to use D8 as the default dex compiler for building href="https://source.android.com/source/">AOSP.



There is currently a known issue around 64-bit devices running Lollipop. Give D8 a try but please don't use it to deploy your app to Google Play. We would love to hear your feedback. You can file a bug report using
href="https://issuetracker.google.com/issues/new?component=317603&template=1018721">this
link.



What's next?




We plan to preview D8 over the next several months with the Android Studio 3.0
release. During this time, we will focus on addressing any critical bug reports
we receive from the community. We plan to bring D8 out of preview and enable it
as the default dex compiler in Android Studio 3.1. At that time, the DX compiler
will officially be put in maintenance mode. Only critical issues with DX will be
fixed moving forward.



Beyond D8, we are also working on R8, which is a Proguard replacement for whole
program minification and optimization. While the R8 project has already been href="https://r8.googlesource.com/r8">open sourced, it has not yet been
integrated with the Android Gradle plugin. We will provide more details about R8
in the near future when we are ready to preview it with the community.



Tool developers: get your bytecode tools Java 8 ready




In April, we href="https://android-developers.googleblog.com/2017/04/java-8-language-features-support-update.html">announced
Java 8 language features with desugaring. The desugaring step currently
happens immediately after Java compilation (javac) and before any bytecode
reading or rewriting tools are run. Over the next couple of months, the desugar
step will move to a later stage in the pipeline, as part of D8. This will allow
us to further reduce the overall build time and produce more optimized code.
This change means that any bytecode reading or rewriting tools will run before
the desugar step. If you develop .class bytecode reading or rewriting tools for
Android, you will need to make sure they can handle the Java 8 bytecode format
so they can continue to work properly when we move desugaring into D8.



Happy dex'ing!



Load disqus comments

0 comments

loading...