Skip to main content
This guide walks you through preparing an Android release for Google Play with Bilt: Play Console setup, service-account access, Android signing, your first app bundle, and repeat builds. Open Settings → Publish in your project, then choose Quickstart → Play Store to follow along.

Prerequisites

  • A working Bilt app you’re ready to publish on Android
  • A Google Play developer account in Play Console ($25 one-time registration fee; no annual renewal)
  • Access to Google Cloud so you can create a service account and enable the Google Play Android Developer API
  • Store listing and policy details for your app: privacy policy, data safety answers, target audience, content rating, and pricing or countries

Step 1: Create or open your Play Console account

If you do not have Play Console access yet:
  1. Go to Play Console
  2. Create or join a Google Play developer account — a one-time $25 USD registration fee applies (no recurring annual fee for the account itself)
  3. Pay with an international credit or debit card (Visa, MasterCard, or American Express)
  4. Complete Google’s account, identity, and organization checks before you try to publish

Step 2: Create the app in Play Console

Create the Play Console app first, then use the same Android package name in Bilt.
1

Create the Play app

  1. Open Play Console
  2. Click Create app
  3. Enter the app name, default language, app or game type, and free or paid choice
  4. Answer the declarations Google shows, then create the app
2

Finish the required Play setup

On the app dashboard, complete the required setup tasks Google shows for your app. This usually includes app access or sign-in instructions, ads, content rating, target audience, privacy policy, Data safety, store listing, and pricing or countries.
3

Choose your package name

Pick the Android package name Bilt should build for this Play app, such as com.yourcompany.appname. Use a stable, lowercase package name because Google Play treats it as the app’s permanent identifier after upload.

Step 3: Connect Google Play to Bilt

Open Settings → Publish → Play Store. The Play Store setup tab has three sections: Package name, Service key file, and Android upload key.
The Play Store subtab showing the Package name, Service key file, and Android upload key sections
1

Add the package name

In Package name, click Configure package name, enter your Android package name, then click Save.
2

Create a Google service account

In Google Cloud Console, open IAM & Admin → Service Accounts and create a service account. Play app access is granted separately in Play Console; creating this account does not require assigning it a broad Cloud project role. See Google’s API access setup.
3

Download the JSON key

Open the service account, choose Keys, then click Add key → Create new key. Choose JSON and save the downloaded file securely.
Treat this JSON key like a password. Google offers its private file only when it is created; keep a secure backup. A lost API key can be replaced with a newly created key.
4

Enable the Google Play Android Developer API

In the same Google Cloud project, open the Google Play Android Developer API page and click Enable.
5

Invite the service account to Play Console

In Play Console, open Users and permissions and invite the service account email. Grant access to this app and the release permissions required for your testing/production workflow. Avoid granting account-wide administration merely to publish one app.This account is for publishing. Payments use Bilt’s own account and a separate app-level invitation, described in Set up Google Play payments.
6

Upload the service key file in Bilt

Back in Settings → Publish → Play Store, click Configure service key file, upload the JSON file, then click Save service key file.

Step 4: Set up the Android upload key

Open Settings → Publish → Play Store → Android upload key.
  • Generate — Bilt creates and saves an Android upload key for this project (recommended for new Play apps)
  • Upload your own — Upload an existing .jks, .keystore, .p12, or .pfx upload key and enter the file password, key name, and key password
After a key is saved, Bilt signs Android builds with it automatically. Open … → Download upload key and store the backup securely. Google Play requires future releases to use its registered upload key unless you complete an upload-key reset.
For an existing Play app, upload the original matching keystore. Generating another key in Bilt does not replace Google’s registered certificate. With Play App Signing, request an upload-key reset in Play Console and wait for Google to accept the replacement before using it for updates. Downloading the public certificate from Play Console does not recover the private keystore.

Step 5: Build and upload your first app bundle

Open Deploy & Share → Release on App Store from the top-right project button, then switch to the Build subtab.
  1. Select Play Store as the build target
  2. Click Start Play Store build
  3. Watch progress under Recent builds
  4. When the build finishes, open the build artifact menu and download the Play Store package
For the first Play release, Google may require a manual upload before automatic publishing works:
  1. Open Play Console and select your app
  2. In the left dashboard, go to Test and release → Internal testing
  3. Click Create new release in the top right
  4. Upload the downloaded app-release.aab file
  5. Choose a release name
  6. Click Next in the bottom right, fix any errors, then click Save
Bilt builds Android App Bundles (.aab) for Google Play. Google Play uses app bundles to generate optimized APKs for each device.

Step 6: Let Bilt handle future updates

After the first upload and Play Console setup are accepted, use Settings → Publish → Build for repeat Android releases:
  1. Select Play Store
  2. Click Start Play Store build
  3. If Google Play publishing is ready, Bilt sends the package to the internal testing track automatically
  4. If Google Play publishing is not ready, Bilt still creates a downloadable Play Store package so you can upload it manually
The Build tab also includes a Google Play Console button for jumping back to Play Console.

Prepare Google Play payments, if your app sells digital access

Publishing and payments are separate. Payments use Bilt’s account, so you do not need another Cloud project or JSON key. Open Payments → Catalog → Google Play and follow its five-item setup checklist: app details, Bilt access, products, enablement and notifications. Your publishing key keeps its release permissions. Before creating Play products, upload an Android build with the billing permission. Include the native expo-iap dependency and its config plugin, then use the internal-test upload above. Expo Go and mocks cannot test purchases. Use monthly or annual auto-renewing plans, or permanent one-time buy options at quantity one. Once payments are enabled, Add Product in Bilt creates a draft. Bilt’s email needs the additional app-level Manage store presence permission and, while the app is marked Draft, Edit and delete draft apps. For a permanent one-time purchase, enter an initial Price (USD) greater than zero; Bilt sets that US price when creating the draft. Finish regional pricing and activation in Play Console, then refresh and import in Bilt. You can also create products directly in Play Console without granting Bilt these product-editing permissions. After enabling payments, import at least one supported purchase option and map it to a stable benefit. Confirm checkout is available, then use a license tester to test purchase, acknowledgement, pending payment, restart/restore, account switching, lifecycle and refund/revocation. Notification status is advisory during setup; native acceptance is required before release. Bilt’s server acknowledges completed purchases after durable benefit delivery, so the app must not finish or consume Google purchases. See Google’s testing guide. Test-purchase verification is separate from the setup checklist. In Payments → Users, open the test customer’s detail view and confirm the completed purchase grants its benefit and no longer shows Acknowledgement pending. Play Store resubscriptions after expiry are attributed and acknowledged using Google’s previous-purchase evidence. Explicit Google restore can recover an anonymous predecessor after reinstall; authenticated purchases still require the original app account. Promo codes redeemed outside the app without account evidence stay unbound and are refunded by Google after three days. See purchase ownership and recovery. Consumables, credit balances, prepaid/installment plans, rentals, preorders, multi-quantity purchases, and offer-only one-time options are outside the initial supported scope. Preparing these settings does not establish that Google payments are enabled in production. Read In-app Payments for catalog and benefit behavior.

Step 7: Move from testing to production

When you are ready to go live:
  1. Complete your store listing, App content declarations, prices, countries, and release notes in Play Console
  2. Test the app through internal testing, then closed or open testing if needed
  3. Create or promote a production release
  4. Review the release, resolve any errors, and submit it for Google review
  5. Once approved, your app is live on Google Play

Play Store tabs in Bilt

Changing credentials and app identity

The publishing service key file can be replaced without deleting the old file first: open its … → Replace service key menu, upload the replacement JSON and save. Give a new service account release access to the same Play app before replacing its key. Verify a publishing build before revoking the previous key in Google Cloud. Do not edit the JSON’s email or private-key fields by hand. This key is not used for payments. The package name is different: Bilt fixes it once the app is registered for payments, even if registration fails before checkout is enabled. Disabling payments or deleting credentials does not let you change or reset that package. Confirm the exact Play app before connecting payments. An upload key signs your Android releases; it is not the JSON API credential. For an existing app, compare the keystore’s certificate fingerprint with Upload key certificate on Play Console’s app-signing page. If the private keystore is lost, use Google’s upload-key reset procedure for apps enrolled in Play App Signing. Only use the new key for updates after Google accepts it, then save that keystore in Bilt. A reset in Bilt only removes Bilt’s saved copy; it does not reset the key in Google Play. For Bilt’s payments invitation and notification configuration, see In-app Payments.

Common issues

Enable the Google Play Android Developer API in the same Google Cloud project that owns your service account, then start another build.
Upload the JSON key file downloaded from Google Cloud. Bilt expects a Google service account JSON file, not a Play Console export or a copied email address.
Bilt can still build the Android package, but Google Play did not allow automatic publishing. Check that the service account has app-level release access in Play Console and that your first manual app bundle upload or required Play setup is complete.
Check Bilt’s email and three app-level permissions in the Payments checklist, then choose Check again. New grants can take up to 36 hours to work. The package must match the native build; checkout also needs a ready Billing deployment and supported active options. Replacing your publishing key does not change payment access. See permission troubleshooting.
The package name in Bilt must match the package Google Play expects for this app. Use a value like com.company.appname, keep it lowercase, and do not change it after the first Play upload.
Use the private keystore matching Google’s registered upload certificate. If Bilt generated your key, keep the … → Download upload key backup. A newly generated key will not repair an existing app’s mismatch until Google accepts an upload-key reset. See Changing credentials and app identity.
Check the build logs in the Build tab. Common causes include a missing package name, missing upload key, invalid service-account access, or an Android build error in the app.

Further reading