๐Ÿš€ App Publishing, Monetization, and Product Development

Android App Signing and Upload Keys Explained

Every Android app must be signed, and the signature ties all future updates to you. Lose control of the wrong key and you can't update your app. Play App Signing makes this much safer, if you understand which key does what.

โœ๏ธ Yunok Tech ๐Ÿ“… Updated โฑ 3 min read ๐ŸŽฏ Intermediate
On this page
  1. Two keys, two jobs
  2. Creating an upload key
  3. Signing in Gradle without committing secrets
  4. SHA fingerprints: the classic sign-in bug
  5. If you lose the upload key
  6. Key rotation
  7. Scenarios
  8. Frequently asked questions
  9. Conclusion

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

Play App Signing key flow The developer signs the App Bundle with the upload key and uploads it. Google Play verifies the upload signature, then re-signs the generated APKs with the app signing key, which Google stores securely. Users' devices verify the app signing key on install and update. You / CIsign AAB with๐Ÿ”‘ upload key Google Playverifies upload key, re-signswith ๐Ÿ” app signing key User devicesverify app signingkey on install/update Lost upload key โ†’ can be reset with Google support. App signing key โ†’ stored by Google, never on your laptop.
The key users' devices trust stays safe with Google. The key you handle daily can be replaced if lost.
App signing keyUpload key
Who holds itGoogle (Play App Signing)You / your CI
SignsAPKs delivered to usersBundles you upload to Play
If lostNot your problem (Google stores it)Request an upload key reset
Fingerprint used forGoogle sign-in, Maps restrictions, App Links, FirebaseDebugging 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:

TerminalShell
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

app/build.gradle.ktsGradle KTS
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.

Get fingerprints locallyShell
./gradlew signingReport          # debug and configured release fingerprints
keytool -list -v -keystore upload-keystore.jks -alias upload

If you lose the upload key

  1. Generate a new upload key and export its certificate.
  2. Request an upload key reset in the Play Console. The account owner submits it.
  3. 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.

See all our apps โ†’

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.

Share: LinkedIn X / Twitter WhatsApp