Publish an HTML5 Game on Google Play With Capacitor, Step by Step
From a game folder to a signed app bundle, the Play Console forms, the 12-tester rule for new accounts and the webview problems we hit on our own apps.

To publish an HTML5 game on Google Play, you wrap the game folder in a native Android project with Capacitor, build a signed Android App Bundle in Android Studio, create the app in Play Console, answer its content forms and upload the bundle to a test track before production. If your developer account is a personal account created after 13 November 2023, Google also requires a closed test with at least 12 testers for 14 days before you can apply for production.
We have done this with our own games. In October 2026 we packaged Ricopop and Velvet Pool with Capacitor and sent both to Google Play production review, and also our action game Little Ninja Dash. This guide mixes what the official Capacitor, Android and Play Console pages say, read on 30 October 2026, with what our own release notes record. Rules and requirements change, so check each linked page before you submit.
Before you publish an HTML5 game on Google Play
- A Google Play developer account. Google charges a one-time registration fee of US$25 and asks every developer to verify their identity. Personal accounts must also verify access to an Android device with the Play Console mobile app before publishing.
- Node.js and Android Studio. Capacitor's Android documentation says Capacitor Android apps are configured and managed through Android Studio.
- A game that works offline from its own folder, with an index.html at the root.
- A licence for the game. With our templates, one licence covers one end product, and you may publish that game wherever you want, Google Play and the App Store included. You may not resell the template itself. Ask us before you add a price or in-app purchases, because our terms speak of players accessing the product free or through advertising.
Our template editions are browser games. Every edition page lists native app builds as not included, so the steps below are work you do, or work you order from us by quote.
See Velvet Pool, the pool template we also packaged for Android
Step 1: wrap the game folder with Capacitor
Capacitor needs a package.json, a folder with the built web files and an index.html at the root of that folder. Its getting-started page warns that the index.html must have a head tag or plugins will not work. A downloaded HTML5 template usually has the folder already: in ours it is game/.
- In a new project folder, run npm i @capacitor/core and npm i -D @capacitor/cli.
- Run npx cap init. It asks for the app name, the app ID (reverse domain, for example com.yourstudio.yourgame) and the web folder. Point webDir at your game folder.
- Run npm i @capacitor/android, then npx cap add android. This creates the android/ project.
- Run npx cap sync every time you change the game files. It copies them into the native project.
- Run npx cap open android to open the project in Android Studio.
Capacitor's documentation says API 24 and later, Android 7 and up, is supported. Our Android projects use that minimum.
What we do differently: we keep the native project in a separate mobile/ workspace that copies the game into its own web folder. The website version stays untouched, and anything that only belongs to the app, such as native ads, lives in the workspace.
Step 2: build and sign the app bundle
Since August 2021 new apps on Google Play must be published as Android App Bundles (AAB), not APKs. In Android Studio, use Build, then Generate Signed Bundle/APK, choose Android App Bundle and create or select a keystore.
That keystore holds your upload key. Google's app-signing page explains that with Play App Signing, which new apps must set up on first publication, Google keeps the app signing key and you sign each upload with the upload key. Keep the upload key secret, choose strong passwords and store the keystore in a safe place. If it is lost or compromised, the Play Console lets you request an upload key reset.
- Target API level: from 31 August 2026, new apps and updates must target Android 16 (API level 36) or higher. Check the target in android/app/build.gradle.
- Version code: raise it before every upload. Each bundle you upload uses up its version code, so we read the highest one in Play Console before every build.
- Release build only: no debug menus, test ad IDs or developer shortcuts in the bundle you send to production.
What breaks inside a webview, and what we did about it
A game that runs well in a browser can behave differently inside an app. These are the issues our release notes recorded, with the documented fix where one exists.
The Android back button
Capacitor's App plugin has a backButton event. Its documentation says that listening for it disables the default back button behaviour, so you decide what back does, and it offers App.exitApp() to close the app. In Velvet Pool we made back open the pause menu instead of closing the game.
Pause and resume
The same plugin fires appStateChange, pause and resume events. Use them to pause the game, timers and any running ad when the player leaves the app, and to resume cleanly.
Debug shortcuts on localhost
Inside the app, Capacitor serves the game from a local address. If your game turns on debug tools when it runs on localhost, they will turn on in the app too. Our build scripts force those flags off and refuse to build if they cannot.
Ads
Website ad code is not what we use inside our apps. On Android we use the native AdMob SDK through a Capacitor plugin, with Google's demo ad units during testing and the app's own units only in the production build.
Layout and saving
On the emulator we found buttons clipped in landscape and long words breaking badly, which the browser version did not show. Test every screen in both orientations, and check that progress survives closing and reopening the app.
See Ricopop, another template we packaged for Google Play
Step 3: Play Console setup and store listing
Create the app in Play Console, then work through the app content section. The forms we filled in for each game were privacy policy, app access, ads, content rating, target audience, Data safety, the advertising ID and the government, financial and health declarations.
- Content rating: Google says all apps must have an IARC rating, and apps without one will be removed. You get it by answering the questionnaire honestly.
- Data safety: every app must complete it, including apps that collect no data. It must reflect data collected by third-party SDKs, such as an ad SDK, and it needs a privacy policy link.
- Target audience: answer for the players you actually aim at. The rating and the audience are separate answers.
Store listing assets
- App icon: 512 by 512 pixels, 32-bit PNG, up to 1024 KB.
- Feature graphic: 1024 by 500 pixels, JPEG or 24-bit PNG without alpha.
- Screenshots: at least two, up to eight per device type. For games, Google recommends at least three 16:9 landscape (at least 1920 by 1080) or 9:16 portrait (at least 1080 by 1920) captures that show real gameplay.
- Short description: up to 80 characters.
Step 4: testing, then production
Our runbook puts internal testing first: install the app from Play with a real account and play it before anything else. Then the release is promoted to production, where it goes through Google's review.
The rule for new personal accounts
Google's Play Console Help says personal developer accounts created after 13 November 2023 must run a closed test with a minimum of 12 testers who have been opted in continuously for at least 14 days. After that, you apply for production access from the Dashboard and answer questions about the closed test, the app and its production readiness. Plan these two weeks into your launch date.
Keep the states apart when you report to a client: uploaded to a test track, submitted for review, approved and public on Google Play are four different moments. Our own release notes record submission dates, not approval dates, and so does this guide.
What our templates include, and the part we can do for you
Every template comes with the ready-to-host game folder, readable source, a manual and 6 months of support, or 12 with the extension. Support covers installing and using the supplied files and fixing reproducible defects. Packaging for Android, native ads, SDK integration and store publication are separate services.
If you would rather not run Android Studio yourself, send us the template, the store account plan and the deadline. We reply with scope, price and timing before any work. We do not publish a price list for custom work.
Ask for a quote to package your game for Google Play
FAQ
How much does it cost to publish an HTML5 game on Google Play?
Google charges a one-time US$25 registration fee for a developer account. Your other costs are the game licence, the store art and your time, or a quoted service if someone else does the packaging.
Do I need 12 testers to publish on Google Play?
Only if your account is a personal developer account created after 13 November 2023. Those accounts must run a closed test with at least 12 testers opted in for at least 14 days before applying for production access.
APK or AAB?
AAB. New apps on Google Play have had to use the Android App Bundle since August 2021. An APK is still useful for installing a build directly on your own test phone.
Can the app just load my game from my website?
We do not do that. We bundle the game files inside the app so it works offline and does not depend on a site. Google's spam policy also targets apps whose main purpose is a webview of a website without the owner's permission.
Are your templates ready for Google Play out of the box?
No. They are browser games ready to host, and the item pages say native app builds are not included. You can package them yourself with the steps above or order the work from us by quote.
