Skip to content

Enable r8 support in bazel#14741

Closed
mauriciogg wants to merge 1 commit intobazelbuild:masterfrom
mauriciogg:r8_support_upstream_master
Closed

Enable r8 support in bazel#14741
mauriciogg wants to merge 1 commit intobazelbuild:masterfrom
mauriciogg:r8_support_upstream_master

Conversation

@mauriciogg
Copy link
Copy Markdown
Contributor

This cl introduces R8 support in Bazel for proguarding and dexing.
R8 is enabled by passing --experimental_enable_r8=true to the
blaze build invocation and --proguard_top="//bzl/r8:proguard_compat"

When enabled the build graph was changed from

  • jar -> proguard -> dex -> apk
    To
  • jar -> r8 -> apk

I.e R8 takes care of proguarding and dexing.

There are a few known limitations:

  • Only native multidex (Android version L+) is supported.
    All android_binary targets declare native_multidex so it does not
    make sense to implement legacy multidex with R8
  • Mobile-Install is not supported: mobile-install relies on how dexes
    are shard. R8 dexes the deploy jar in a single monolithic action
    which is cant be done incrementally (I don't think mobile-install is
    supported anymore)
  • Other features which are not implemented in bazel at the moment:
    e.g. dynamic delivery
  • proguard_compat needs to be available (not in this commit)

see bazelbuild/rules_android#31

This cl introduces R8 support in Bazel for proguarding and dexing.
R8 is enabled by passing --experimental_enable_r8=true to the
blaze build invocation and --proguard_top="//bzl/r8:proguard_compat"

When enabled the build graph was changed from
 - jar -> proguard -> dex -> apk
To
 - jar -> r8 -> apk

 I.e R8 takes care of proguarding and dexing.

There are a few known limitations:

 - Only native multidex (Android version L+) is supported.
   All android_binary targets declare native_multidex so it does not
   make sense to implement legacy multidex with R8
 - Mobile-Install is not supported: mobile-install relies on how dexes
   are shard. R8 dexes the deploy jar in a single monolithic action
   which is cant be done incrementally (I don't think mobile-install is
   supported anymore)
 - Other features which are not implemented in bazel at the moment:
   e.g. dynamic delivery
 - proguard_compat needs to be available (not in this commit)

---
Automatic squash commit from https://github.sc-corp.net/Snapchat/bazel/pull/145
Cooled by mgalindo
@sgowroji sgowroji added the team-Android Issues for Android team label Mar 23, 2022
@sgowroji sgowroji added the awaiting-review PR is awaiting review from an assigned reviewer label Apr 21, 2022
@mauriciogg mauriciogg requested a review from ted-xie as a code owner April 22, 2022 11:45
@nkoroste
Copy link
Copy Markdown
Contributor

@ahumesky @ted-xie

@gabrielborglund
Copy link
Copy Markdown

@mauriciogg Why is it better to pass R8 via the proguard_top flag rather than changing how AndroidBinary works? That is why not implement something like applyR8 instead of applyProguard?

@mauriciogg
Copy link
Copy Markdown
Contributor Author

@mauriciogg Why is it better to pass R8 via the proguard_top flag rather than changing how AndroidBinary works? That is why not implement something like applyR8 instead of applyProguard?

Technically this code is being deprecated so I wouldnt want to add modifications to android binary, besides this just works out of the box with the rest of the toolchain. The only extra piece needed is a shim binary that translates between proguard args and r8 args. This is very unlikely to get merge though.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

awaiting-review PR is awaiting review from an assigned reviewer team-Android Issues for Android team

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants