Skip to content

Pin Protobuf JavaLite to 3.25.8 - #1537

Merged
jonathanpeppers merged 5 commits into
mainfrom
jonathanpeppers-reproduce-firestore-d8
Aug 27, 2026
Merged

Pin Protobuf JavaLite to 3.25.8#1537
jonathanpeppers merged 5 commits into
mainfrom
jonathanpeppers-reproduce-firestore-d8

Conversation

@jonathanpeppers

@jonathanpeppers jonathanpeppers commented Aug 25, 2026

Copy link
Copy Markdown
Member

Firebase Protolite and gRPC depend on Protobuf JavaLite 3.25.x, but our NuGet mapping had independently advanced them to JavaLite 4.x. Starting in JavaLite 4.27, the artifact contains DescriptorProtos bytecode that is also embedded in Firebase Protolite, causing D8 duplicate-class failures in consuming Android apps.

This change freezes Xamarin.Protobuf.JavaLite at the compatible 3.25.8 version while retaining a frozen dependency-only 4.26.1 mapping for MediaPipe, the last compatible 4.x release before the conflicting classes appeared. It bumps every already-published package in the affected Firebase, MediaPipe, and Cronet reverse dependency graphs so their immutable NuGet metadata carries the corrected dependencies; currently unpublished consumers retain their existing versions. Generated artifact documentation and Component Governance metadata are refreshed from the completed config.

Fixes #1535

Keep Firebase and gRPC on their compatible Protobuf 3.x dependency line while retaining a dependency-only 4.26.1 mapping for MediaPipe. Bump the affected package revisions and refresh generated API and artifact metadata.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

Copilot-Session: e5da0c51-e7ab-4c79-a052-56ff6051ee10
Copilot AI lite review requested due to automatic review settings August 25, 2026 20:43

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Pins the repository’s Protobuf JavaLite mapping to a Protobuf 3.25.x version to prevent downstream Android D8 duplicate-class failures caused by newer JavaLite artifacts overlapping with Firebase Protolite bytecode. This aligns the NuGet dependency graph for Firebase Firestore / Protolite and gRPC with their expected Protobuf 3.25.x baseline while still allowing MediaPipe’s older 4.26.1 requirement via a dependency-only mapping.

Changes:

  • Pin com.google.protobuf:protobuf-javalite / Xamarin.Protobuf.JavaLite to 3.25.8 and mark it frozen.
  • Bump NuGet revisions for the affected Firebase and gRPC packages.
  • Add a dependency-only mapping for protobuf-javalite 4.26.1 to satisfy MediaPipe’s explicit requirement.

Reviewed changes

Copilot reviewed 2 out of 3 changed files in this pull request and generated 1 comment.

File Description
docs/artifact-list-with-versions.md Updates the published artifact/version table to reflect the new JavaLite pin and bumped package revisions.
config.json Pins JavaLite to 3.25.8 (frozen), bumps dependent package revisions, and adds a dependency-only JavaLite 4.26.1 mapping for MediaPipe.

💡 Add a code-review agent skill for context-aware, tailored reviews. Learn more in the docs.

Comment thread config.json
Prevent update-config from advancing the dependency-only 4.26.1 mapping beyond the last JavaLite release without the conflicting DescriptorProtos bytecode.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

Copilot-Session: e5da0c51-e7ab-4c79-a052-56ff6051ee10
Clarify why the MediaPipe dependency mapping must remain at 4.26.1. The Maven 3.25.8 artifact and parent POM are now seeded in the public CI mirror.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

Copilot-Session: e5da0c51-e7ab-4c79-a052-56ff6051ee10
@jonathanpeppers

Copy link
Copy Markdown
Member Author

@dalexsoto review

@dalexsoto dalexsoto left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The 4.26.1 freeze is fixed, but two independent blocking completeness gaps remain.

  1. Propagate every changed dependency revision. The JavaLite remap changes generated NuGet dependencies for five already-published packages whose versions are unchanged in config.json: Xamarin.Firebase.InAppMessaging (config.json:4019), Xamarin.Firebase.Perf (config.json:4199), Xamarin.Google.MediaPipe.Tasks.GenAI (config.json:4316), and Cronet Embedded/Shared (config.json:5057,5073). Binderator resolves each POM dependency through the new mappings (BindingProjectDependencyVerifier.cs:31-50) and packs that result (source/AndroidXProject.cshtml:155-169), but NuGet.org already contains these exact immutable versions with the old Protolite/gRPC/JavaLite dependencies. For example, the published Perf package still requires both Protolite .6 and JavaLite 4.35.1.1, so the D8 duplicate-class graph remains. Bump those five packages, then propagate the revisions through the already-published reverse consumers: InAppMessaging Display; both LocalAgents packages; Cronet API, Common, Fallback, and HttpEngine Native Provider; Google Play Services Cronet; Google Android Recaptcha; and Firebase Auth. The currently unpublished Media3 DataSource Cronet and Ads Mobile SDK versions can be generated against the corrected chain without revision bumps.

  2. Regenerate cgmanifest.json. Its Firestore, Protolite, JavaLite, and gRPC entries still report 126.0.2.3, 118.0.1.6, 4.35.1/4.35.1.1, and 1.82.0.1 (cgmanifest.json:6852-6856,7242-7246,7837-7841,8199-8203). The documented generator copies every non-dependency-only mapping from config.json into this manifest (utilities.cake:282-341), so Component Governance and the repository’s published component/license inventory remain stale. Regenerate and commit the manifest after completing the revision cascade.

Publish new immutable package revisions throughout the Protolite, MediaPipe, and Cronet reverse dependency graphs. Refresh artifact documentation and Component Governance metadata from the completed config.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

Copilot-Session: e5da0c51-e7ab-4c79-a052-56ff6051ee10
Include the latest CI configuration before stacking the XBD package revision PR.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

Copilot-Session: e5da0c51-e7ab-4c79-a052-56ff6051ee10
@jonathanpeppers

Copy link
Copy Markdown
Member Author

Addressed the requested completeness gaps: bumped every already-published package in the affected reverse dependency graphs, left only the two unpublished consumers unchanged, and regenerated both artifact documentation and cgmanifest.json. PR #1539 is now stacked on this branch so its overlapping XBD revisions retain the corrected dependency graph.

@dalexsoto dalexsoto left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The complete published JavaLite reverse-dependency closure now has new immutable revisions, and all 701 non-dependency mappings match the regenerated artifact and Component Governance inventories.

@jonathanpeppers
jonathanpeppers merged commit 49d12e0 into main Aug 27, 2026
2 checks passed
@jonathanpeppers
jonathanpeppers deleted the jonathanpeppers-reproduce-firestore-d8 branch August 27, 2026 18:51
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Xamarin.Firebase.Firestore 126.0.2.3 fails D8 packaging due to duplicate Protolite/JavaLite classes

3 participants