Generated banner for Play Billing Library Version Upgrade
Generated logo for Play Billing Library Version Upgrade

Play Billing Library Version Upgrade

Android (Google)OfficialCreated by Google LLCDistributed by Android (Google)

  • Skill
  • Workflow
  • Software development
  • Apache-2.0
  • No issues found

From the author

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.
— the description by Google LLC

AutoGineer summary

Written by AutoGineer from the skill’s own files, not by the author

This skill provides a structured, multi-phase workflow to upgrade Android applications from legacy Google Play Billing Library (PBL) versions to the latest stable release. It identifies the current effective version of the library, determines whether a direct or stepped migration path is required, and provides a systematic plan for refactoring code, updating dependencies, and validating the implementation through build and test cycles.

What it does

  • Detects the current effective version of the Play Billing Library in an Android project.
  • Calculates a migration path based on the gap between the current and target versions.
  • Provides a checklist for API removals, class replacements, and logic shifts.
  • Guides the update of build configuration files and SDK requirements.
  • Automates the verification process through sequential builds and testing.
  • Recommends modern features to implement after a successful upgrade.

When to use it

  • When an Android project needs to update its Google Play Billing Library dependency.
  • When migrating from legacy versions that use deprecated APIs like SkuDetails.
  • When moving to a version that requires higher compileSdk levels.
  • When refactoring manual connection management to library-managed reconnection.

Advantages

  • Reduces manual effort by identifying specific breaking changes and deprecations.
  • Ensures a safe migration path for projects several versions behind.
  • Standardizes the refactoring process for complex architectural shifts like ProductDetails.
  • Validates the upgrade with automated build and test steps.

Usage examples

“Help me upgrade my Play Billing Library implementation.”
The agent will analyze your project's current billing dependency, determine the effective version, and generate a migration plan to the latest stable release.

Install

  1. Download the skill as a ZIP:

    https://autogineer.com/agent-skills/android/play-billing-library-version-upgrade/download
  2. Unzip it into the cross-client skills folder of your project:

    mkdir -p .agents/skills && unzip play-billing-library-version-upgrade.zip -d .agents/skills

Documentation by Google LLC

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 (where [X] is the target major version).

  • Release Highlights : The "Deprecations" and "Breaking Changes" sections of the relevant Release Notes.

  • 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 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 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."

Files

references/migration-logic.md

High-Impact Migration Logic

1. Connection Management (The v8+ Reconnection Shift)

Intent: Move from developer-managed state (manual retries) to library-managed state.

  • Remove : Manual startConnection() calls or retry timers inside onServiceDisconnected().

  • Add : .enableAutoServiceReconnection() to BillingClient.Builder.

  • Logic : In v8+, the library handles transient disconnections. Your onServiceDisconnected must only be used for logging or updating UI state (e.g., "Billing service temporarily unavailable").

2. Product Querying & Models (The v5-v8 Architectural Shift)

Intent: Support the "One Product, Multiple Offers" model introduced in v5 and refined in v8.

  • Data Model Swap :

    • Legacy : SkuDetails (1:1 mapping of ID to price).

    • Modern : ProductDetails. A single ProductDetails can contain multiple SubscriptionOfferDetails (Base Plans + Offers).

  • Result Handling (v8+ Logic) :

    • Change : queryProductDetailsAsync no longer returns a list in the listener.

    • New Intent : You must receive a QueryProductDetailsResult object.

    • Refactor : kotlin // PBL 8+ Pattern billingClient.queryProductDetailsAsync(params) { result: QueryProductDetailsResult -> val responseCode = result.billingResult.responseCode val productDetailsList = result.productDetailsList // Retrieve list from result object // Process list... }

3. Subscription Modernization (v6 & v7)

Intent: Support "Base Plans" and "Offers" instead of legacy standalone SKUs.

  • Subscription Upgrades/Downgrades (v6+):

    • Legacy : setOldSkuPurchaseToken() in BillingFlowParams.

    • Modern : Use SubscriptionUpdateParams. You must specify the PurchaseToken of the existing subscription and the ReplacementMode (which replaces the deprecated ProrationMode).

    • Logic : Verify that the ReplacementMode matches the business intent (e.g., CHARGE_FULL_PRICE versus WITH_TIME_PRORATION).

  • Installment Plans (v7+):

    • Intent: Allow users to pay for a subscription in monthly installments.

    • Check : Look for InstallmentPlanDetails within SubscriptionOfferDetails. If the app supports high-ticket subscriptions, it is mandatory to implement the installmentPlanDetails UI.

4. Purchase Handling & History (v6+)

Intent: Move away from local-only purchase caches to real-time status checks.

  • Active Purchases :

    • Deprecated : queryPurchases() (synchronous).

    • Mandatory : queryPurchasesAsync(). You must pass QueryPurchasesParams containing the ProductType (INAPP or SUBS).

  • Purchase History (Pagination Intent) :

    • v6+ Change : queryPurchaseHistoryAsync is optimized for pagination.

    • Logic : If the app has thousands of historical transactions, verify you are using the PurchaseHistoryRecord list correctly to avoid memory overhead.

5. Security & Pending Transactions (The "Always On" Rule)
  • Mandatory : enablePendingPurchases() has been required since v3, but in v8+, verify that it is called before .build(). You must also include .enableOneTimeProducts() on the enablePendingPurchases() builder.

  • Optional : If the app sells prepaid subscriptions, you must also include .enablePrepaidPlans().

  • Intent: This handles "Slow/Delayed" payments (like cash or bank transfers). Without this, the app will crash on initialization in modern versions.

6. SDK & Environment Requirements
  • PBL 7.0 : Requires compileSdk 34 or higher.

  • PBL 8.0 : Requires compileSdk 34 or higher.

  • PBL 9.0 : Requires compileSdk 35 or higher.

  • Kotlin : Verify that kotlin-stdlib is updated to at least 1.9.x to support new library coroutine extensions.

7. User-Facing Features (Post-Upgrade Recommendations)

Once the upgrade is complete, the following features are enabled by these versions:

  • v7 : Installments (Monthly payments for annual plans).

  • v8 : Prepaid Plans (Users can top-up time without auto-renewing).

  • v8 : Personalized Pricing (Show legal disclosure if price varies by user).

  • v9 : In-App Price Reviews (Users can accept upcoming subscription price increases directly inside the app without leaving for the Play Store; capped by Google at a maximum of once every 7 days).

Requirements and compatibility

Works with: Claude Code, Claude apps, OpenAI Codex, GitHub Copilot, Cursor, Gemini CLI, Kiro, OpenCode, Goose, Amp, Roo Code, JetBrains Junie, Factory Droid, Devin (ex-Windsurf), Mistral Vibe, OpenHands, Letta

“Works with” means the tool reads the open Agent Skills format; a skill written for one tool may use features others lack.

Security

No issues found by our static scan· No issues found

A static scan is not a guarantee. Skills are third-party content: review a skill before you let an agent use it.

Attribution and licence

Created by
Google LLC
Publisher
Android (Google) (Official)
Distributed by
Android (Google)
Source
android/skills · play/play-billing-library-version-upgrade · commit bf68e2d
Licence
Apache License 2.0 (redistribution allowed)
  • LICENSE (added by AutoGineer from LICENSE.txt)
  • ATTRIBUTION.md (written by AutoGineer)
Synced

AutoGineer is not affiliated with or endorsed by Google LLC or Android (Google).

Download ZIP

The ZIP holds the skill’s files, its licence files and an ATTRIBUTION.md. Download play-billing-library-version-upgrade.zip