Android App Bundle (AAB) format used instead of APK
Why it matters
Google Play has required Android App Bundle (AAB) format for new app submissions since August 2021 and for all app updates since November 2021. Submitting an APK to Google Play for a new app returns an immediate upload error in Play Console — no review occurs, no exception is granted. The build toolchain distinction is subtle: ./gradlew assembleRelease produces an APK; ./gradlew bundleRelease produces an AAB. Fastfile lanes that use gradle(task: 'assemble') are wrong for Play Store submission. The AAB requirement also means developers must use Google Play App Signing — direct APK signing keys can no longer be used for Play distribution.
Severity rationale
Low as an operational issue because the error is explicit and immediate on upload, but it blocks every production deployment until corrected in the build pipeline.
Remediation
Update the Fastfile release lane to produce AAB output:
# fastlane/Fastfile
lane :release do
gradle(
task: 'bundle', # NOT 'assemble'
build_type: 'Release'
)
end
For EAS Build, verify eas.json does not override the default:
"build": {
"production": {
"android": {
"buildType": "app-bundle" // default; explicitly set to avoid accidental APK
}
}
}
For manual builds, run ./gradlew bundleRelease — the output is android/app/build/outputs/bundle/release/app-release.aab. Upload this file to Play Console under Production → Create new release. Enroll in Google Play App Signing if not already done — required for AAB distribution.
Detection
- ID:
aab-format - Severity:
low - What to look for: Google Play has required the Android App Bundle (AAB) format for new app submissions since August 2021. APK submissions are no longer accepted for new apps. Check: (a)
android/app/build.gradle— look for abundle { ... }block or abuildTypesconfiguration that produces.aaboutput, (b)fastlane/Fastfile— look forgradle(task: "bundle")rather thangradle(task: "assemble")in thelane :releasedefinition, (c)eas.json— EAS Build's Android build profile defaults to AAB format, so look for any explicit"buildType": "apk"inandroidprofiles which would indicate APK output rather than AAB, (d) any CI/CD configuration (.github/workflows/*.yml,bitrise.yml,circle.yml) — look for./gradlew bundleRelease(correct, produces AAB) vs./gradlew assembleRelease(produces APK, cannot be submitted to Google Play for new apps). Also check for agoogle-services.jsonfile inandroid/app/— its presence is required for Firebase-based apps but is separate from the AAB requirement. Count all instances found and enumerate each. - Pass criteria: Build configuration produces AAB output (
bundleReleasetask,"type": "aab"in EAS, or explicit bundle task in Fastfile); or the project is iOS-only. At least 1 implementation must be confirmed. - Fail criteria: Fastfile uses
gradle(task: "assemble")(APK); EAS config has"buildType": "apk"for the production profile; CI workflow runs./gradlew assembleReleaserather than./gradlew bundleRelease. - Skip (N/A) when: iOS-only project; or Android build configuration is entirely managed through external CI with no config files in the repository.
- Detail on fail:
"fastlane/Fastfile uses gradle(task: 'assemble') in the release lane — this produces an APK, which cannot be submitted to Google Play for new or updated apps". - Remediation: Google Play rejects APK uploads for new apps with a clear error message. Switch to AAB before your first submission attempt.
- Change Fastfile from
gradle(task: "assemble", ...)togradle(task: "bundle", ...) - For EAS: remove
"buildType": "apk"from your production Android build profile (default is AAB) - For manual builds: run
./gradlew bundleReleaseinstead of./gradlew assembleRelease - The output file is
android/app/build/outputs/bundle/release/app-release.aab— upload this to Play Console
- Change Fastfile from
External references
- external · google-play-aab-requirement — Google Play — Android App Bundle Required for New Apps
Taxons
History
- 2026-04-18·v1.0.0·Initial import from app-store-metadata-listing·automated