@@ -49,16 +49,31 @@ IO_GRPC_GRPC_JAVA_ARTIFACTS = [
4949]
5050# GRPC_DEPS_END
5151
52+ ANDROID_ARTIFACTS = [
53+ "androidx.annotation:annotation:1.6.0" ,
54+ "androidx.annotation:annotation-jvm:1.6.0" ,
55+ "androidx.core:core:1.13.1" ,
56+ "androidx.lifecycle:lifecycle-common:2.6.2" ,
57+ ]
58+
5259bazel_dep (name = "abseil-cpp" , version = "20250512.1" )
5360bazel_dep (name = "bazel_jar_jar" , version = "0.1.11.bcr.1" )
5461bazel_dep (name = "bazel_skylib" , version = "1.7.1" )
5562bazel_dep (name = "googleapis" , version = "0.0.0-20260514-1dbb1a14" , repo_name = "com_google_googleapis" )
5663bazel_dep (name = "grpc-proto" , version = "0.0.0-20240627-ec30f58.bcr.1" , repo_name = "io_grpc_grpc_proto" )
5764bazel_dep (name = "protobuf" , version = "33.4" , repo_name = "com_google_protobuf" )
65+ bazel_dep (name = "rules_android" , version = "0.7.2" )
5866bazel_dep (name = "rules_cc" , version = "0.0.9" )
5967bazel_dep (name = "rules_java" , version = "9.1.0" )
6068bazel_dep (name = "rules_jvm_external" , version = "6.0" )
6169
70+ android_sdk_repository_extension = use_extension (
71+ "@rules_android//rules/android_sdk_repository:rule.bzl" ,
72+ "android_sdk_repository_extension" ,
73+ )
74+ use_repo (android_sdk_repository_extension , "androidsdk" )
75+ register_toolchains ("@androidsdk//:sdk-toolchain" , "@androidsdk//:all" )
76+
6277maven = use_extension ("@rules_jvm_external//:extensions.bzl" , "maven" )
6378maven .install (
6479 artifacts = IO_GRPC_GRPC_JAVA_ARTIFACTS ,
@@ -67,7 +82,36 @@ maven.install(
6782 ],
6883 strict_visibility = True ,
6984)
70- use_repo (maven , "maven" )
85+
86+ # We isolate Android-specific deps in this separate repo ('grpc_android_maven') instead of the one
87+ # above (having default name 'maven').
88+ #
89+ # Under bzlmod, rules_jvm_external merges all contributions to the same named repository (like the
90+ # default 'maven' repo) across the entire dependency graph. If we put Android dependencies there,
91+ # then *every* downstream consumer's merged 'maven' repository would include these Android
92+ # artifacts.
93+ #
94+ # Because merged repositories are resolved using only the root module's (the consumer's)
95+ # repository list, any consumer without 'maven.google.com' configured in their root module
96+ # would fail to resolve these artifacts, breaking their build even if they don't use Android.
97+ #
98+ # By using a distinct name ('grpc_android_maven'), we prevent merging. This repository is resolved
99+ # independently, allowing it to use grpc-java's own repository config (which includes
100+ # maven.google.com) without affecting downstream consumers' default 'maven' repo.
101+ maven .install (
102+ name = "grpc_android_maven" ,
103+ artifacts = ANDROID_ARTIFACTS ,
104+ repositories = [
105+ "https://repo.maven.apache.org/maven2/" ,
106+ "https://maven.google.com" , # for androidx.*
107+ ],
108+ strict_visibility = True ,
109+ # Enable Starlark Android rules in rules_jvm_external for Bazel 8+ compatibility.
110+ use_starlark_android_rules = True ,
111+ # Explicitly set the label for aar_import since the default guess is incorrect under Bzlmod.
112+ aar_import_bzl_label = "@rules_android//rules:rules.bzl" ,
113+ )
114+ use_repo (maven , "maven" , "grpc_android_maven" )
71115
72116maven .override (
73117 coordinates = "com.google.protobuf:protobuf-java" ,
@@ -161,3 +205,7 @@ maven.override(
161205 coordinates = "io.grpc:grpc-util" ,
162206 target = "@io_grpc_grpc_java//util" ,
163207)
208+ maven .override (
209+ coordinates = "io.grpc:grpc-binder" ,
210+ target = "@io_grpc_grpc_java//binder" ,
211+ )
0 commit comments