New issue
Advanced search Search tips
Note: Color blocks (like or ) mean that a user may not be available. Tooltip shows the reason.

Issue 730711 link

Starred by 9 users

Issue metadata

Status: Fixed
Owner:
Last visit > 30 days ago
Closed: Aug 2017
Cc:
Components:
EstimatedDays: ----
NextAction: ----
OS: Android
Pri: 2
Type: ----

Blocked on:
issue 756176

Blocking:
issue 728443
issue 720360



Sign in to add a comment

Add Java 8 support via Desugar

Project Member Reported by zpeng@chromium.org, Jun 7 2017

Issue description

Instead of retrolambda  crbug.com/642600 , we should try our internal Java backporting tool, Desugar.

 

Comment 1 by zpeng@chromium.org, Jun 7 2017

Blocking: 728443

Comment 2 by zpeng@chromium.org, Jun 7 2017

Blocking: 720360
Labels: -Restrict-View-Google
-RVG. It's not an internal tool (as in it's open-source). But it is a Google-authored tool.

Available here:

https://github.com/bazelbuild/bazel/tree/master/src/tools/android/java/com/google/devtools/build/android/desugar


Main motivation for wanting to switch is that desugar enables default methods on interfaces without having to run as a single pass.
Cc: zpeng@chromium.org
 Issue 642600  has been merged into this issue.
Found a really good explanation as to why lambdas increase binary size:
https://news.realm.io/news/360andev-jake-wharton-java-hidden-costs-android/

tldr is that it generates code that looks like

Class Outer {
  void lambdaImpl() {
    // your code here
  }
  static class LambdaClass implements Runnable {
    public void Run() {
      Outer.this.lambdaImpl();
    }
  }
}

Still seems to me that this is something Proguard should be able to fix if the team focused on it.
Project Member

Comment 6 by bugdroid1@chromium.org, Jun 21 2017

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/4e894e1afbb801479455e05aed800ff5b31fb285

commit 4e894e1afbb801479455e05aed800ff5b31fb285
Author: Peter Wen <wnwen@chromium.org>
Date: Wed Jun 21 18:31:50 2017

Android: Include generated files in lint

Previously srcjars were not included as part of the java files that we
ran lint on. Now they are extracted to a temporary directory for each
target. Linting srcjars improves intdef and unused resources checks.

Type annotations will be available in Java 8. Removing it for now and
adding TODO to add it back when Java 8 becomes available.

Bug:  731159 ,  730711 
Change-Id: Id2d7abe981c8ba8a23712748942d500056023587
Reviewed-on: https://chromium-review.googlesource.com/539897
Commit-Queue: Peter Wen <wnwen@chromium.org>
Reviewed-by: Ted Choc <tedchoc@chromium.org>
Reviewed-by: Helen Li <xunjieli@chromium.org>
Reviewed-by: Andrew Grieve <agrieve@chromium.org>
Cr-Commit-Position: refs/heads/master@{#481253}
[modify] https://crrev.com/4e894e1afbb801479455e05aed800ff5b31fb285/build/android/gyp/lint.py
[modify] https://crrev.com/4e894e1afbb801479455e05aed800ff5b31fb285/build/android/gyp/write_build_config.py
[modify] https://crrev.com/4e894e1afbb801479455e05aed800ff5b31fb285/build/android/lint/suppressions.xml
[modify] https://crrev.com/4e894e1afbb801479455e05aed800ff5b31fb285/build/config/android/internal_rules.gni
[modify] https://crrev.com/4e894e1afbb801479455e05aed800ff5b31fb285/components/location/android/java/src/org/chromium/components/location/LocationUtils.java
[modify] https://crrev.com/4e894e1afbb801479455e05aed800ff5b31fb285/net/android/java/src/org/chromium/net/X509Util.java

Comment 7 by wnwen@chromium.org, Jun 29 2017

Android Studio 3.0's default toolchain uses desugar, and all other implementations are instructed to migrate to desugar: https://developer.android.com/studio/write/java8-support.html#migrate
Project Member

Comment 8 by bugdroid1@chromium.org, Jul 28 2017

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/17fc65188dfb708275491491edcf9d3be8cbb9af

commit 17fc65188dfb708275491491edcf9d3be8cbb9af
Author: zpeng <zpeng@chromium.org>
Date: Fri Jul 28 20:45:18 2017

Checking in desugar into third_party

Desugar is a Google-developed open-source Java library used by the
build process to transform Java 8 bytecode to Java 7. It is used to
enable Java 8 features such as lambda experssions for Chrome on Android.

Our experiments show that Desugar outperforms Retrolambda in both APK
sizes and Java method counts. As of 2017 July, it is the official Java
8 support tool recognized by the Android team.

Also, creating a //third_party/bazel directory for checking in other
bazel components in the future.

BUG= 730711 

Review-Url: https://codereview.chromium.org/2982273002
Cr-Commit-Position: refs/heads/master@{#490503}

[modify] https://crrev.com/17fc65188dfb708275491491edcf9d3be8cbb9af/DEPS
[modify] https://crrev.com/17fc65188dfb708275491491edcf9d3be8cbb9af/third_party/.gitignore
[add] https://crrev.com/17fc65188dfb708275491491edcf9d3be8cbb9af/third_party/bazel/LICENSE
[add] https://crrev.com/17fc65188dfb708275491491edcf9d3be8cbb9af/third_party/bazel/OWNERS
[add] https://crrev.com/17fc65188dfb708275491491edcf9d3be8cbb9af/third_party/bazel/README.chromium
[add] https://crrev.com/17fc65188dfb708275491491edcf9d3be8cbb9af/third_party/bazel/desugar/Desugar.jar.sha1
[add] https://crrev.com/17fc65188dfb708275491491edcf9d3be8cbb9af/third_party/bazel/desugar/README.chromium

Project Member

Comment 9 by bugdroid1@chromium.org, Aug 2 2017

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/1a159a003ca82e0b0bd653078dbde80757bf9e2c

commit 1a159a003ca82e0b0bd653078dbde80757bf9e2c
Author: zpeng <zpeng@chromium.org>
Date: Wed Aug 02 01:42:49 2017

Update experimental Java 8 support to use Desugar instead of Retrolambda

Our experiments show that Desugar, a Google-developed open-source tool,
outperforms Retrolambda in both APK sizes and Java method counts. This
CL replaces Retrolambda with Desugar in our experimental Java 8 support.

BUG= 730711 

Review-Url: https://codereview.chromium.org/2985523002
Cr-Commit-Position: refs/heads/master@{#491183}

[modify] https://crrev.com/1a159a003ca82e0b0bd653078dbde80757bf9e2c/DEPS
[add] https://crrev.com/1a159a003ca82e0b0bd653078dbde80757bf9e2c/build/android/gyp/desugar.py
[delete] https://crrev.com/baca0c48578ca9509e5aa4bf94a1083f80106ca3/build/android/gyp/retrolambda.py
[modify] https://crrev.com/1a159a003ca82e0b0bd653078dbde80757bf9e2c/build/config/android/config.gni
[modify] https://crrev.com/1a159a003ca82e0b0bd653078dbde80757bf9e2c/build/config/android/internal_rules.gni
[modify] https://crrev.com/1a159a003ca82e0b0bd653078dbde80757bf9e2c/third_party/.gitignore
[delete] https://crrev.com/baca0c48578ca9509e5aa4bf94a1083f80106ca3/third_party/retrolambda/LICENSE
[delete] https://crrev.com/baca0c48578ca9509e5aa4bf94a1083f80106ca3/third_party/retrolambda/OWNERS
[delete] https://crrev.com/baca0c48578ca9509e5aa4bf94a1083f80106ca3/third_party/retrolambda/README.chromium
[delete] https://crrev.com/baca0c48578ca9509e5aa4bf94a1083f80106ca3/third_party/retrolambda/retrolambda-2.5.1.jar.sha1

Project Member

Comment 10 by bugdroid1@chromium.org, Aug 8 2017

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/e1fdb3865b3107b2ef7169fefd2d17cadfdfb47f

commit e1fdb3865b3107b2ef7169fefd2d17cadfdfb47f
Author: F <zpeng@chromium.org>
Date: Tue Aug 08 19:35:14 2017

Enable Java 8 by default for Chrome on Android

This CL adds Java 8 support for Chrome on Android by removing use_java8
and process_java8 flags. The Java 8 support is achieved by using
Desugar to rewrite Java 8 bytecode to be compatible with Java 7.

Currently Java 8 feature "default and static methods"
( crbug.com/728443 ) is not supported. And Java 7 feature
"try-with-resources" ( crbug.com/751776 ) still needs to be guarded by
API level checks, otherwise resulting in lint errors about new APIs.

Bug:  730711 
Change-Id: I6efb898d225f3062338ad19c6ac565df6b40449e
Reviewed-on: https://chromium-review.googlesource.com/598539
Commit-Queue: Felix <zpeng@chromium.org>
Reviewed-by: Yaron Friedman <yfriedman@chromium.org>
Reviewed-by: Andrew Grieve <agrieve@chromium.org>
Cr-Commit-Position: refs/heads/master@{#492727}
[modify] https://crrev.com/e1fdb3865b3107b2ef7169fefd2d17cadfdfb47f/build/config/android/config.gni
[modify] https://crrev.com/e1fdb3865b3107b2ef7169fefd2d17cadfdfb47f/build/config/android/internal_rules.gni
[modify] https://crrev.com/e1fdb3865b3107b2ef7169fefd2d17cadfdfb47f/build/config/android/rules.gni

Status: Fixed (was: Available)
Project Member

Comment 12 by bugdroid1@chromium.org, Aug 10 2017

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/8f75411b306ddbb870d85c39dc03024b7bd5ec74

commit 8f75411b306ddbb870d85c39dc03024b7bd5ec74
Author: Sami Kalliomäki <sakal@chromium.org>
Date: Thu Aug 10 16:27:38 2017

Update generate_gradle.py to support Java 8.

Adds support for Java 8 using Desugar. Android Studio 3.0 is required
for Desugar. enforceUniquePackageName is no longer needed by the new
gradle version. This feature is behind "--canary" flag for now.

Bug:  webrtc:8084 ,  chromium:730711 
Change-Id: Iba24880fef303aa627307356f2e26b78e153a960
Reviewed-on: https://chromium-review.googlesource.com/609066
Reviewed-by: Peter Wen <wnwen@chromium.org>
Commit-Queue: Sami Kalliomäki <sakal@chromium.org>
Cr-Commit-Position: refs/heads/master@{#493418}
[modify] https://crrev.com/8f75411b306ddbb870d85c39dc03024b7bd5ec74/build/android/gradle/android.jinja
[modify] https://crrev.com/8f75411b306ddbb870d85c39dc03024b7bd5ec74/build/android/gradle/dependencies.jinja
[modify] https://crrev.com/8f75411b306ddbb870d85c39dc03024b7bd5ec74/build/android/gradle/generate_gradle.py
[modify] https://crrev.com/8f75411b306ddbb870d85c39dc03024b7bd5ec74/build/android/gradle/java.jinja
[modify] https://crrev.com/8f75411b306ddbb870d85c39dc03024b7bd5ec74/build/android/gradle/root.jinja

Project Member

Comment 13 by bugdroid1@chromium.org, Aug 15 2017

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/faac5fc0f01bced6f89e03362f07958f9cce41ef

commit faac5fc0f01bced6f89e03362f07958f9cce41ef
Author: Felix <zpeng@chromium.org>
Date: Tue Aug 15 14:02:47 2017

Update Desugar step and filter step in internal_rules.gni

This CL moves filter step to be the last step in process_java_built,
so that excluded java class files can still be present for Desugar
step. This CL also makes Desugar use deps_info:java:full_classpath.

Bug:  730711  
Change-Id: Id4258b2f1af2f83cc64be2c90ad29bcae7679964
Reviewed-on: https://chromium-review.googlesource.com/614093
Reviewed-by: Andrew Grieve <agrieve@chromium.org>
Commit-Queue: Felix <zpeng@chromium.org>
Cr-Commit-Position: refs/heads/master@{#494373}
[modify] https://crrev.com/faac5fc0f01bced6f89e03362f07958f9cce41ef/build/config/android/internal_rules.gni

Comment 14 by zpeng@chromium.org, Aug 16 2017

Blockedon: 756176

Sign in to add a comment