Google Play target API level requirement: what does your bundle target?
Google Play enforces a hard floor on targetSdkVersion, and it rises every year. Below the floor the Play Console blocks the upload outright — it is not a reviewer's judgement, it is a gate. This page gives the current threshold, the yearly schedule, and how to read what your own .aab or .apk actually targets before you find out the hard way.
Last reviewed 24 July 2026.
The current floor and the yearly schedule
Google's rule is mechanical: your app must target an API level within one year of the latest major Android release. A new Android major ships each autumn, so around 31 August each year the required floor bumps up by one. It applies to new apps and to every update of an existing app — you cannot push a new build that targets below the floor.
Existing apps that you don't update are given a longer runway, but they eventually must comply to stay available to newer devices. Here is the schedule as it stands:
| From | New apps & updates must target | Existing apps must target |
|---|---|---|
| 31 Aug 2024 | API 34 (Android 14) | API 34 to stay discoverable |
| 31 Aug 2025 | API 35 (Android 15) | — |
| 31 Aug 2026 | API 36 (Android 16) | API 35 (Android 15) or higher |
targetSdkVersion vs minSdkVersion vs compileSdkVersion
Developers routinely conflate these three, and only one of them is what Play enforces. They are set independently in build.gradle:
| Property | What it controls | Play's rule? |
|---|---|---|
targetSdkVersion | The API level your app declares it was built and tested for. It switches on that version's runtime behaviour changes. This is the one Play gates. | Yes — hard floor. |
minSdkVersion | The oldest Android version the app will install on. Lower = more old devices supported, more legacy code paths. | No. |
compileSdkVersion | The API level the code is compiled against — which APIs the compiler can see. Usually equal to or above target. | No, but must be ≥ target to build. |
You can (and often do) keep a low minSdkVersion for reach while targeting the latest API level to satisfy Play — the two are unrelated. Raising targetSdkVersion means you must handle the new version's behaviour changes; it does not drop old-device support (that is minSdkVersion).
The exact Play Console error
When an .aab targets below the floor, the Play Console blocks the release with a message in this form:
Your app currently targets API level 34 and must target at least API level 35 to ensure it is built on the latest APIs optimized for security and performance. To upload an app bundle it must target API level 35 or higher.
It is a release-blocking error, not a warning — the bundle will not upload. The two numbers in the message are your current target and the required floor; the fix is to raise targetSdkVersion to the required level in build.gradle and rebuild.
How to read targetSdkVersion from an .aab / .apk without Android Studio
You don't need a full Android Studio build to check what a bundle targets. The value is in the manifest — but the manifest inside a built artifact is binary-encoded (AXML in an APK, protobuf in an AAB), so `unzip` + `cat` won't work. Use the command-line SDK tools instead.
For an .apk
# aapt (or aapt2) decodes the binary manifest aapt dump badging app.apk | grep -o "targetSdkVersion:'[0-9]*'" # -> targetSdkVersion:'35' # or apkanalyzer (ships with the Android SDK cmdline-tools) apkanalyzer manifest target-sdk app.apk # -> 35
For an .aab (App Bundle)
# bundletool reads the protobuf manifest via XPath java -jar bundletool.jar dump manifest --bundle=app.aab \ --xpath=/manifest/uses-sdk/@android:targetSdkVersion # -> 35
aapt, aapt2 and apkanalyzer live in the Android SDK's build-tools / cmdline-tools; bundletool is a standalone jar from Google. None of them build or run the app — they just decode the manifest, so the check takes a second on any machine with a JDK.
The one-year extension path
If you genuinely can't meet the 31 August deadline, Google offers a one-time extension you request from the Play Console — it pushes your deadline to 1 November of the same year. It is meant for real technical blockers, not routine slippage:
- You request it per app in the Play Console before the deadline passes — there is a dedicated flow when your app is flagged as non-compliant.
- It buys roughly two extra months (to 1 November), not another year.
- It applies to keeping an existing app available; it does not let you push new updates that target below the floor in the meantime.
- It is intended for legitimate cases (a dependency not yet compatible, a large migration). Google can decline requests that look like avoidance.
The extension is a stay of execution, not a fix — the only durable answer is to raise targetSdkVersion and handle the new version's behaviour changes.
FAQ
What target API level does Google Play require right now?
As of the 2025–2026 window, new apps and updates must target at least API level 35 (Android 15). From 31 August 2026 the floor for new apps and updates rises to API 36 (Android 16), and existing apps must target at least API 35 to remain available on newer devices.
Does raising targetSdkVersion drop support for old phones?
No. Old-device support is controlled by minSdkVersion, which is independent. You can keep a low minSdkVersion and still raise targetSdkVersion to satisfy Play. Raising the target does mean you must handle the new Android version's behaviour changes, though.
The Play Console says my target is too low but Android Studio shows the right number. Why?
Check the value in the actual built artifact, not just the source. Product flavours, a manifest override, or an old build can ship a lower targetSdkVersion than your build.gradle suggests. Read it out of the .aab/.apk directly with bundletool or aapt to see what you really uploaded.
Can I get more time past the 31 August deadline?
Yes — the Play Console offers a one-time extension to 1 November of the same year for apps that can't meet the deadline. It's for legitimate technical blockers and only keeps the existing app available; it doesn't let you ship updates targeting below the floor.
Is the target API requirement the same as an App Review rejection?
No. It's an automated upload gate in the Play Console, enforced before any review. A reviewer isn't involved — the bundle simply won't upload until targetSdkVersion meets the floor.
Related: Why Google Play rejects apps · Android app submission checklist
Sources
Check your build before you submit
Run your .ipa or .apk through App Review Checker and catch these issues in seconds.
Check an app