Publishing an Android App to Google Play
Google Play has required AAB (Android App Bundle) instead of APK since August 2021 for new apps. Uploading an APK for a new listing is an immediate rejection. Older apps can update via APK, but AAB provides smaller download sizes through Dynamic Delivery optimization for specific devices.
Preparing the Listing in Play Console
Before uploading the first build, complete the mandatory minimum in Play Console:
- App content: target audience, presence of ads, Privacy Policy URL
- Store listing: title (up to 50 characters), short description (80), full description (4000), screenshots for phone minimum, icon 512×512 px, Feature Graphic 1024×500 px
- Content rating: fill out the questionnaire — IARC automatically assigns a rating for each country
Without completing the App content section, the publish button is blocked. Play Console explicitly shows a list of incomplete sections, so it's hard to get confused here.
Tracks and Rollout
Play Console separates promotion by tracks:
| Track | Access | Limitation |
|---|---|---|
| Internal testing | Up to 100 testers by email | Instant publication |
| Closed testing (Alpha) | Limited group | Instant publication |
| Open testing (Beta) | Any user | Instant publication |
| Production | All users | Google review (usually hours-days) |
Correct flow: Internal → Closed → Open → Production. Advance between tracks via Promote release. AAB is uploaded once to Internal, then the same build number is promoted across tracks without re-uploading.
Phased Rollout in Production
10% → 20% → 50% → 100%
Google Play allows setting a percentage of users for gradual update rollout. You can pause at any moment if Firebase Crashlytics shows increased crash-rate. After pausing, either fix and upload a new build, or resume current.
Uploading AAB
# Build release AAB
./gradlew bundleRelease
# Path to artifact
app/build/outputs/bundle/release/app-release.aab
Upload via Play Console manually or via fastlane supply / Google Play Developer API.
# Fastlane Deliverfile for Google Play
package_name "com.example.app"
aab "app/build/outputs/bundle/release/app-release.aab"
track "internal"
release_status "completed"
json_key "path/to/service-account.json" # Service Account from Google Cloud
Service Account is created in Google Cloud Console, bound to Play Console via Setup → API access. Rights: Release Manager for uploads and promotion.
Content Requirements and Common Rejection Reasons
Target API Level: Google regularly raises minimum targetSdkVersion. At time of publication, new apps must target Android 14 (API 34). Updates — minimum API 33. Non-compliance is automatic rejection when submitting to Production.
Sensitive permissions: READ_CONTACTS, ACCESS_FINE_LOCATION, RECORD_AUDIO — require explanation in App content → Permissions declaration. Without explanation, warning or rejection.
Privacy Policy: mandatory for any data collection. Google checks URL accessibility — if the page doesn't respond during review, it's a rejection reason.
64-bit support: Apps must support arm64-v8a. Native libraries for armeabi-v7a only won't pass. In Gradle: abiFilters "armeabi-v7a", "arm64-v8a", "x86", "x86_64".
Play App Signing
On first AAB upload, Google offers Play App Signing — accept it. Google holds the signing key, you upload AAB with upload key. If you lose the upload key, Google can reset it, unlike self-managed scenarios.
Important: The certificate fingerprint for Firebase SHA-256 comes from the app signing key (visible in Play Console → Release → Setup → App signing), not the upload key.
Process
Set up Play Console: App content, Store listing, Content rating, Privacy Policy.
Prepare production AAB: signing config, targetSdkVersion, 64-bit support.
Upload to Internal, test, promote across tracks to Production.
Configure Fastlane or Google Play Developer API for automating subsequent releases.
Timeline Estimates
Preparation and publication to Internal Testing — a few hours. Production review (first release) — hours to 3 days. Full process with CI/CD setup and automatic publishing — 1–2 days of work.







