Prepare A Play Release

Release work starts before Play Console upload. Build a release artifact, protect signing keys, verify target API, and document policy-sensitive behavior.

Release Checklist

StepEvidence
VersioningversionCode increments and versionName is intentional
Build typeRelease variant selected or bundleRelease run
ArtifactAAB for Play, APK only for local or non-Play distribution
SigningUpload key configured outside source control
Play App SigningEnabled or explicitly planned
Target APICurrent Play requirement checked
Data safetyMatches actual storage, network, SMS, analytics, and sharing behavior
Restricted permissionsDeclaration form and demo evidence ready if applicable
Internal testUploaded to internal testing or blocker documented

Build Locally

./gradlew :app:clean
./gradlew :app:testReleaseUnitTest
./gradlew :app:lintRelease
./gradlew :app:bundleRelease

Task names vary by project. Use ./gradlew tasks if a command does not exist.

Signing Model

Play App Signing uses two concepts:

KeyHeld ByUsed For
App signing keyGoogle when enrolled in Play App SigningSigning APKs delivered to users
Upload keyDeveloperSigning AAB/APK uploaded to Play

Keep the upload key secure. If it is compromised or lost, Play can reset the upload key, but that does not make committing it acceptable.

Files That Must Stay Out Of Git

*.jks
*.keystore
keystore.properties
play-service-account*.json
local.properties

Debug Versus Release

Android Studio’s Run button builds and installs a debug path. Official docs note that this path can use testOnly=true, which is not the same as a user-installable release.

Release proof needs a release task and artifact path:

Artifact: app/build/outputs/bundle/release/app-release.aab
Build command: ./gradlew :app:bundleRelease
Result: passed
Signing: upload key from local untracked keystore properties

Policy Review Package

For SMS finance apps, collect:

  • privacy policy URL
  • onboarding screenshots
  • system permission prompt path
  • demo video showing core SMS money-management flow
  • denied-permission fallback screenshots
  • store listing text that describes the core feature honestly
  • statement that unrelated SMS content is not collected or shared

Gotcha: A release can fail without a crash. Target API drift, missing declarations, misleading Data safety answers, or a debug-signed artifact can block shipping.