Lost Your Flutter Upload Key? Reset It in Play Console in 6 Steps (2026)
The laptop died, the backup drive is blank, or nobody remembers the keystore password — and now Play Console rejects your next Flutter build. If your app uses Play App Signing, this is recoverable: you create a new upload key and ask Google to reset the old one, and your users keep getting updates to the same app. This is a solo developer’s step-by-step for that reset, plus the follow-up work people forget: CI secrets, Firebase fingerprints and a backup plan so it never happens twice. Based on Google’s and Flutter’s own docs, checked 2026-10-13; always re-read them on the day you submit.
First: which key did you actually lose?
Play App Signing uses two keys, and the difference decides whether this is an inconvenience or a disaster. Google’s Play Console help on using Play App Signing describes them like this:
- Upload key — kept by you, stored in a
.jksor.keystorefile, used to sign the bundle you upload. Google uses it to verify it is you. If it is lost or compromised, Google can reset it. - App signing key — used by Google Play to sign the APKs delivered to devices. With Play App Signing, Google holds it.
Android’s app signing guide adds the key point: resetting the upload key does not affect the app signing key, so you can continue to publish updates to the original app. For apps that are not enrolled in Play App Signing, losing the signing key means losing the ability to update the app — Play’s help on publishing issues says you would have to publish a new app with a new package name. Check which situation you are in before anything else: in Play Console, open your app and look at the app signing page under Play Store protection. If it shows an app signing key managed by Google and a separate upload key certificate, you can reset.
Step 1: generate a new upload keystore
Create the new key on a machine you trust. Flutter’s Android release guide gives the command for macOS and Linux:
keytool -genkey -v -keystore ~/upload-keystore.jks -keyalg RSA \
-storetype JKS -keysize 2048 -validity 10000 -alias upload
Use a strong, unique password and write down the alias. Play’s help says the upload key must be an RSA key of 2048 bits or more, which this command meets. Do not reuse the old file name in the same folder — you want it to be obvious which keystore is the new one.
Step 2: export the certificate as PEM
Google needs the public certificate of the new key, not the key itself. Play’s help gives the export command:
keytool -export -rfc -keystore upload-keystore.jks -alias upload -file upload_certificate.pem
The .pem file is safe to upload; the .jks file and its passwords are what you protect. Never attach the keystore itself to a support ticket.
Step 3: request the reset in Play Console
The path in Play’s help is: Protected with Play → Play Store protection → Manage Play app signing, then in the Upload key certificate section click Request upload key reset, enter the reason, upload upload_certificate.pem and click Request. A few practical notes:
- Use a Play Console account with enough permissions; if you are not the developer account owner, involve them. Play’s publishing-issues help directs the account owner to contact support for upload key problems.
- The new key is not necessarily usable immediately. Read the confirmation in Play Console and any email from Google for when it takes effect, and don’t plan an urgent release for the same afternoon.
- If you think the old key was compromised rather than lost, say so in the reason and review who had access to it.
Step 4: point your Flutter build at the new key
Flutter reads signing details from android/key.properties. Update it with the new values — storePassword, keyPassword, keyAlias=upload and storeFile pointing at the new keystore. Flutter’s docs warn to keep key.properties private and out of public source control. Then build a release bundle with flutter build appbundle and, once Play says the new key is active, upload it to an internal testing track first. If Play accepts it there, the reset worked; promote from internal testing as usual. Our guide to shipping Flutter and Firebase apps as an indie developer covers the rest of the release routine.
Step 5: update everything that knew the old key
This is where resets cause a second outage. List every place the old upload key or its fingerprints were used:
- CI secrets. If a pipeline signs builds, replace the base64 keystore and passwords in its secret store and delete the old ones. Our secret rotation routine is a good template for doing this deliberately.
- Firebase and Google API restrictions. Builds you sign yourself — for example ones sent to testers outside Play — carry the upload key’s SHA fingerprints. Google’s client authentication guide explains how to get SHA-1 and SHA-256 fingerprints. Add the new ones where you registered the old ones (Firebase app settings, Android-restricted API keys), and keep the Play app signing fingerprints for store installs. Our note on API key restrictions explains why the fingerprint must match.
- App Links. Store installs are signed with the app signing key, which does not change, so
assetlinks.jsonfor Play builds usually needs no edit. If you also listed the upload key fingerprint for locally signed builds, update it — see our App Links migration guide.
Step 6: make sure it never happens again
- Store the keystore and its passwords in two separate places, such as an encrypted password manager entry and an offline encrypted backup.
- Write down the alias, the file name and where the backups live in your project notes — without the passwords.
- Test the backup: restore it on a different machine and sign a test build with it once a year.
- Keep 2-Step Verification on for every Play Console user, as Play’s help recommends.
Common mistakes during a reset
- Generating the new key but uploading a bundle signed with a debug key by accident — check
build.gradleuses the release signing config. - Committing
key.propertieswhile fixing things in a hurry. - Updating CI but forgetting a second machine that also builds releases.
- Removing old SHA fingerprints from Firebase before the new builds are live, which can break sign-in for testers in the meantime.
FAQ
Will users have to reinstall the app?
No, if the app uses Play App Signing. The app signing key Google uses is unchanged, so updates install over the existing app.
What if my app is not enrolled in Play App Signing?
Then the key you lost is the signing key, and Play’s help says you cannot update that app. Contact Play support to confirm, and plan for a new listing if needed.
Can I reset the key if I only forgot the password?
From Google’s point of view, a keystore you cannot open is a lost key, so the same reset process applies.
Do I need Android Studio?
No. The keytool commands above come with the JDK; Android Studio is one way to run them.
Sources
- Play Console Help: Use Play App Signing (checked 2026-10-13)
- Android Developers: Sign your app (checked 2026-10-13)
- Flutter docs: Build and release an Android app (checked 2026-10-13)
- Play Console Help: Publishing issues (checked 2026-10-13)
- Google: Authenticating your client (SHA fingerprints) (checked 2026-10-13)
More indie developer guides on the GSPTeck blog.