“Version Code Has Already Been Used”: How to Fix It
Play Console rejects uploads that reuse a version code. Why it happens, how to bump it in Gradle, Flutter, React Native and Unity, and how to avoid it.
Short answer
Every build you upload to Google Play needs a versionCode that hasn’t been used before for that app, on any track. Increase versionCode (for example from 3 to 4), rebuild, and upload again. versionName (like “1.0.3”) is what users see and can be anything.
Why it happens
Android’s versioning docs say you can’t upload a build with a versionCode you’ve already used. That includes builds uploaded to internal, closed or production tracks, and even uploads you later discarded. Common causes:
- You rebuilt without bumping the number.
- Your CI builds from a branch where the number is behind.
- You uploaded the same code to internal testing and then again to closed testing (promote the release instead).
Where to change it
| Tool | Setting |
|---|---|
| Android Studio (Gradle) | versionCode in defaultConfig of app/build.gradle(.kts) |
| Flutter | version: 1.0.3+4 in pubspec.yaml (the number after + is versionCode) |
| React Native | android/app/build.gradle, or app.json → android.versionCode with Expo |
| Expo EAS | Set autoIncrement in eas.json, or bump android.versionCode |
| Unity | Player Settings → Other Settings → Bundle Version Code |
| Capacitor | android/app/build.gradle |
Rules worth knowing
- versionCode must be a positive integer. Google’s maximum is 2,100,000,000.
- Higher means newer. Devices only update to a higher versionCode.
- versionName is free text shown to users, like 1.4.0 or 1.4.0-beta.
Avoid it for good
- Let CI set versionCode from a build number or a timestamp-like integer.
- When moving a build from internal to closed testing, use promote release rather than re-uploading.
- Keep a short release log: versionCode, versionName, track and date. It doubles as evidence for your production access application.
Frequently asked questions
I discarded a release. Can I reuse its version code?
Assume not. If a bundle with that version code was uploaded, use a higher number.
Do I have to increase versionName too?
No. versionName is just the label users see. Only versionCode must be new.
How do I see which version codes I’ve used?
Play Console’s App bundle explorer lists every uploaded bundle with its version code.
Sources and how we keep this accurate
Policy facts are checked against Google's own documentation on the date shown above. Google can change requirements at any time, so confirm in your Play Console. Where we give advice or estimates rather than Google's rules, we say so. TestersZone is independent and not affiliated with Google. Drafts are AI-assisted and reviewed by our team.
Need 12 testers? Get them free.
Test 3 apps, earn 60 credits, and list your app for up to 20 real testers with verified daily check-ins.
Start freeKeep reading
How to Upload Your First App Bundle to Play Console
How to Write Release Notes for Closed Test Builds
Does Updating Your App Reset the 14-Day Closed Test?
Does a Closed Test Need a Complete Store Listing?
How Do Testers Leave a Closed Test (and What Happens)?
Do Games Need the 12-Tester Closed Test Too?
Browse all answers, or see the quick answers, guides and comparisons.