---
name: updating-android-sdk
description: Upgrades Flutter's Android SDK dependency to a new Android API version (or preview/canary release) in packages.txt, verifies CIPD tag uniqueness, and packages/uploads the binaries using create_cipd_packages.sh across macOS, Linux, and Windows. Use whenever a user wants to pick up a new version of Android or upload Android SDK packages to CIPD.
---

# Updating Flutter Android SDK and CIPD Packages

This skill guides the agent step-by-step through configuring new Android SDK components in packages.txt, verifying tag uniqueness, and running the repository's automation script to upload cross-platform archives to Chrome Infrastructure Package Deployment (CIPD).

## Prerequisites & Permission Verification

Before modifying packages or triggering CIPD uploads, verify that the local environment and credentials are configured correctly:

1. **Verify Depot Tools**: Ensure `depot_tools` (which provides the `cipd` CLI) is available in the environment.
2. **Verify CIPD Writer Permissions**: The operation requires write access to the `flutter/android/sdk/all/` CIPD prefix. Verify access before proceeding:
   ```bash
   cipd acl-check flutter/android/sdk/all/ -writer
   ```
   If access is denied, request the user apply for the `flutter-cipd-writers` role and authenticate via `cipd auth-login`.

---

## Step 1: Configure Target SDK Packages (`packages.txt`)

The script `create_cipd_packages.sh` reads target SDK components and versions from `packages.txt`.

* **Location**: `src/flutter/tools/android_sdk/packages.txt`
* **Format**: `<package_name>:<subdirectory_to_upload>` (delimited by `:` for multi-directory uploads)

### Querying Official Package Identifiers
Always query the local or remote Android SDK repository to confirm exact package identifiers:
```bash
sdkmanager --list --include_obsolete
```

> [!IMPORTANT]
> **Canary / Preview vs. Stable API Levels**
> When adopting a pre-release or Canary Android version (such as Android 37 / Cinnamon Bun), `sdkmanager` often publishes platform components under a `.0` suffix (e.g., `platforms;android-37.0`).
> Do **not** assume or enforce an integer API level string (`platforms;android-37`) if `sdkmanager` explicitly requires `platforms;android-37.0`. Using an incorrect package string will cause subsequent downloads to fail.

### Example `packages.txt` Update
To add Android 37 platform and build-tools:
```text
platforms;android-37.0,platforms;android-36,platforms;android-35,platforms;android-34:platforms
cmdline-tools;latest:cmdline-tools
build-tools;37.0.0,build-tools;36.1.0,build-tools;36.0.0,build-tools;35.0.0:build-tools
platform-tools:platform-tools
tools:tools
cmake;3.22.1:cmake
ndk;28.2.13676358:ndk
```

---

## Step 2: Verify Tag Uniqueness & Run Upload Script

> [!NOTE]
> **Standardizing CIPD Version Tags**
> Use clean version descriptors (e.g., `37v1`, `37v2`). Do **not** append legacy speculative suffixes such as `unmodified` now that `create_cipd_packages.sh` is the standardized upload pipeline.

CIPD tags and refs are immutable. Before executing the script, verify that your proposed version tag (e.g., `37v1`) has **not** already been registered:

```bash
cipd describe flutter/android/sdk/all/mac-arm64 -version version:<VERSION_TAG>
```

* **If the tag is unused**: The command returns exit code 1 with `Error: no such tag.`. You may proceed.
* **If the tag exists**: The command outputs the existing `Package:` and `Instance ID:`. You **must** choose a new, unique version tag.

Once uniqueness is confirmed, execute the script:

```bash
cd src/flutter/tools/android_sdk
./create_cipd_packages.sh <VERSION_TAG> <PATH_TO_LOCAL_SDK>
```

### Script Execution Mechanics
1. **Clean Workspace**: The script creates a pristine temporary working directory (`mktemp -d`) to prevent cache reuse.
2. **Cross-Platform Bundles**: It leverages `REPO_OS_OVERRIDE` to fetch packages for `linux`, `macosx` (`amd64` and `arm64`), and `windows`.
3. **License Acceptance**: All required Android SDK licenses are automatically accepted and packaged inside the upload directory.
4. **CIPD Creation**: It calls `cipd create` to copy and tag packages under `flutter/android/sdk/all/<cipd_name>`.

---

## Step 3: Verify CIPD Upload & Tagging

Verify that the packages were successfully registered across all architecture targets before rolling Engine dependencies:

```bash
# macOS Apple Silicon (arm64)
cipd describe flutter/android/sdk/all/mac-arm64 -version version:<VERSION_TAG>

# macOS Intel (amd64)
cipd describe flutter/android/sdk/all/mac-amd64 -version version:<VERSION_TAG>

# Linux (amd64)
cipd describe flutter/android/sdk/all/linux-amd64 -version version:<VERSION_TAG>

# Windows (amd64)
cipd describe flutter/android/sdk/all/windows-amd64 -version version:<VERSION_TAG>
```

Ensure the output displays a valid **Instance ID** and confirms the requested tag is bound to the ref.

---

## Troubleshooting & Failure Mitigation

If any operation fails during package selection, authorization, or script execution, apply these precise remedies:

### 1. Permission Denied (`cipd acl-check` or `cipd create` fails)
* **Symptom**: `cipd acl-check` reports no roles, or uploading aborts with authorization errors.
* **Mitigation**: Direct the user to apply for the `flutter-cipd-writers` role (via MDB/Grants `8h/flutter-cipd-writers`). Once granted, run `cipd auth-login` to refresh local access credentials before retrying.

### 2. Package Resolution Failure (`sdkmanager` aborts during download)
* **Symptom**: `create_cipd_packages.sh` exits with `Warning: Failed to find package '<package_name>'`.
* **Mitigation**: Do not guess or enforce strict integer rules (e.g., `platforms;android-37`). Run `sdkmanager --list --include_obsolete` to inspect published remote tags, and correct the exact package string in `packages.txt` (such as keeping `.0` preview suffixes like `platforms;android-37.0`).

### 3. Interrupted Uploads & Tag Deprecation
* **Symptom**: A network interruption halts a multi-platform upload partway, or an incorrect package bundle was uploaded.
* **Mitigation**: CIPD uploads are final and cannot be overwritten. If a tag was partially uploaded or needs deprecation, direct the user to the internal LuCI Playbook guide for removing tags ([Removing Duplicated CIPD Tags](https://goto.google.com/flutter-luci-playbook#remove-duplicated-cipd-tags)). When retrying an upload after a failure, you **must** select a new, unique version tag (e.g., bumping `v1` to `v2`).

### 4. Missing Command-Line Tools
* **Symptom**: The script outputs `SDK directory does not contain cmdline-tools`.
* **Mitigation**: Ensure the path provided points to a valid Android SDK root containing `cmdline-tools/latest/bin/sdkmanager` (typically `~/Library/Android/sdk` on macOS).
