Add Java 8 support via Desugar |
|||||
Issue descriptionInstead of retrolambda crbug.com/642600 , we should try our internal Java backporting tool, Desugar.
,
Jun 7 2017
,
Jun 7 2017
-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.
,
Jun 16 2017
,
Jun 16 2017
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.
,
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
,
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
,
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
,
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
,
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
,
Aug 8 2017
,
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
,
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
,
Aug 16 2017
|
|||||
►
Sign in to add a comment |
|||||
Comment 1 by zpeng@chromium.org
, Jun 7 2017