Impact summary
Codename One's generated Android purchase builds currently default to Google Play Billing Library 8.0.0. Google Play stops accepting new apps and app updates that use Billing Library 8 after 2027-08-31. Without a default upgrade, Android apps that use Codename One in-app purchases and do not override the billing version will be blocked at Play submission.
Official requirement
- Google's Play Billing Library version deprecation page (last updated 2026-06-22) gives Billing Library 8 a new-app/app-update deadline of 2027-08-31, with an extension available only until 2027-11-01. Existing published APKs can continue to work, but new apps and updates must use a supported version.
- Google's Billing Library 9 migration guide (last updated 2026-09-08) directs apps migrating from 7 or 8 to use Billing Library 9.1.0 and lists the APIs removed in v9.
- Google's Billing Library release notes record Billing Library 9.0.0 on 2026-05-19 and 9.1.0 on 2026-06-18.
Hard deadline: 2027-08-31 for new apps and app updates using Billing Library 8. The 2027-11-01 extension is a contingency, not the release target.
Urgency: Medium — the deadline is more than 180 days away as of 2026-09-10.
Concrete Codename One applicability
Current default branches still produce Billing Library 8 unless an application opts into a newer version:
maven/codenameone-maven-plugin/src/main/java/com/codename1/builders/PlayBillingVersions.java: DEFAULT_VERSION is 8.0.0; MINIMUM_SUPPORTED is also 8.0.0.
maven/codenameone-maven-plugin/src/main/java/com/codename1/builders/AndroidGradleBuilder.java: when purchase support is detected, it reads android.billingclient.version with that default and emits implementation 'com.android.billingclient:billing:<version>' into the generated Gradle project.
Ports/Android/src/com/codename1/impl/android/BillingSupport.java: this source is copied into generated Android apps and owns purchase connection, product-detail queries, purchase launch, acknowledgement, consumption, and inventory restoration.
- The production mirror has the same default and dependency producer in
codenameone/BuildDaemon at src/com/codename1/build/daemon/PlayBillingVersions.java and src/com/codename1/build/daemon/AndroidGradleBuilder.java.
The current BillingSupport already uses the ProductDetails API, parameterized enablePendingPurchases, and the current queryPurchasesAsync shape. PlayBillingVersions records that the source compiles against 9.1.0 and already raises minSdkVersion to 23 for releases newer than 8.0.0. That is useful compatibility evidence, but it is not a production purchase-flow test and the generated default remains 8.0.0.
Affected users and failure mode
- Affected: every Codename One Android app using the purchase API that relies on the default
android.billingclient.version.
- Failure after 2027-08-31: Google Play rejects new-app and app-update submissions containing Billing Library 8.
- Existing installed/published binaries are not expected to stop running solely because of this submission deadline.
- Upgrading the default from 8.0.0 to 9.1.0 raises the billing AAR's minimum Android API from 21 to 23, so Android 5.0/5.1 support for purchase-enabled apps is a release-policy decision that must be explicit.
Proposed migration
- Investigate: confirm the current stable Billing Library 9 release to pin; compare its public API and manifest requirements with
BillingSupport; decide and document the API 21/22 compatibility impact.
- Implement: update
DEFAULT_VERSION and its policy/error text in both the Maven builder and BuildDaemon mirror; update tests and the build-hint catalog; keep an explicit override path only where it remains Play-valid.
- CI and beta validation: compile the copied
BillingSupport.java against the pinned Billing Library artifact in CI, inspect the generated Gradle dependency and merged manifest, and exercise test-account flows for one-time purchase, subscription purchase, acknowledgement, consumption, inventory/query restoration, cancellation, and connection recovery.
- Release: deploy the matching BuildDaemon and framework/Maven changes together, then submit a representative AAB to a Play internal test track and confirm Play Console reports a supported billing version.
- Customer communication: call out the new default, the API 23 minimum for purchase-enabled apps, the
android.billingclient.version override boundary, and the Play deadline in release notes and the migration guide.
Internal target dates
- 2027-06-02 (90 days before enforcement): finish compatibility/minSdk investigation and select the pinned v9 release.
- 2027-07-02 (60 days before enforcement): merge both builder paths and complete CI plus Play test-account validation.
- 2027-08-01 (30-day buffer): deploy the production default, publish customer guidance, and verify a representative Play internal-track submission.
Risks, unknowns, and verification plan
- The current source-level evidence says Billing Library 9.1.0 compiles, but no retained CI gate compiles the generated source against the default artifact and the previous migration did not verify a real purchase.
- Billing Library 9 adds sub-response codes and changes some failure semantics; verify that Codename One's error mapping remains useful and does not collapse actionable responses.
- Raising purchase-enabled apps from minSdk 21 to 23 can remove Android 5.0/5.1 devices from future releases; measure/decide this before changing the default.
- Keep the Maven and BuildDaemon copies byte-for-byte aligned where practical. Verify the actual generated AAB, its merged manifest metadata, and Play Console's detected billing version rather than relying only on source constants.
Impact summary
Codename One's generated Android purchase builds currently default to Google Play Billing Library 8.0.0. Google Play stops accepting new apps and app updates that use Billing Library 8 after 2027-08-31. Without a default upgrade, Android apps that use Codename One in-app purchases and do not override the billing version will be blocked at Play submission.
Official requirement
Hard deadline: 2027-08-31 for new apps and app updates using Billing Library 8. The 2027-11-01 extension is a contingency, not the release target.
Urgency: Medium — the deadline is more than 180 days away as of 2026-09-10.
Concrete Codename One applicability
Current default branches still produce Billing Library 8 unless an application opts into a newer version:
maven/codenameone-maven-plugin/src/main/java/com/codename1/builders/PlayBillingVersions.java:DEFAULT_VERSIONis8.0.0;MINIMUM_SUPPORTEDis also8.0.0.maven/codenameone-maven-plugin/src/main/java/com/codename1/builders/AndroidGradleBuilder.java: when purchase support is detected, it readsandroid.billingclient.versionwith that default and emitsimplementation 'com.android.billingclient:billing:<version>'into the generated Gradle project.Ports/Android/src/com/codename1/impl/android/BillingSupport.java: this source is copied into generated Android apps and owns purchase connection, product-detail queries, purchase launch, acknowledgement, consumption, and inventory restoration.codenameone/BuildDaemonatsrc/com/codename1/build/daemon/PlayBillingVersions.javaandsrc/com/codename1/build/daemon/AndroidGradleBuilder.java.The current
BillingSupportalready uses the ProductDetails API, parameterizedenablePendingPurchases, and the currentqueryPurchasesAsyncshape.PlayBillingVersionsrecords that the source compiles against 9.1.0 and already raisesminSdkVersionto 23 for releases newer than 8.0.0. That is useful compatibility evidence, but it is not a production purchase-flow test and the generated default remains 8.0.0.Affected users and failure mode
android.billingclient.version.Proposed migration
BillingSupport; decide and document the API 21/22 compatibility impact.DEFAULT_VERSIONand its policy/error text in both the Maven builder and BuildDaemon mirror; update tests and the build-hint catalog; keep an explicit override path only where it remains Play-valid.BillingSupport.javaagainst the pinned Billing Library artifact in CI, inspect the generated Gradle dependency and merged manifest, and exercise test-account flows for one-time purchase, subscription purchase, acknowledgement, consumption, inventory/query restoration, cancellation, and connection recovery.android.billingclient.versionoverride boundary, and the Play deadline in release notes and the migration guide.Internal target dates
Risks, unknowns, and verification plan