Skip to content

Add SDK bootstrap and sdkmanager wrapper (move from android-platform-support) #271

@rmarinho

Description

@rmarinho

Summary

Add SDK bootstrap and management capabilities to Xamarin.Android.Tools.AndroidSdk so that consumers can programmatically set up an Android SDK from scratch and manage packages via sdkmanager.

Background

The android-platform-support (internal) repository has AndroidSDKInstaller with a full SDK install pipeline. For the public package, we want a simpler approach:

  1. Bootstrap: Download and unzip Android command-line tools from the manifest feed (no hardcoded URLs)
  2. Manage: Use the extracted sdkmanager CLI for package install/uninstall/list/update operations

This is needed by MAUI DevTools CLI (maui android install, maui android sdk install/list/uninstall).

Proposed API Surface

  • SdkManager.BootstrapAsync(targetPath) — download command-line tools from manifest feed, SHA-1 verify, unzip to cmdline-tools/latest/
  • SdkManager.InstallAsync(packages) — invoke sdkmanager to install packages
  • SdkManager.UninstallAsync(packages) — invoke sdkmanager to uninstall packages
  • SdkManager.ListAsync() — list installed and available packages
  • SdkManager.UpdateAsync() — update all installed packages

Bootstrap Flow

  1. Read manifest feed → resolve command-line tools URL + SHA-1 checksum for current OS/arch
  2. Download & verify command-line tools archive
  3. Unzip to \/cmdline-tools/latest/
  4. Use the now-available sdkmanager for all subsequent operations

Manifest Feeds

  • Xamarin Android Manifest: https://aka.ms/AndroidManifestFeed/d{version} — command-line tools, platform-tools, emulator
  • Google SDK Repository: https://dl.google.com/android/repository/repository2-3.xml — platforms, build-tools, system images

All downloads must be SHA-1 verified against manifest checksums before installation.

Consumer

Related

  • MAUI DevTools spec §6.8: Shared Libraries & Code Reuse
  • MAUI DevTools spec §6.8.1: Manifest-Driven Downloads & Checksum Verification

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions