Guide · Android · Play Store
Signed AAB for Google Play without Android Studio (2026)
Nathan Claiborne
Google Play has required the Android App Bundle (
.aab) format for new apps since August 2021. This guide shows the fastest way to produce a signed .aab from any GitHub repo — using GitHub Actions and Corenna — without installing Android Studio.APK vs AAB — what the Play Store actually wants
An .apk is the legacy install package; an .aab is a publishing format that Google splits into per-device APKs server-side. The Play Console only accepts .aab for new apps. Keep .apk around for sideloading and internal testing — see building an APK from GitHub.
Prerequisites
- A GitHub repo with a Capacitor, Flutter, or React Native project (Expo too: with no
android/folder, the build runsnpx expo prebuilditself). - An Android keystore. New to keystores? Read the Android keystore guide.
- Your
applicationIdmatches the package name registered in Play Console.
Option A — GitHub Actions YAML (the manual path)
Create .github/workflows/build-aab.yml with a job that runs:
- uses: actions/checkout@v4
- uses: actions/setup-java@v4
with: { distribution: temurin, java-version: '17' }
- name: Decode keystore
run: echo "$KEYSTORE_B64" | base64 -d > android/app/release.keystore
- name: Build release bundle
working-directory: android
run: ./gradlew bundleRelease
- uses: actions/upload-artifact@v4
with: { name: app-release.aab, path: android/app/build/outputs/bundle/release/app-release.aab }Store KEYSTORE_B64, KEYSTORE_PASSWORD, KEY_ALIAS, and KEY_PASSWORD in Settings → Secrets and variables → Actions.
Option B — Corenna (no YAML)
- Connect your repo via the Corenna GitHub App.
- Upload or generate a keystore — we encrypt and sync it into Actions Secrets for you.
- Pick Build type: AAB and click build.
- Download the signed bundle when the run finishes (~5–10 min).
Uploading to Google Play
- In Play Console open your app → Release → Production (or Internal testing).
- Click Create new release and upload the
.aab. - If Play Signing is enabled (default), Google re-signs per-device APKs — your upload key still matters for future updates, so back it up.
- For every update after that first release, you can skip the upload: connect a Google Play service account in Corenna once and it sends each new
.aabstraight to your internal, closed, open, or production track, with release notes.
Common errors
- "Package name has already been used" — change
applicationIdor claim the existing app. - "You uploaded an APK that is signed with a different key" — you swapped keystores; restore the original or contact Play support.
- Version code already exists — bump
versionCodeinbuild.gradleon every upload.
Keep reading