On this page (8 sections)
The requirement, exactly
| Deadline | Phones & tablets | Wear OS | Android TV | Automotive OS | Android XR |
|---|---|---|---|---|---|
| 31 August 2025 | API 35 (Android 15) | API 34 | API 34 | API 34 | — |
| 31 August 2026 (current) | API 36 (Android 16) | API 35 | no change | API 35 | API 34 |
- New apps and updates must target the required level. An existing app that is not updated stays on Play, but stops being available to new users on Android versions higher than its target.
- Extension: Google lets you request an extension to 1 November 2026 from the Policy status page of the affected app in Play Console. It buys weeks, not a waiver.
- Google raises the requirement every year (the next step, API 37, is expected around August 2027); a modernized project makes each yearly bump routine.
Source: Play Console Help, Target API level requirements for Google Play apps (linked in the sources panel, verified 22 September 2026).
How the block shows up
- Play Console → Policy status: “Your app must target Android 16 (API level 36) or higher.”
- Upload of a new release fails with an API-level error, or the release cannot be rolled out.
- Google warning emails ahead of the deadline that were forwarded to a mailbox nobody reads.
There is nothing to appeal. It is a technical requirement; the only exit is a compliant build or the extension.
If you are not sure what your project currently targets, paste your build.gradle, libs.versions.toml, pubspec.yaml or package.json into the Android update readiness checker. It reads the text in that one request, reports the target and compile SDK it can see alongside the other requirements that block updates, and stores nothing.
What changes when you target API 36
Setting targetSdk = 36 opts the app into Android 16 behaviour. The changes that most often break older apps:
Edge-to-edge is enforced
Apps targeting Android 15 got edge-to-edge by default with an opt-out; on Android 16 the opt-out (windowOptOutEdgeToEdgeEnforcement) is deprecated and no longer honoured. Screens that never handled window insets end up with content under the status bar, buttons hidden behind the navigation bar, and overlapped keyboards. The fix is real inset handling — ViewCompat.setOnApplyWindowInsetsListener, WindowInsets in Compose, SafeArea/MediaQuery.padding in Flutter, SafeAreaView plus edge-to-edge configuration in React Native — screen by screen.
Orientation and resizability on large screens
On displays of at least 600 dp smallest width, Android 16 ignores screenOrientation, resizableActivity, minAspectRatio / maxAspectRatio and setRequestedOrientation() for apps targeting 36. Apps that were “portrait only” must lay out correctly in landscape and in split-screen windows. A temporary opt-out exists (android.window.PROPERTY_COMPAT_ALLOW_RESTRICTED_RESIZABILITY as an activity or application property) but Google states it will not apply once you target API 37 — it postpones the work by one year at most.
Predictive back is on, and onBackPressed is not called
For apps targeting 36 on Android 16 devices, predictive back animations are enabled by default, onBackPressed() is no longer called and KEYCODE_BACK is not dispatched. Apps that intercept the back key to show “discard changes?” dialogs, close drawers or manage custom navigation stacks silently lose that behaviour unless they migrate to OnBackPressedCallback / OnBackInvokedCallback (or temporarily set android:enableOnBackInvokedCallback="false").
Background work, alarms and notifications
Exact-alarm and foreground-service rules that started in Android 14/15 continue to tighten; older code that schedules work or starts services from the background needs a review, and the Play policy declarations for those permissions must match.
Permissions and privacy
Photo picker instead of broad media permissions, the notification runtime permission, and the Data safety form all need to reflect what the modernized app actually does.
Dependencies and the toolchain
Compiling against SDK 36 needs an Android Gradle Plugin that supports it, which in turn needs a Gradle and Kotlin version your old plugins may not compile with. This cascade is usually the largest part of the work, especially in Flutter and React Native projects with abandoned plugins.
Do not raise targetSdk without a device test plan
Everything compiles, the bundle uploads, and then users on Android 16 see broken layouts or crashes in a flow you did not touch. Test on an Android 16 device or emulator, in landscape and split-screen, before rollout — and use a staged rollout.
By framework
| Stack | Where to change | Typical follow-up work |
|---|---|---|
| Native Android | app/build.gradle(.kts): targetSdk 36, compileSdk 36; AGP / Gradle bump | Edge-to-edge insets, large-screen layouts, deprecated API replacements, dependency upgrades |
| Flutter | android/app/build.gradle(.kts) (or flutter.targetSdkVersion); Flutter SDK + plugin upgrades | Plugins with old AGP requirements, Kotlin DSL migration, SafeArea audit, 16 KB alignment of plugin .so files |
| React Native | android/build.gradle targetSdkVersion 36 + RN upgrade | Native modules needing the New Architecture, Gradle/Kotlin cascade, react-native-edge-to-edge or manual insets |
| Unity | Player Settings → Target API Level (needs a Unity version that ships SDK 36 support) | Unity LTS upgrade, plugin re-import, 16 KB-aligned builds, Unity IAP upgrade |
| Cordova / Ionic / Xamarin | cordova-android / MAUI platform version | Often a planned rewrite; we say so in the review when that is the realistic path |
Should you request the extension?
Yes, if the migration cannot be finished before your next essential release — the request takes minutes and removes the block until 1 November 2026. No, if you expect to ship the compliant build within days anyway; the form does not speed up anything. Either way, the extension does not remove the requirement.
What we do
- Read the notice and the build configuration; confirm the target, compile SDK, AGP, Gradle, Kotlin and framework versions.
- List the Android 16 behaviour changes that apply to your app (not the generic list) and the dependencies that must move.
- Raise the target, resolve the toolchain cascade, fix insets and large-screen layouts, replace deprecated APIs, and re-verify the Data safety form.
- Test on Android 16 devices, produce the release bundle, and hand over a staged-rollout checklist — or roll it out for you if you prefer.
The 16 KB page size requirement and the Play Billing Library 8 requirement usually surface in the same release; we handle them together. See the 16 KB page size fix and the Billing Library upgrade.
Release checklist
targetSdkandcompileSdkat 36; AGP, Gradle and Kotlin at versions that support it- Edge-to-edge handled on every screen, including dialogs, bottom sheets and WebViews
- Back handling migrated to OnBackPressedCallback / OnBackInvokedCallback (predictive back)
- Large-screen orientation and split-screen verified
- Exact alarms, foreground services and notification permission reviewed against the Play declarations
- Deprecated SDK versions replaced; Play Console policy status clean
- 16 KB alignment verified; Play Billing Library 8+ where purchases exist
- Extension requested if the release date is at risk
Frequently asked questions
What does “your app must target Android 16 (API level 36)” actually mean?
It means the targetSdkVersion declared in your build must be 36 or higher before Play Console will accept a new release. It is a build setting, not a judgement about your app, and it is checked at upload — before any human review. Since 31 August 2026 it applies to new apps and to every update; Google offers an extension, requested per app from the Policy status page, that defers the block to 1 November 2026 without removing the requirement.
Can a target API level block be appealed?
No. There is no reviewer decision to contest — the upload is refused by a mechanical check. The only two exits are a build that targets API 36 or higher, or the extension Google offers until 1 November 2026. Anyone offering to appeal it, or to get it waived, is describing something that does not exist.
Related: Target API Level 36 Fix
Is raising the target API level really just a one-line change?
The line itself is one line. What follows usually is not. Targeting Android 16 enforces edge-to-edge layouts without the previous opt-out, changes large-screen orientation and resizability handling, tightens background execution and notification behaviour, and frequently forces a Gradle, AGP and dependency upgrade because older analytics, ads, payment and map libraries do not compile against the new toolchain. Plan it as a small project with device testing, not as a version bump.
Related: Target API Level 36 Fix, Legacy App Update & Modernization