Default output_jar_creator to bazel in apk_packaging.bzl.

In CL 959227250, output_jar_creator was defaulted to "bazel" in
rules/java.bzl:singlejar, and removed from rules/android_binary/impl.bzl.
However, rules/apk_packaging.bzl still defaulted output_jar_creator = ""
in _process() and output_jar_creator = None in _build_apk(), and forwarded
the argument to java.singlejar().

Because rules/java.bzl checks `if output_jar_creator:`, passing "" or None
caused the "bazel" default to be bypassed for base module packaging,
producing "Created-By: singlejar" (48 bytes). Feature modules, which call
java.singlejar() directly, picked up "Created-By: bazel" (44 bytes),
triggering Bundletool EntryClashValidator InvalidBundleException.

Defaulting output_jar_creator = "bazel" in both _process() and _build_apk()
ensures consistent 44-byte MANIFEST.MF headers across all module splits.

PiperOrigin-RevId: 967283865
Change-Id: I3bfe26031f086a23cd2912bc07e2452604668952
1 file changed
tree: eba06f22162a913e49ed46e2df13d305c9dc5e99
  1. .bazelci/
  2. .bcr/
  3. .github/
  4. android/
  5. bzlmod_extensions/
  6. contrib/
  7. examples/
  8. flags/
  9. kokoro/
  10. mobile_install/
  11. providers/
  12. py_support/
  13. rules/
  14. src/
  15. stardoc/
  16. test/
  17. third_party/
  18. toolchains/
  19. tools/
  20. .bazelignore
  21. .bazelrc
  22. .bazelversion
  23. .gitignore
  24. android_persistent_workers.bazelrc
  25. android_sdk_supplemental_repository.bzl
  26. AUTHORS
  27. BUILD
  28. CONTRIBUTING.md
  29. CONTRIBUTORS
  30. defs.bzl
  31. defs_dev.bzl
  32. go.mod
  33. go.sum
  34. groups
  35. LICENSE
  36. MODULE.bazel
  37. prereqs.bzl
  38. project.config
  39. README.md
  40. ROADMAP.md
  41. robolectric-bazel.patch
  42. rules_android_maven_install.json
  43. WORKSPACE
  44. 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 recent version of Bazel (7.4+, 8.0+, HEAD, Bazel 9 pre-release) is required.

This ruleset depends on Protobuf, which has a minimum C++ language level of 17 (as of Protobuf v30, ~2025 Q3). Depending on your system‘s compiler version, you may have to set -std=c++17 in your C++ toolchain arguments. This repository’s .bazelrc file provides a minimal set of Bazel configuration flags to build an Android app.

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.

Stardoc for the Android rules can be found at https://bazelbuild.github.io/rules_android.

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")
http_archive(
    name = "rules_android",
    sha256 = "fe3d8c4955857b44019d83d05a0b15c2a0330a6a0aab990575bb397e9570ff1b",
    strip_prefix = "rules_android-0.6.0-alpha1",
    url = "https://github.com/bazelbuild/rules_android/releases/download/v0.6.0-alpha1/rules_android-v0.6.0-alpha1.tar.gz",
)

# Android rules dependencies
load("@rules_android//:prereqs.bzl", "rules_android_prereqs")
rules_android_prereqs()

##### rules_java setup for rules_android #####
load("@rules_java//java:rules_java_deps.bzl", "rules_java_dependencies")
rules_java_dependencies()
# note that the following line is what is minimally required from protobuf for the java rules
# consider using the protobuf_deps() public API from @com_google_protobuf//:protobuf_deps.bzl
load("@com_google_protobuf//bazel/private:proto_bazel_features.bzl", "proto_bazel_features")  # buildifier: disable=bzl-visibility
proto_bazel_features(name = "proto_bazel_features")
# register toolchains
load("@rules_java//java:repositories.bzl", "rules_java_toolchains")
rules_java_toolchains()

##### rules_jvm_external setup for rules_android #####
load("@rules_jvm_external//:repositories.bzl", "rules_jvm_external_deps")
rules_jvm_external_deps()
load("@rules_jvm_external//:setup.bzl", "rules_jvm_external_setup")
rules_jvm_external_setup()

##### rules_android setup #####
load("@rules_android//:defs.bzl", "rules_android_workspace")
rules_android_workspace()

# Android SDK setup
load("@rules_android//rules:rules.bzl", "android_sdk_repository")
android_sdk_repository(
    name = "androidsdk",
)

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

Or, if you want to use bzlmod, add the following to your MODULE.bazel file:

MODULE.bazel:

bazel_dep(name = "rules_java", version = "7.11.1")
bazel_dep(name = "bazel_skylib", version = "1.3.0")

bazel_dep(name = "rules_android", version = "0.6.5")

remote_android_extensions = use_extension(
    "@rules_android//bzlmod_extensions:android_extensions.bzl",
    "remote_android_tools_extensions")
use_repo(remote_android_extensions, "android_tools")

android_sdk_repository_extension = use_extension("@rules_android//rules/android_sdk_repository:rule.bzl", "android_sdk_repository_extension")
use_repo(android_sdk_repository_extension, "androidsdk")

register_toolchains("@androidsdk//:sdk-toolchain", "@androidsdk//:all")

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

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

android_library(
   ...
)