bazelbuild / bazelbuild/rules_android

`dex_desugar_aspect` fails to traverse proto runtime deps under `--incompatible_enable_proto_toolchain_resolution`

Open
#497 0 comments 0 reactions 0 assignees View on GitHub
Dominant language
Java
Stars
203
Forks
95
PR merge metrics
No merged PRs in 30d

Description

### Problem

Any `android_binary` with a transitive dependency on `java_lite_proto_library` fails at analysis time when `--incompatible_enable_proto_toolchain_resolution` is enabled (the Bazel 9 default):

```
Error in fail: Dependencies on .jar artifacts are not allowed in Android binaries,
please use a java_import to depend on ../protobuf+/java/core/liblite.jar.
If this is an implicit dependency then the rule that introduces it will need to be fixed to account for it correctly.
```

### Root Cause
`dex_desugar_aspect` traverses dependencies via the attributes listed in `_ATTR_ASPECTS` (`rules/dex_desugar_aspect.bzl`). This list includes `_aspect_proto_toolchain_for_javalite` and `_proto_toolchain_for_javalite`, which are the legacy (pre-toolchain-resolution) attributes that `java_lite_proto_library` used to wire in the proto runtime.

With `--incompatible_enable_proto_toolchain_resolution`, proto runtime dependencies are resolved via Bazel's toolchain mechanism (`@protobuf//bazel/private:javalite_toolchain_type`) instead of those explicit rule attributes. The runtime jar (`@protobuf//java/core:lite` → `liblite.jar`) is still added to `JavaInfo.transitive_runtime_jars` by `java_lite_proto_library`, so it appears on the classpath. But because the `dex_desugar_aspect` never traversed it, the jar is absent from `dex_archives_dict`.

In `_to_dexed_classpath` (`rules/dex.bzl`), any classpath jar missing from both `dex_archives_dict` and `runtime_jars_dict` triggers a `fail()`.

### How to Reproduce
1. Create a `proto_library` + `java_lite_proto_library` target
2. Depend on it (transitively or directly) from an `android_binary`
3. Build with `--incompatible_enable_proto_toolchain_resolution` (Bazel 9 default)
```
bazel build --incompatible_enable_proto_toolchain_resolution //my:android_app
```

### Environment
- Bazel 9.1.0
- protobuf 33.4
- rules_android 0.7.2

### Expected Behavior
The `dex_desugar_aspect` should handle proto runtime jars resolved via toolchain resolution the same way it handles those discovered through legacy rule attributes.

### Workaround
Setting `--noincompatible_enable_proto_toolchain_resolution` restores the legacy behavior, but this flag is deprecated in Bazel 9.

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.