Skip to content

Search

Documentation

Publishing to Google Play

What Forge needs to upload an Android build to Google Play: a service account with release access, the application id, and a track.

En esta página

Google Play takes builds through its Developer API, with no human in the loop until a release reaches a track that has one. Forge uploads the artifact, puts it on a track, and commits the edit — the same four calls a fastlane supply run makes, without the Ruby.

What you need

  • A service account with release access. In Play Console: Users and permissions → Invite new users → the service account's email, with Release to production, exclude devices, and use Play App Signing or the narrower Release apps to testing tracks. The account itself is made in Google Cloud (IAM → Service accounts), and the JSON key downloaded once.
  • The application id, as in the Play URL: org.example.game.
  • A track, optionally. Empty means internal, which is where a build should land first; alpha, beta and production are the others.

The app must already exist in Play Console, with one release made by hand — Play will not accept the first upload of a new app through the API.

What Forge does with them

Nothing until you press the button. On a build's page, beside an Android artifact, Publish to Google Play asks once and then, on a builder: gets a token from the service account, opens an edit, uploads the artifact, puts its version code on the track as a completed release, and commits. A red upload says what Play said — most often a permission the service account does not have, or a version code Play already holds.

Bundles

Play requires an Android App Bundle for new apps, and has since 2021; existing apps may keep uploading APKs to testing tracks. Turn it on in the project's Settings under Android packages: with App Bundle chosen, every build also makes an .aab, signed with your Android key, and its Publish to Google Play uploads it to Play's bundles endpoint. Keep APK chosen as well if you also publish to itch.io, which takes the APK only.