Skip to content

[build] Update stable Android SDK packages - #12371

Merged
jonathanpeppers merged 22 commits into
mainfrom
jonathanpeppers-update-androidsdk-packages
Aug 19, 2026
Merged

[build] Update stable Android SDK packages#12371
jonathanpeppers merged 22 commits into
mainfrom
jonathanpeppers-update-androidsdk-packages

Conversation

@jonathanpeppers

@jonathanpeppers jonathanpeppers commented Aug 13, 2026

Copy link
Copy Markdown
Member

Summary

  • update stable Android SDK packages:
    • Build Tools 36.0.0 → 37.0.0
    • Platform Tools 36.0.0 → 37.0.1
    • CMake 3.30.3 → 4.1.2
    • Android sources 36 r01 → 37.0 r02
    • existing platform archives for API 28–30, extension levels 33–36, and API 37.0 to their latest stable revisions
  • update the corresponding SHA-256 hashes and package catalog entries
  • keep Android command-line tools 19.0, emulator 36.4.10, and NDK r28c unchanged
  • add Build Tools 37.0.0 to the checked-in Xamarin installer manifest and make it the installer default
  • add the documented AndroidManifestSource property, accepting an absolute URI or existing local path, so dependency tests can use the checked-in manifest without weakening Release-mode local-file validation
  • fix CMake 4 invocation on Windows by removing the trailing directory separator from quoted source paths

Testing

  • built the Android SDK, installer, installer-task, bootstrap-task, and native CMake configuration projects in the relevant Debug/Release configurations
  • compared all 28 native .so outputs produced with CMake 3.30.3 and 4.1.2 across four ABIs; sizes and SHA-256 hashes were identical
  • verified Release-mode installer loading from the explicitly supplied checked-in manifest
  • Azure DevOps build 1557738: all 44 PR checks passed

Update the Android SDK package catalog, versions, and SHA-256 hashes while retaining NDK r28c and Android platform 37.0.

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

Copilot-Session: 99896160-5e3c-4560-9ab4-026504cdd4e9
Copilot AI lite review requested due to automatic review settings August 13, 2026 14:25

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

Updates the in-repo Android SDK “bootstrap” package catalog used by src/androidsdk/ so the toolchain downloads (platforms, tools, emulator, CMake, sources) match newer stable revisions, including introducing separate macOS command-line tools archives per architecture.

Changes:

  • Bumped platform package revisions (API 28–37) and updated corresponding SHA-256 hashes.
  • Updated toolchain component versions/hashes (build-tools, platform-tools, command-line tools, emulator, CMake) and added a macOS arm64 command-line tools package entry.
  • Switched the downloaded “sources” zip to the latest stable platform revision.

Reviewed changes

Copilot reviewed 2 out of 2 changed files in this pull request and generated 2 comments.

File Description
src/androidsdk/androidsdk.targets Updates platform catalog entries and toolchain package download list (including macOS arch-specific cmdline-tools and new sources zip).
Configuration.props Bumps tool versions (CMake/build-tools/platform-tools/cmdline-tools/emulator) and refreshes SHA-256 hashes, adding a new macOS arm64 cmdline-tools hash.

Comment thread src/androidsdk/androidsdk.targets
Comment thread src/androidsdk/androidsdk.targets Outdated
Keep Android sources in the API-level directory expected by the build and avoid escaping CMake source-path quotes on Windows.

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

Copilot-Session: 99896160-5e3c-4560-9ab4-026504cdd4e9
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

Copilot-Session: 99896160-5e3c-4560-9ab4-026504cdd4e9
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

Copilot-Session: 99896160-5e3c-4560-9ab4-026504cdd4e9
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

Copilot-Session: 99896160-5e3c-4560-9ab4-026504cdd4e9
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

Copilot-Session: 99896160-5e3c-4560-9ab4-026504cdd4e9
Seed workload installation from the SDK package produced by the current build so reused PR versions cannot resolve stale feed content. Omit the avdmanager device profile unless tests explicitly request one.

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

Copilot-Session: 99896160-5e3c-4560-9ab4-026504cdd4e9
The deterministic fix is pre-seeding the isolated package directory from the current build. The workload install no-cache flag did not prevent same-version feed substitution and is unnecessary.

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

Copilot-Session: 99896160-5e3c-4560-9ab4-026504cdd4e9
Disable repository Directory.Build imports when seeding the workload package cache so the temporary project does not restore Arcade dependencies from the local-only source. Use a platform-correct package directory path.

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

Copilot-Session: 99896160-5e3c-4560-9ab4-026504cdd4e9
Restore the workload extraction target to its original implementation. The generated restore project and package-cache manipulation did not correct the reused package contents and added unjustified complexity.

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

Copilot-Session: 99896160-5e3c-4560-9ab4-026504cdd4e9
Update the installer props imported before Xamarin.Android.Common.props so its conditional defaults do not pin builds to Android SDK Build Tools 36. Remove the no-longer-needed generated props cache workaround.

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

Copilot-Session: 99896160-5e3c-4560-9ab4-026504cdd4e9
Keep the installer props change scoped to Android SDK Build Tools 37.0.0, which is the value responsible for the failing dependency and incremental binding tests.

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

Copilot-Session: 99896160-5e3c-4560-9ab4-026504cdd4e9
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

Copilot-Session: 99896160-5e3c-4560-9ab4-026504cdd4e9
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

Copilot-Session: 99896160-5e3c-4560-9ab4-026504cdd4e9
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

Copilot-Session: 99896160-5e3c-4560-9ab4-026504cdd4e9
Restore the prior emulator package while keeping Xamarin manifest tests pointed at the repository feed.

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

Copilot-Session: 99896160-5e3c-4560-9ab4-026504cdd4e9
Keep the emulator update while restoring command-line tools 19.0 to avoid the avdmanager regression.

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

Copilot-Session: 99896160-5e3c-4560-9ab4-026504cdd4e9
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

Copilot-Session: 99896160-5e3c-4560-9ab4-026504cdd4e9
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

Copilot-Session: 99896160-5e3c-4560-9ab4-026504cdd4e9
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

Copilot-Session: 99896160-5e3c-4560-9ab4-026504cdd4e9
Restore emulator 36.4.10 so the newer emulator can be updated and investigated separately.

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

Copilot-Session: 99896160-5e3c-4560-9ab4-026504cdd4e9
Restore the emulator test setup files to their main-branch behavior.

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

Copilot-Session: 99896160-5e3c-4560-9ab4-026504cdd4e9
@jonathanpeppers jonathanpeppers added the ready-to-review This PR is ready to review/merge, I think any CI failures are just flaky (ignorable). label Aug 19, 2026
@jonathanpeppers

Copy link
Copy Markdown
Member Author

/review

@github-actions

github-actions Bot commented Aug 19, 2026

Copy link
Copy Markdown
Contributor

Android PR Reviewer completed successfully!

Generated by Android PR Reviewer for #12371

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

⚠️ Needs Changes

Found 1 error: an explicit AndroidManifestSource can silently fall back to the bundled Xamarin manifest when the requested source is unavailable, defeating the override and potentially installing unintended package versions.

The package metadata updates and CMake path normalization otherwise look consistent, and all 44 CI checks completed successfully.

Generated by Android PR Reviewer for #12371 · gpt56 · 205.9 AIC · ⌖ 8.84 AIC · ⊞ 25.6K
Comment /review to run again

@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 stable SDK package versions, platform/tool manifests, architecture coverage, hashes, generated props, tests, and build paths are consistent and validated.

@jonathanpeppers
jonathanpeppers merged commit 28a2ac9 into main Aug 19, 2026
44 checks passed
@jonathanpeppers
jonathanpeppers deleted the jonathanpeppers-update-androidsdk-packages branch August 19, 2026 13:07
jonathanpeppers added a commit that referenced this pull request Aug 19, 2026
…orkflow (#12374)

### Why

`src/androidsdk/androidsdk.csproj` pins Android SDK package versions/revisions/URLs/SHA-256 hashes in `Configuration.props` and `src/androidsdk/androidsdk.targets`. Google republishes tool revisions on its own cadence (see PR #12371 for the last manual refresh), and keeping these files in sync is repetitive and error-prone: it requires querying Google's manifest, distinguishing stable from preview releases, and recomputing SHA-256 hashes per host/arch since Google only publishes SHA-1.

### What this adds

**`update-androidsdk-packages` Copilot skill** (`.github/skills/update-androidsdk-packages/`)

Automates the refresh, matching the pattern from PR #12371. It enforces two hard rules:
- Never touch the Android NDK (`_XAAndroidNdk*`/`XAAndroidNdkHash*`) — out of scope, separate release cadence.
- Never add a new Android platform API level to `_PlatformPackage` — only refresh revisions/hashes of API levels already in the catalog. If a newer stable platform level exists upstream (for example, platform 37.1 while the catalog tops out at 37.0), the skill must surface that fact without adding it.

Bundled resources:
- `scripts/fetch_repo_package.cs`, `scripts/sha256_of_url.cs` — C# file-based `dotnet run` apps that query Google's `repository2-3.xml` and relevant system-image manifests, select stable packages, handle host/architecture-specific archives, and compute SHA-256 hashes after validating manifest SHA-1 and size.
- `references/package-catalog.md` — maps package families to manifest paths and `Configuration.props`/`androidsdk.targets` properties.
- `evals/evals.json` — realistic prompts covering normal updates and both hard-rule exclusions.

The skill requires building `build-tools/Xamarin.Android.Tools.BootstrapTasks/Xamarin.Android.Tools.BootstrapTasks.csproj` before validating `src/androidsdk/androidsdk.csproj`; it restores the SDK project before using `--no-restore`, validates MSBuild evaluation/XML/host-specific selection, and cleans temporary downloads.

**`skill-runner` agentic workflow** (`.github/workflows/skill-runner.md`)

A `gh-aw` workflow, modeled on `nightly-fix-finder`, that runs repository Copilot skills unattended on a weekly schedule or on demand:
- `workflow_dispatch` exposes a `skill` dropdown (currently just `update-androidsdk-packages`). Explicit selections are checked against an `ELIGIBLE_SKILLS` allowlist; blank selections choose randomly among eligible skills.
- A trusted `workflow_guard` job runs before `pre_activation` and rejects invalid dispatch contexts before protected setup begins.
- Each run reports no-ops, newly published platform levels, and errors. An exact-title check for open PRs targeting `main` prevents duplicate update PRs, while validated changes are restricted to `Configuration.props` and `src/androidsdk/androidsdk.targets`.
- The workflow documents how to add future skills and preserves the generated lock-file workflow (`skill-runner.lock.yml` is regenerated with `gh aw compile`, never hand-edited).

### Review notes

- No functional/build code is touched by this PR — it adds skill/workflow tooling only.
- The workflow builds BootstrapTasks and restores `androidsdk.csproj` before its final `--no-restore` build.
- The PAT-pool secret usage mirrors the already-approved pattern in `nightly-fix-finder.md`.
- The generated `skill-runner.lock.yml` is committed as `gh aw compile` output; changes belong in `skill-runner.md` and the lock file is regenerated, not hand-edited.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

ready-to-review This PR is ready to review/merge, I think any CI failures are just flaky (ignorable).

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants