From a finished build to a live listing, here is the whole path.
Google rejects apps that are only a thin wrapper around a website. Turn on push notifications, an offline page, bottom navigation or native permissions so your app offers something the browser does not.
1. Finish your app configuration
Fill in the app name, website URL and a package name you own, such as com.yourbrand.app. The package name can never be changed after your first Play Store release, so choose carefully.
Upload a square icon of at least 512x512 pixels and set your splash screen and theme colour.
2. Test with an APK first
Build an APK and install it on your own Android phone. You may need to allow installing from unknown sources.
Check your login flows, forms, payments, file uploads, camera and any pages that open external links.
3. Prepare signing
Google Play requires release builds to be signed. Building for the first time? Press "Generate a signing key for me" in the signing step and AppForge creates a keystore for you — then download the .jks and keep a safe backup.
Already published? Upload your original .jks and enter the store password, key password and alias exactly as before. Play rejects updates signed with a different key.
After the key is in place you'll see its SHA-1 and SHA-256 fingerprints, which Firebase and Google APIs ask for.
4. Build the AAB
Select AAB as the output format and start a build. When it finishes, download the .aab file from the build page.
5. Create your Play Console listing
Sign up for a Google Play developer account (a one-time $25 fee) and create a new app.
Complete the store listing: title, short and full description, screenshots for phone and tablet, a 512x512 icon and a 1024x500 feature graphic.
Fill in the content rating questionnaire, target audience, data safety form and privacy policy URL. A privacy policy is mandatory.
6. Upload and roll out
Go to Production (or start with Internal testing), create a release, and upload your .aab file.
Add release notes, review any warnings, then submit for review. First reviews usually take a few days.
Android signing keystore
Keystore file — .jks format only.
Store password — protects the keystore file.
Key password — protects the key inside it (often the same as the store password).
Alias — the key's name inside the keystore, must match exactly.
App build scheme — 64 bit for smaller, modern-device builds, or 32 & 64 bit for wider compatibility.
SHA-1 / SHA-256 — shown automatically once the key exists; needed for Firebase and Google API setups.
Lost your keystore?
If your app uses Play App Signing, download the PEM certificate from your app's signing step, then in Play Console go to Test and release → App integrity → App signing and choose Request upload key reset, uploading that PEM file. Once Google approves, update the keystore details here and rebuild. This resets the upload key only — not the Google Play app signing key.
Native Google account picker
Under Native features you choose how sign-in behaves. The simplest option, Open the phone's browser, sends people to your normal website login in a Chrome tab and brings them back to the app afterwards — it works with any login and needs no setup. Keep sign-in inside the app runs the login in the app's own window, and Android account picker shows Android's account sheet. If any of them cannot finish, the app falls back to the normal web login so nobody gets stuck.
Only the account picker needs setup — these steps apply to that option:
In Google Cloud, create an OAuth Android client using the package name and SHA-1 fingerprint shown next to the switch, and an OAuth Web client in the same project.
Paste the Web client ID into the first field — that is the one the app signs in with. The Android client ID only has to exist in Google Cloud; the builder asks for it so you can confirm both belong to the same project.
The app finishes the sign-in itself: it hands the account to the website's own Google callback when there is one, otherwise it signs the person in against the website's backend and reloads the page. The backend address and public key are detected automatically on most sites; if the picker keeps returning people to the login page, fill those two optional fields in the Google panel.
If the app cannot complete the sign-in, it leaves the Google login alone entirely — the normal web login runs from start to finish, so you never get stuck in a loop.
If you prefer to handle it yourself, the token also arrives as window.AppForgeGoogleIdToken and as an appforge:google-token event, and you can trigger the sheet with await window.AppForgeGoogleSignIn().
Your website has to trust the same Web client. A site using the built-in Google sign-in that came with its hosting only trusts that built-in Google app and will reject the account the picker returns. In your website’s settings open Users → Auth Settings → Sign in methods → Google, switch to your own Google credentials, and paste the Web client ID and secret from the same project — plus your site’s sign-in callback address in that Web client’s authorised redirect URLs. If you would rather not change your site, leave the account picker off: the in-app Google login still works, it just shows the normal Google page.
Publishing on Google Play? Play re-signs your app, so also add the SHA-1 shown in Play Console under App integrity to the same Android client — otherwise the picker works on the file you download here but not on the Play install.
We keep only the most recent APK or AAB for each app. When a new build of the same app finishes, the previous file is deleted automatically to save storage, and its download link stops working. Download anything you want to keep before starting another build — your app settings, signing key and store listing are never deleted.
Publishing to Google Play
Everything Google asks for at upload, in the order you will meet it.
Pick a permanent package name. It can never be changed once published, and com.example.* is rejected.
Target Android 16. Since 31 August 2026 Google Play only accepts apps targeting API level 36 or higher. Every build we make targets API 36 with a minimum of API 23, so you are covered.
Create your signing key on the Signing tab and keep the download safe. Play App Signing re-signs your app for distribution, but this upload key is how Google recognises your updates.
Choose AAB output and build. Play does not accept APKs for new apps — the APK is for your own testing.
Fill in the Store listing tab: title (30 characters), short description (80), full description (4000), category, a 512x512 icon, a 1024x500 feature graphic, and at least two phone screenshots between 320 and 3840 px on every side.
Add a privacy policy URL. Play requires a public https page for every app, and refuses release without it.
Answer the content rating and data safety questions in the builder, then copy them across in Play Console.
Export the listing pack — a zip with your images and all the text, ready to drag into Play Console — then upload the AAB under Test and release.
APK or AAB?
Use the .apk for direct installs and testing. Use the .aab for the Play Store — Google requires it for all new apps.