| Name: R8 |
| URL: https://r8.googlesource.com/r8 |
| Version: 3.0.33 |
| License: BSD 3-Clause |
| License File: NOT_SHIPPED |
| Security Critical: no |
| |
| Description: |
| lib/r8.jar |
| - Contains R8 (proguard replacement) as well as D8 (dexer). |
| 3pp |
| - Contains code for 3pp-linux-amd64-packager to package and upload new versions of r8. |
| desugar_jdk_libs.json |
| - Configuration for Java library desugaring. |
| - Taken from |
| //third_party/android_deps/libs/com_android_tools_desugar_jdk_libs_configuration/ |
| inside the jar file, in META-INF/desugar/d8/desugar.json. License is also BSD |
| 3-Clause (the r8 version). |
| |
| R8 is a proguard-like optimizer that also has the ability to dex. |
| |
| Local Modifications: |
| * Refer to commit descriptions within "3pp/patches" directory. |
| * Added "playground" directory for quick "how does this optimize" tests. |
| * Removed references to ConcurrentHashMap and TimeZone#getTimeZone in desugar_jdk_libs.json. |
| * Added "java/src/org/chromium/build/CustomD8.java", custom_d8.jar, and BUILD.gn. |
| * Used in "build/android/gyp/dex.py" to enable desugar dependencies. |
| |
| Update Instructions: |
| * For the custom d8 jar: |
| * This is required only when CustomD8.java changes. |
| * Uncomment the flag --skip-custom-d8 in internal_rules.gni to avoid depending |
| on the previously built custom_d8.jar. |
| autoninja -C out/Debug third_party/r8:custom_d8_java |
| cp out/Debug/obj/third_party/r8/custom_d8_java.javac.jar third_party/r8/custom_d8.jar |
| |
| * For a new version of r8: |
| * Find the latest successful run of the build bot: |
| * https://ci.chromium.org/p/chromium/builders/ci/3pp-linux-amd64-packager |
| * The bot autoruns every 6 hours. Ping a trooper to trigger it if you need it sooner. |
| * https://luci-scheduler.appspot.com/jobs/chromium/3pp-linux-amd64-packager |
| * Go to its log page and look under: |
| * Expand "building chromium/third_party/r8" to see the CIPD instance ID. |
| * Copy this instance ID to the r8 entry in //DEPS. |
| * Update this file with the new version string and submit. |
| |
| * If patching fails: |
| git clone https://r8.googlesource.com/r8 |
| cd r8 |
| * Find latest tag: |
| git fetch origin --tags |
| git tag -l # Often unnecessary as output from the fetch includes recent tags. |
| git checkout $TAG # e.g. 3.0.25-dev, whichever tag failed patching. |
| * Apply patches: |
| git checkout -b my_branch |
| git am $CHROMIUM_SRC/third_party/r8/patches/*.patch |
| * Fix patch conflicts. |
| * Save new patches. Change number if expecting more or fewer patches: |
| git format-patch -3 -o $CHROMIUM_SRC/third_party/r8/3pp/patches |
| * Submit these fixed patches and the bot will automatically retry. |
| |
| * Local development (see above for setting up the r8 repo): |
| * Build |
| tools/gradle.py r8 |
| * Shrink (improves r8/d8 launch time): |
| java -jar build/libs/r8.jar --debug --classfile --output r8.jar \ |
| --lib $CHROMIUM_SRC/third_party/jdk/current --pg-conf src/main/keep.txt \ |
| --no-minification --no-desugaring build/libs/r8.jar |
| mv $CHROMIUM_SRC/third_party/r8/lib/r8.jar{,.bak} |
| cp r8.jar $CHROMIUM_SRC/third_party/r8/lib/r8.jar |
| |
| * Update backported methods list: |
| cd $CHROMIUM_SRC |
| java -cp third_party/r8/lib/r8.jar com.android.tools.r8.BackportedMethodList --min-api 16 > third_party/r8/backported_methods.txt |
| |
| * Update instructions for desugar_jdk_libs.json: |
| unzip -p third_party/android_deps/libs/com_android_tools_desugar_jdk_libs_configuration/*.jar META-INF/desugar/d8/desugar.json > third_party/r8/desugar_jdk_libs.json |
| * Remove all mentions of ConcurrentHashMap and TimeZone#getTimeZone and remove trailing commas. |
| * Update //build/config/android/internal_rules.gni to point at the new .jar files: |
| * desugar_jdk_libs-1.1.1.jar |
| * desugar_jdk_libs_configuration-1.1.1.jar |
| |
| How to file bugs against R8: |
| * Copy & paste the failing ninja command (starts with proguard.py), and add --dump-inputs. |
| * This also works for dex.py, it produces d8inputs.zip |
| * File bug at go/r8bug |
| * Things to include (use discretion if some are not relevant): |
| * src revision bug reproduces at |
| * Repro steps (gn gen & autoninja commands) |
| * Prefer enable_chrome_android_internal=false |
| * The r8inputs.zip from --dump-inputs |
| * Any relevant dexdump analysis |
| |
| How to submit CLs to R8: |
| * Request to be added to their allowlist in order to upload CLs. |
| * After CLs are submitted, check the bots for build breakage. |
| * https://ci.chromium.org/p/r8/g/main_all/console |