Skip to content

Keep Xamarin.GooglePlayServices.Ads.Lite frozen at 24.0.0 to preserve Android.Gms.Ads namespaces#1431

Closed
Copilot wants to merge 5 commits into
mainfrom
copilot/fix-google-play-services-ads-lite-binding
Closed

Keep Xamarin.GooglePlayServices.Ads.Lite frozen at 24.0.0 to preserve Android.Gms.Ads namespaces#1431
Copilot wants to merge 5 commits into
mainfrom
copilot/fix-google-play-services-ads-lite-binding

Conversation

Copy link
Copy Markdown
Contributor

Copilot AI commented Jun 2, 2026

Xamarin.GooglePlayServices.Ads.Lite is pinned/frozen at play-services-ads-lite:24.0.0 while full Ads is on 25.3.0. An attempt was made to unfreeze and update it to the latest upstream stable version, but doing so removes public API namespaces that consumers depend on, so this PR keeps the entry frozen at 24.0.0 and documents why.

Upstream emptied the play-services-ads-lite artifact at 24.3.0 and moved its implementation into play-services-ads-api. There is no -android suffixed variant — play-services-ads-lite-android returns 404 on Google Maven at every version. So updating the entry to 25.0.0 would ship an empty package and drop the Android.Gms.Ads.* namespaces entirely (the verify-namespace-file CI check fails with those namespaces listed as Removed).

Those Android.Gms.Ads.* namespaces are produced only by the frozen Xamarin.GooglePlayServices.Ads.Lite 24.0.0 binding. Xamarin.GooglePlayServices.Ads.Api binds the same upstream types but deliberately under the Google.Android.Gms.Ads.* namespace (both prefixes are present in published-namespaces.txt) to avoid duplicate-type collisions. Because no upstream artifact still carries those classes under the original namespace, the only way to preserve Android.Gms.Ads.* is to keep Lite frozen at 24.0.0 — which is why it was pinned in the first place.

Upstream AAR class counts (verified by downloading the AARs):

Artifact Classes
play-services-ads-lite:24.0.0 1189
play-services-ads-lite:24.3.0 0 (stub → depends on play-services-ads-api)
play-services-ads-lite:25.0.0 0 (stub → depends on play-services-ads-api)

Changes

  • config.json — Kept the play-services-ads-lite entry frozen at 24.0.0 (frozen: true, nugetVersion 124.0.0.5), retaining its extraDependencies and the play-services-ads-base:24.0.0 dependency-only entry required by the frozen lite POM.
  • config.json — Added a comments field documenting that the entry is intentionally frozen because upstream became an empty stub from 24.3.0 onward, and that consumers needing newer Ads APIs should use Xamarin.GooglePlayServices.Ads or Xamarin.GooglePlayServices.Ads.Api.

The net change relative to main is just this documentation comment; the binding stays frozen so the namespaces are preserved and CI passes.

Notes

  • The generated binding project files are not committed (CI regenerates them from config.json), so config.json is the only source of truth changed here.
  • An alternative would be to accept the breaking change and drop Android.Gms.Ads.* in favor of Google.Android.Gms.Ads.* from Xamarin.GooglePlayServices.Ads.Api; this has been flagged on the PR for author confirmation.

Co-authored-by: jonathanpeppers <840039+jonathanpeppers@users.noreply.github.com>
Copilot AI changed the title [WIP] Fix Xamarin.GooglePlayServices.Ads.Lite binding to use updated version Document intentional freeze of Xamarin.GooglePlayServices.Ads.Lite at upstream 24.0.0 Jun 2, 2026
Copilot AI requested a review from jonathanpeppers June 2, 2026 16:36
@jonathanpeppers
Copy link
Copy Markdown
Member

@copilot can you actually attempt to "unfreeze" this, and update to latest?

Co-authored-by: jonathanpeppers <840039+jonathanpeppers@users.noreply.github.com>
Copy link
Copy Markdown
Contributor Author

Copilot AI commented Jun 2, 2026

@copilot can you actually attempt to "unfreeze" this, and update to latest?

Done in 7864b94. I unfroze the entry and bumped it to the latest stable, play-services-ads-lite:25.0.0 (NuGet 125.0.0) — this matches exactly what binderator update produces once frozen is removed. I also dropped the now-orphaned play-services-ads-base:24.0.0 dependency-only entry, which only existed to satisfy the hard [24.0.0] pin from the old lite POM.

One thing to flag before merging: I verified the upstream AARs and play-services-ads-lite is empty from 24.3.0 onward —

Artifact Classes
play-services-ads-lite:24.0.0 1189
play-services-ads-lite:24.3.0 0
play-services-ads-lite:25.0.0 0

25.0.0's classes.jar has zero .class files and its POM depends only on play-services-ads-api. So the rebuilt Xamarin.GooglePlayServices.Ads.Lite 125.0.0 will be an empty package that just transitively pulls in Xamarin.GooglePlayServices.Ads.Api. Existing consumers referencing the old Lite types will see them disappear (they moved into ...Ads.Api). That's the upstream-intended behavior, but wanted to confirm shipping an empty redirect package is what you want here rather than keeping it pinned.

Co-authored-by: jonathanpeppers <840039+jonathanpeppers@users.noreply.github.com>
Copilot AI changed the title Document intentional freeze of Xamarin.GooglePlayServices.Ads.Lite at upstream 24.0.0 Unfreeze Xamarin.GooglePlayServices.Ads.Lite and update to latest 25.0.0 Jun 2, 2026
@jonathanpeppers
Copy link
Copy Markdown
Member

@copilot do we need to add play-services-ads-lite with some -android suffix?

Co-authored-by: jonathanpeppers <840039+jonathanpeppers@users.noreply.github.com>
Copy link
Copy Markdown
Contributor Author

Copilot AI commented Jun 2, 2026

@copilot do we need to add play-services-ads-lite with some -android suffix?

No — there's no -android suffixed artifact. Upstream only publishes com.google.android.gms:play-services-ads-lite; play-services-ads-lite-android 404s on Google Maven at every version. From 24.3.0 onward the play-services-ads-lite AAR is a genuinely empty stub (0 classes) whose POM just depends on play-services-ads-api.

You're right that the namespaces shouldn't disappear. I dug into why CI flagged them: the Android.Gms.Ads.* namespaces are produced only by the Xamarin.GooglePlayServices.Ads.Lite 24.0.0 binding. Xamarin.GooglePlayServices.Ads.Api binds the same upstream types but deliberately under the Google.Android.Gms.Ads.* namespace (to avoid duplicate-type collisions with Lite — both are in published-namespaces.txt). So updating Lite to the empty 25.0.0 drops Android.Gms.Ads.* entirely, which is the verify-namespace-file failure.

Since there's no upstream artifact that still carries those classes, the only way to keep Android.Gms.Ads.* is to leave Lite frozen at 24.0.0 — which is exactly why it was pinned. I've reverted the unfreeze and kept it frozen at 24.0.0 (restoring the play-services-ads-base:24.0.0 dependency it needs), so the namespaces are preserved and CI passes. The entry keeps a comment documenting the reason. Let me know if you'd instead like to accept the breaking change and drop Android.Gms.Ads.* in favor of Google.Android.Gms.Ads.* from Ads.Api.

Copilot AI changed the title Unfreeze Xamarin.GooglePlayServices.Ads.Lite and update to latest 25.0.0 Keep Xamarin.GooglePlayServices.Ads.Lite frozen at 24.0.0 to preserve Android.Gms.Ads namespaces Jun 2, 2026
@jonathanpeppers
Copy link
Copy Markdown
Member

Closing in favor of #1435 (binding the new GMA Next-Gen SDK artifact). Xamarin.GooglePlayServices.Ads.Lite will remain frozen at 24.0.0 since upstream play-services-ads-lite became an empty stub from 24.3.0 onward.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Xamarin.GooglePlayServices.Ads.Lite still binds play-services-ads-lite 24.0.0 while full Ads package is on 25.3.0

2 participants