play-billing-library-version-upgrade — Claude Code skill
Walks an Android project from any legacy Google Play Billing Library version to the current stable one. It finds the Gradle dependency itself and rebuilds after every step.
npx skills add android/skills --skill play-billing-library-version-upgrade -a claude-codeWhat play-billing-library-version-upgrade does
The skill takes an Android project through a Play Billing Library upgrade. It looks for com.android.billingclient:billing in build.gradle, build.gradle.kts or libs.versions.toml, tries a build right away, and only scans the source for deprecated artifacts once that build falls over. The starting point comes from those artifacts: leftover SkuDetails means the project is treated as PBL v7 or older, whatever the version string claims.
From there it reads the migration guide and release notes for each major jump, prints a checklist of required edits, and works down the list. Two reference files ship with it: references/migration-logic.md holds the refactoring patterns, references/version-checklist.md the per-version checks.
More than two majors behind means a stepped path, two versions at a time, with ./gradlew assembleDebug after each hop. Skip that and missed breaking changes surface on the final version instead of the intermediate one. SDK requirements get aligned too; PBL 9 needs compileSdk 35. It closes with ./gradlew test, ./gradlew clean assembleDebug, ./gradlew sync and ./gradlew build, then explains each removal in the final report, such as dropping a hand-rolled retryConnection() now that enableAutoServiceReconnection() exists.
What it helps with
- Bump
com.android.billingclient:billingto the latest stable release - Work out the real PBL version when Gradle and the code disagree
- Swap deprecated calls like
SkuDetailsfor current classes - Split a multi-major jump into steps with a build check between them
- Run the version checklist across every skipped release before shipping
Example prompts for the agent
- Upgrade Play Billing Library to the latest stable version in this project, the dependency is in
libs.versions.toml - There is still
SkuDetailsin the billing code, figure out the effective PBL version and migrate it - Walk the version checklist for every skipped PBL release and run
./gradlew test
How to install play-billing-library-version-upgrade
1Skills CLI (Vercel)
npx skills add android/skills --skill play-billing-library-version-upgrade -a claude-code2Manually: put the files in place
~/.claude/skills/play-billing-library-version-upgrade/SKILL.mdCopy the whole skill folder; for one project use .claude/skills/play-billing-library-version-upgrade/
1Skills CLI (Vercel)
npx skills add android/skills --skill play-billing-library-version-upgrade -a codex2Manually: put the files in place
.agents/skills/play-billing-library-version-upgrade/SKILL.mdFor all projects use ~/.agents/skills/
1Skills CLI (Vercel)
npx skills add android/skills --skill play-billing-library-version-upgrade -a cursor2Manually: put the files in place
.cursor/skills/play-billing-library-version-upgrade/SKILL.mdCursor also reads .agents/skills/ and .claude/skills/
1GitHub CLI
gh skill install android/skills play-billing-library-version-upgrade2Manually: put the files in place
.github/skills/play-billing-library-version-upgrade/SKILL.md1Skills CLI (Vercel)
npx skills add android/skills --skill play-billing-library-version-upgrade -a gemini-cli2Platform CLI
gemini skills install https://github.com/android/skills --path play/play-billing-library-version-upgradeManually: put the files in place
.devin/skills/play-billing-library-version-upgrade/SKILL.mdThe legacy .windsurf/skills/ path still works
Skills CLI (Vercel)
npx skills add android/skills --skill play-billing-library-version-upgrade -a opencodeClaude.ai
Zip the folder and upload it in Settings → Capabilities → Skills
Step by step, with commands for each platform: How to install skills in Claude Code: five ways
Questions about play-billing-library-version-upgrade
How do I install play-billing-library-version-upgrade in Claude Code?
Run npx skills add android/skills --skill play-billing-library-version-upgrade -a claude-code. The skill file then sits at ~/.claude/skills/play-billing-library-version-upgrade/SKILL.md.
What does play-billing-library-version-upgrade do?
It migrates an Android project off a legacy Play Billing Library version: locates the dependency, works out the effective version from deprecated APIs, draws up the edit plan, then verifies the result with tests and a build.
Does it migrate directly or in steps?
Within two major versions of the target it migrates directly. Further behind, it moves two major versions at a time and runs ./gradlew assembleDebug after each one.
Source text
SKILL.md · Apache-2.0
---
name: play-billing-library-version-upgrade
description: Use this skill when upgrading or migrating an Android project from any
legacy Google Play Billing Library (PBL) version to the latest stable version of
PBL.
license: Complete terms in LICENSE.txt
metadata:
author: Google LLC
last-updated: '2026-10-06'
keywords:
- android
- play billing
- play billing library
- pbl
- upgrade
- migration
- deprecation
- google play
---
## Phase 0: Intent Message
**Reporting Action**: Before proceeding, immediately tell the user: "I will
upgrade Play Billing Library to the latest version."
## Phase 1: Discovery \& Situational Awareness
1. **Primary Check (Build Version)** : Locate the project's billing dependency (e.g., `com.android.billingclient:billing`) in `build.gradle`, `build.gradle.kts`, or `libs.versions.toml`.
2. **Initial Compilation Test**: Attempt to sync and build the project immediately.
3. **Fallback Discovery (Effective Version)** :
- **Trigger**: Only if the build fails immediately, scan the source code for deprecated artifacts.
- **Logic** : The presence of deprecated APIs indicates the **"Effective
Version"** ---defined as the version where those specific APIs were **last
available**, not when they were introduced.
- **Example** : If `SkuDetails` is present, treat the baseline as **PBL v7** or earlier (regardless of the version string in `build.gradle`).
4. **Identify Target \& Path** : Access the version tool or release notes to find the latest stable version and calculate a \[Direct/Stepped\] migration path based on the **Effective Version** baseline.
- **Calculate Migration Path** :
- If the **Effective Version** is within 2 major versions of the target: Plan a **Direct Migration**.
- If it is more than 2 major versions behind: Plan a **Stepped
Migration**. Migrate by two major versions at a time (e.g., v4 -\> v6 -\> v8) until you are within two versions of the target.
- **Reporting Action**: Before proceeding, tell the user: "I've detected you are effectively on PBL \[Current\] and the latest is \[Target\]. I am planning a \[direct/stepped\] migration path."
## Phase 2: Contextual Document Mapping \& Planning
For every major version jump identified in your path, you **MUST** synthesize
instructions from:
- **[Migration Guide](https://developer.android.com/google/play/billing/migrate-gpblv%5BX%5D)** (where `[X]` is the target major version).
- **Release Highlights** : The "Deprecations" and "Breaking Changes" sections of the relevant [Release Notes](references/android/google/play/billing/release-notes.md).
- **Developer Documentation**: Consult your knowledge of the Google Play Billing documentation regarding the relevant features used in this app (e.g., Subscriptions, One-Time Products).
- **Develop the Plan**: Identify every specific code change required (API removals, class replacements, logic shifts) and print this out as a checklist.
## Phase 3: Instructions for Execution
*Reporting Action: For each of the following steps, give a brief explanation of
what you will be doing prior to execution, and a brief summary of what you
accomplished afterwards.*
### Step 1: SDK \& Environment Alignment
- **Action** : Update `build.gradle` to meet SDK requirements (e.g., "PBL 9 requires `compileSdk` 35").
- **Gradle Version**: Verify if the new library requires a newer Android Gradle Plugin (AGP) or Kotlin version.
### Step 2: Intent-based Refactoring
Analyze the intent of the existing code rather than performing purely textual
string replacement.
- **Action** : You **MUST** follow all deprecation instructions and refactor patterns from **both** the [references/migration-logic.md](references/migration-logic.md) section, the official migration guides, and the general documentation pages identified in Phase 2.
- **Verification** : Verify you are doing **all steps from all documentation** and then making sure you follow the specific directions from the checklist in the references.
### Step 3: Sequential Verification (Only applicable for Stepped Migrations)
1. **Upgrade** to the first major intermediate version in your path.
2. **Run `./gradlew assembleDebug`** to verify no intermediate breaking changes were missed.
3. **Repeat** until you reach the final target version.
### Step 4: Final Validation Checklist
1. **Smart Checklist Verification**:
2. Open [references/version-checklist.md](references/version-checklist.md) and locate the **Smart Version-Specific Checklist**.
3. **Action**: For every version between your \[Detected Effective Version\] and \[Detected New Version\], verify that every item has been addressed in the code using "Find in Files" or structural analysis.
4. **Tests** : Run all unit and implementation tests (`./gradlew test`).
5. **Clean Build** : Verify the project completes a full clean build: `./gradlew clean assembleDebug`. Then, run `./gradlew sync` and `./gradlew build` so that the user can immediately test the new version manually.
## Final Report
Explain the "Why" to the developer:
- "I updated your SDK to \[Version\] because PBL \[Version\] requires it for \[Reason from docs\]."
- "I removed your custom `retryConnection()` logic because it is now handled natively by the library using `enableAutoServiceReconnection()`."
- "Successfully upgraded from PBL \[Old\] to PBL \[New\] and verified with unit tests. Based on an analysis of features in the latest library and this application's current feature set, I suggest exploring \[New Feature\] (e.g., Prepaid Plans or Installments) from the latest release because it is now available but not yet implemented."
© Google LLC · Apache-2.0 · android/skills