pbl-v8-to-v9-migration
Phase 0: Intent
Announce to the user: "I will migrate this project from PBL 8 to PBL 9."
State the key fact up front so the user calibrates effort correctly: PBL 9.0.0 (released 2026-05-19) removed no APIs. PBL 8.0.0 was the breaking release that deleted the Sku* family, queryPurchaseHistoryAsync, and the parameterless enablePendingPurchases(). PBL 9 builds on that surface with one target SDK bump, two compatibility adjustments, and one optional new feature. RevenueCat characterizes it as a single sprint of work for a v8 app.
If the project still references SkuDetails, querySkuDetailsAsync, SkuType, or the parameterless enablePendingPurchases(), the real baseline is pre-v8. Stop and route the user to pbl-v7-to-v9-migration, which does the v8 work first.
Phase 1: Discovery
Gather the facts before changing anything.
- Locate the dependency. Open
build.gradle,build.gradle.kts, orlibs.versions.tomland findcom.android.billingclient:billingorbilling-ktx. Confirm the version reads8.x.x. If it reads7.xor lower, switch to the pbl-v7-to-v9-migration skill. - Check androidx.core. Find the
androidx.core:core/core-ktxversion. v9's error reclassification requires androidx.core 1.9 or later. Record the current value. - Check compile and target SDK. Read
compileSdkandtargetSdk. v9 targets API 35. Note both values. - Scan for developer provided billing. Grep for
DeveloperProvidedBillingDetails,getLinkUri,enableDeveloperBillingOption, andenableBillingProgram. These are the External Payments APIs from PBL 8.3. If any hit, the nullablegetLinkUri()change in Phase 3 applies. If none hit, you can skip that step. - Scan error handling. Grep for
BillingResponseCode.ERRORandBillingResponseCode.BILLING_UNAVAILABLE. Note every place that branches on a genericERRORfor an unavailable store, because v9 reclassifies the blocked store case. - Note in app messaging usage. Grep for
showInAppMessagesandInAppMessageParams. If present, the optional price increase messaging step applies.