[build] Update stable Android SDK packages - #12371
Conversation
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
There was a problem hiding this comment.
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. |
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
|
/review |
|
✅ Android PR Reviewer completed successfully!
|
There was a problem hiding this comment.
⚠️ 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
|
@dalexsoto review |
dalexsoto
left a comment
There was a problem hiding this comment.
The stable SDK package versions, platform/tool manifests, architecture coverage, hashes, generated props, tests, and build paths are consistent and validated.
…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>
Summary
AndroidManifestSourceproperty, accepting an absolute URI or existing local path, so dependency tests can use the checked-in manifest without weakening Release-mode local-file validationTesting
.sooutputs produced with CMake 3.30.3 and 4.1.2 across four ABIs; sizes and SHA-256 hashes were identical