Add command for generating the RuntimeEnabledSdkConfig message.

This is used in an app bundle to reference the sandboxed SDK dependencies and
how they are signed. This is later read by app stores to properly install
SDK dependencies on devices (or create split APKs with SDK dependencies).

Note that the config message needs to have a `resource id` for every SDK, which
represents the first byte of the package IDs for the SDK. Low values for this
ID can cause problems on API <26 (P and below) so we need to start from a base
value (0x7F) and decrease from there, enforcing a low limit
(50 SDKs). On Android O and above we can use the full byte starting from the
base (0x7F).

Since this logic depends on the minSdkVersion, the command receives the AAPT
manifest dump of the app.

PiperOrigin-RevId: 573756689
Change-Id: I4830042f8356f9a774822f2efedf9fc3011f8221
18 files changed
tree: b2f24e1610c01244d1af9cb4e5b3fd97fc9388cc
  1. .bazelci/
  2. android/
  3. examples/
  4. kokoro/
  5. mobile_install/
  6. rules/
  7. src/
  8. test/
  9. toolchains/
  10. tools/
  11. .bazelignore
  12. .bazelrc
  13. .gitignore
  14. android_sdk_supplemental_repository.bzl
  15. AUTHORS
  16. BUILD
  17. CONTRIBUTING.md
  18. CONTRIBUTORS
  19. defs.bzl
  20. defs_dev.bzl
  21. go.mod
  22. go.sum
  23. groups
  24. LICENSE
  25. MODULE.bazel
  26. prereqs.bzl
  27. project.config
  28. README.md
  29. ROADMAP.md
  30. rules_android_maven_install.json
  31. WORKSPACE
  32. WORKSPACE.bzlmod
README.md

Android support in Bazel

Disclaimer

NOTE: This branch is a development preview of the Starlark implementation of Android rules for Bazel. This code is incomplete and may not function as-is.

A version of Bazel built at or near head or a recent pre-release and the following flags are necessary to use these rules:

--experimental_enable_android_migration_apis
--experimental_google_legacy_api
--incompatible_java_common_parameters
--android_databinding_use_v3_4_args
--experimental_android_databinding_v2

Overview

This repository contains the Starlark implementation of Android rules in Bazel.

The rules are being incrementally converted from their native implementations in the Bazel source tree.

For the list of Android rules, see the Bazel documentation.

Getting Started

To use the Starlark Bazel Android rules, add the following to your WORKSPACE file:

load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")

# Or a later commit
RULES_ANDROID_COMMIT= "0bf3093bd011acd35de3c479c8990dd630d552aa"
RULES_ANDROID_SHA = "b75a673a66c157138ab53f4d8612a6e655d38b69bb14207c1a6675f0e10afa61"
http_archive(
    name = "rules_android",
    url = "https://github.com/bazelbuild/rules_android/archive/%s.zip" % RULES_ANDROID_COMMIT,
    sha256 = RULES_ANDROID_SHA,
    strip_prefix = "rules_android-%s" % RULES_ANDROID_COMMIT,
)
load("@rules_android//:prereqs.bzl", "rules_android_prereqs")
rules_android_prereqs()
load("@rules_android//:defs.bzl", "rules_android_workspace")
rules_android_workspace()

register_toolchains(
"@rules_android//toolchains/android:android_default_toolchain",
"@rules_android//toolchains/android_sdk:android_sdk_tools",
)

Then, in your BUILD files, import and use the rules:

load("@rules_android//rules:rules.bzl", "android_binary", "android_library")
android_binary(
    ...
)

android_library(
    ...
)