Outdated Target API Levels Can Get Your App Removed from the Store
16 Feb 2026 · 6 min read · Erik van Kammen
Every year, Google raises the minimum target API level for Android apps. If your app doesn't meet the requirement, you can't publish updates. And if your app hasn't been updated in a long time, Google may reduce its visibility on newer Android versions.
This isn't a suggestion. It's a hard gate.
And yet, teams get caught off guard by it regularly.
Your Android manifest contains three API level declarations:
minSdkVersion: the oldest Android version your app supportstargetSdkVersion: the version your app is designed and tested forcompileSdkVersion: the SDK version used at compile timeGoogle's enforcement focuses on targetSdkVersion. This value tells the system which behavior changes your app has opted into.
When you raise targetSdkVersion, Android stops applying backward-compatibility shims for your app. New permission models kick in. Background restrictions apply. Storage access rules change.
This means bumping the target API level isn't just changing a number. It's adopting a new set of runtime behaviors.
Google has been raising the bar consistently:
The specific deadlines shift, but the pattern is stable. Google publishes the requirements in the Play Console documentation and typically announces them months in advance.
If you're not checking your targetSdkVersion against the current requirement as part of your build process, you're relying on someone to remember. That's fragile.
This is the most immediate impact. If your target API level is below the requirement, Google Play Console rejects your upload. You can't publish a fix, a new feature, or a security patch until you raise the level.
That's a problem when you need to ship urgently.
Google can reduce the visibility of apps that haven't been updated in a long time. Users on newer Android versions may not see your app in search results. Your install rate drops silently.
The Play Store shows when your app was last updated. Users and procurement teams notice. For enterprise or B2B apps, a stale update date erodes trust. On Android 14 and later, the OS blocks installation of apps targeting very old API levels (below API 23) entirely.
If you skip multiple target API levels, the behavioral changes stack. Instead of adopting one set of changes at a time, you're dealing with several at once.
Common areas affected:
Each of these can break functionality if your code assumes the old behavior.
| API Level | Android Version | Key Behavioral Changes | Deadline Impact |
|---|---|---|---|
| 30 | 11 | Scoped storage enforced, package visibility filtering | Legacy baseline |
| 31 | 12 | Approximate location option, Bluetooth permissions, exact alarm restrictions | Minimum for updates |
| 33 | 13 | Per-app language preferences, notification permission required | Required for new apps |
| 34 | 14 | Foreground service type declarations, photo/video partial access | Current requirement |
| 35 | 15 | Edge-to-edge enforced, 16KB page alignment | Upcoming |
Teams often delay the target API bump because it requires work. Permissions need to be reworked. Background tasks need to be restructured. Storage access patterns need updating.
That's real engineering effort. But deferring makes it worse.
Every skipped API level adds to the migration scope. A team that bumps every year does incremental work. A team that waits two years does a large, risky migration under time pressure when the deadline hits.
The cheapest time to handle it is the current cycle.
Your build system already knows your targetSdkVersion. Add a check that compares it against the current minimum. This isn't complex, but it makes the requirement visible.
For AAB and APK files, the target API level is in the Android manifest. Binary analysis tools can extract and verify it.
// build.gradle.kts: verify targetSdkVersion meets current Play Store requirement
android {
defaultConfig {
targetSdk = 34
minSdk = 24
}
}
When Google announces the next target API requirement, create a ticket immediately. Scope the behavioral changes that affect your app. Don't wait for the deadline.
Your target API level should match the Android version you're actively testing on. If you're targeting the latest required level but only testing on a version two levels behind, you'll miss behavioral changes that only apply at the target level.
Some libraries lag behind on target API support. When you bump your target, verify that your dependencies are compatible. Older SDKs sometimes use APIs or patterns that break under newer restrictions.
If you distribute via Android App Bundles (which Google requires for Play Store distribution), the target API level is still embedded in the manifest. But the bundle format adds complexity.
Google Play generates optimized APKs from your AAB. The generated APKs inherit your target API level, but the resource splits and native library selection happen server-side. Test the actual APKs that Google generates, not just your local debug builds.
Both the AAB you upload and the APKs users install need to be compliant.
Raising targetSdkVersion in your build.gradle is trivial. Handling the resulting behavioral changes isn't. Every API level introduces changes that can affect runtime behavior.
Before bumping, review the official behavior changes documentation for each version you're skipping.
Your build.gradle says one thing. The compiled APK or AAB is what Google evaluates. Verify the actual value in your binary, especially in projects with multiple build flavors or product types.
Google requires AAB format for Play Store distribution. If you're only building and scanning APKs, you might miss issues specific to the bundle format.
When you raise the target API level and adopt new permission models, existing users who update your app will be affected. Plan for permission re-prompting and data migration where needed.
The target API level requirement isn't going away. Google raises it every year.
Treat it as a recurring engineering task, not a one-time fix. Check the requirement in your CI/CD pipeline. Plan the migration work as part of your regular release cycle. Test on the target version.
AppCompliance checks target API levels as part of its binary scan for APK and AAB files. It flags when your app is below the current requirement so you catch it before uploading to Play Console. It also checks your Data Safety declarations for accuracy. No tool can guarantee approval, but knowing your target API level is current before you submit saves time and frustration.
Everything technical in this post is checkable from the build itself, and that is exactly what AppCompliance does: upload an iOS or Android build, and minutes later you have every issue that would get it rejected, with the exact fix next to it.
One email when we open the doors. No spam, just the launch.