On this page
Android uses signatures to verify that an update comes from the same developer as the installed app. Before Play App Signing, losing your one keystore meant you could never update your app again. Today the model separates responsibilities between two keys, and that makes it much safer.
Two keys, two jobs
| App signing key | Upload key | |
|---|---|---|
| Who holds it | Google (Play App Signing) | You / your CI |
| Signs | APKs delivered to users | Bundles you upload to Play |
| If lost | Not your problem (Google stores it) | Request an upload key reset |
| Fingerprint used for | Google sign-in, Maps restrictions, App Links, Firebase | Debugging pre-Play builds signed with the upload key |
Creating an upload key
In Android Studio, use Build โ Generate Signed Bundle / APK and create a new keystore, or use keytool:
keytool -genkeypair -v -keystore upload-keystore.jks -alias upload \
-keyalg RSA -keysize 4096 -validity 10000
# Store the .jks and passwords in a password manager / secrets vault, NOT in Git.Signing in Gradle without committing secrets
android {
signingConfigs {
create("release") {
val props = rootProject.file("keystore.properties")
if (props.exists()) {
val p = java.util.Properties().apply { load(props.inputStream()) }
storeFile = file(p.getProperty("storeFile"))
storePassword = p.getProperty("storePassword")
keyAlias = p.getProperty("keyAlias")
keyPassword = p.getProperty("keyPassword")
}
}
}
buildTypes { release { signingConfig = signingConfigs.getByName("release") } }
}
// keystore.properties is listed in .gitignore. CI uses environment variables instead.For CI, see CI/CD with GitHub Actions.
SHA fingerprints: the classic sign-in bug
Many APIs (Google Sign-In / Credential Manager, Firebase, Maps key restrictions, App Links) need your certificate's SHA-1 or SHA-256 fingerprint. With Play App Signing, production installs are signed by Google's app signing key, so register that fingerprint (found in Play Console โ App integrity), plus your upload key and debug key fingerprints for other builds.
./gradlew signingReport # debug and configured release fingerprints
keytool -list -v -keystore upload-keystore.jks -alias uploadIf you lose the upload key
- Generate a new upload key and export its certificate.
- Request an upload key reset in the Play Console. The account owner submits it.
- After approval, sign uploads with the new key, and update CI secrets.
Key rotation
Play supports upgrading the app signing key for new installs and updates on supported Android versions, using APK Signature Scheme v3 rotation. This is an advanced operation. Read Google's guidance carefully, and update every fingerprint-dependent integration afterwards.
Scenarios
Google sign-in works in debug, fails from Play
Register the app signing key's SHA fingerprint from Play Console.
Developer leaves the team
The upload key lives in a shared vault and CI, not on one laptop, and access is reviewed.
Migrating an old app
Opt in to Play App Signing by uploading your existing app signing key securely, following Play's flow.
Frequently asked questions
Can I sideload a Play build and an Android Studio build side by side?
Not with the same applicationId and different signatures. Uninstall first, or use an applicationIdSuffix for debug builds.
Is the upload key the same as the debug key?
No. The debug key is auto-generated by Android Studio for local builds. Never use it for Play uploads.
How long should the key be valid?
Long, typically 25+ years (-validity 10000 days). Play requires validity beyond a minimum date.
Conclusion
With Play App Signing, Google protects the app signing key, and you manage a replaceable upload key. Keep keystores and passwords out of Git, register the right SHA fingerprints, and store signing material in a shared vault and CI.
Next step: finish your release checklist with How to Prepare an Android App for Production.
Official references
๐ฑ Apps built by Yunok Tech
Real Android apps on Google Play, free to download.
Walzi4K wallpapers for lock and home screenGet it โธ
NotiVaultNotification history: recover dismissed notificationsGet it โธ
Ready to build real Android applications?
Shipping is a skill of its own. Learn to take an app from a working build to a polished, signed release that real users can install from Google Play.
Move beyond theory and strengthen your Android development skills with Yunoktech's Android course. Learn core concepts, practical implementation, modern Android development techniques, and the reasoning behind building maintainable applications.
Explore the Android course and take your next step as an Android developer.