Flutter and Android 16 (API 36) in 2026: The Complete Upgrade Guide for Google Play
Android 16 is API level 36, and since August 31, 2026 it's the target Google Play requires for new apps and app updates. For a Flutter developer, raising targetSdk to 36 is a one-line change that switches on several behavior changes at once. I've written a separate guide for each one I hit while moving CoinDrop, Swappr and IOU to API 36. This hub puts them in the order I'd work through them, with the short version of each, so you can plan the upgrade in one sitting.
Everything here comes from Google's and Flutter's own documentation, linked below. Rules and dates change, so check the source pages before a release.
The deadline in one paragraph
Google's target API page says that from August 31, 2026, new apps and app updates must target Android 16 (API 36) or higher to be submitted. Wear OS and Android Automotive OS apps must target API 35, and Android TV and Android XR apps API 34. Existing apps must target at least API 35 to stay available to new users on devices running a newer Android version. If you need more time, Play Console offers an extension to November 1, 2026. The full rule, the extension and a triage plan for several apps are in Google Play target API 36 in 2026: deadline, extension and upgrade plan.
The upgrade path, step by step
- Triage your apps. List each app's current
targetSdk, its last update and whether you'll ship before the deadline. - Upgrade the toolchain. On a branch, run
flutter upgradeandflutter doctor, install the Android 16 SDK platform, and check whatflutter.targetSdkVersionresolves to. If it's below 36, settargetSdk = 36andcompileSdk = 36explicitly. - Update plugins. Run
dart pub outdatedand start with plugins that touch Android APIs: notifications, permissions, camera, purchases, ads and background work. - Test the behavior changes covered in the sections below.
- Release carefully: internal testing track and pre-launch report first, then a staged rollout.
Behavior changes you get by targeting API 36
Edge-to-edge without the opt-out
Android 15 enforced edge-to-edge for apps targeting it but allowed an opt-out attribute. For apps targeting Android 16, that attribute is deprecated and disabled on Android 16 devices, and Flutter warns that using it there might crash your app. Flutter has made apps edge-to-edge by default since 3.27. The fix is layout work: SafeArea for controls and padding from MediaQuery for scrolling content. My guide to Flutter edge-to-edge on Android 15 and 16 lists the six screens that usually break and includes a 20-minute test plan.
Predictive back is on by default
Targeting API 36 turns on predictive back animations on Android 16 devices. onBackPressed isn't called and KEYCODE_BACK isn't dispatched. In Flutter, the casualty is WillPopScope, which is deprecated and can't tell the system in advance whether back will be handled. Move those routes to PopScope with canPop. There's a temporary manifest opt-out, android:enableOnBackInvokedCallback="false", but Google treats it as a stop-gap. The four migration cases are in Flutter predictive back on Android 16: WillPopScope to PopScope.
Large screens ignore orientation and resizability locks
On displays whose smallest width is 600dp or more, Android 16 ignores orientation, resizability and aspect-ratio restrictions for apps targeting API 36. A portrait-locked phone app will open full-window on tablets and foldables. Test your main screens wide before you release.
Safer intents
Android 16 continues tightening how intents resolve. If you use deep links or explicit intents to other apps, re-test them on an Android 16 device or emulator.
Play requirements that land in the same upgrade
A target API bump is also when older policy issues surface, usually because plugin upgrades change the merged manifest. These guides cover the ones I see most:
- 16 KB memory page size: apps targeting Android 15 or higher must support 16 KB pages. Google's page-sizes documentation says that from 1 February 2027, updates that don't support them can't be released. The usual culprits are an Android Gradle Plugin older than 8.5.1 and plugins with their own native libraries.
- Photo and video permissions rejections: one-time photo use that requests
READ_MEDIA_IMAGESorREAD_MEDIA_VIDEOgets rejected. Play checks the merged manifest on every track, so a plugin can trigger it. - Foreground service types: since Android 14, every foreground service needs a type, the matching permission and a Play Console declaration, plugins included.
- Exact alarms:
SCHEDULE_EXACT_ALARMis denied by default for most new installs on Android 14+, andUSE_EXACT_ALARMis restricted by Play policy. - Notification permission: on Android 13 and later, notifications are off by default for new installs until the user grants
POST_NOTIFICATIONS.
A test plan before you upload
Run this on an Android 16 emulator or device with a release build, and repeat the key screens on a tablet-sized emulator:
- Open every main screen and check nothing sits under the status bar, navigation bar or camera cutout.
- Use the back gesture on every route with a confirmation dialog, form or nested navigator, and confirm the dialog still appears.
- Rotate and resize on a large screen, and check layouts don't stretch or clip.
- Open every deep link and share target you support.
- Check the merged manifest for permissions you didn't expect.
- Confirm the bundle supports 16 KB pages: Play Console's App bundle explorer shows a warning if it doesn't.
Release and monitor
Upload to the internal testing track first and read the pre-launch report. Then release with a staged rollout; my staged rollout rules explain when to widen it and when to halt. Watch crash and ANR rates for a couple of days, using the thresholds in my Android vitals guide. If you're on a new personal developer account, remember that production access first needs the 12-tester, 14-day closed test.
Planning next year
In recent years Google has raised the required target level each August, with an extension window into the autumn, and 2026 followed that pattern. A reminder in early summer to bump the target, upgrade Flutter and run the test plan above saves a stressful October. I'll keep this hub updated as Google publishes the next requirement.
FAQ
What is the Google Play target API level for 2026?
From August 31, 2026, new apps and app updates must target Android 16 (API 36) or higher. Existing apps must target at least API 35 to stay available to new users on newer devices. Wear OS, Automotive, TV and XR apps have lower targets.
Can I get more time to target API 36?
Yes. Google offers an extension to November 1, 2026 through forms in Play Console.
Is changing targetSdk to 36 enough?
No. Targeting API 36 turns on Android 16 behavior changes, including edge-to-edge without an opt-out and predictive back by default, so test before you release.
Do I still need WillPopScope changes if my app targets API 35?
Android 16's predictive back default only applies to apps targeting API 36, but migrating to PopScope now means the target bump won't change back behavior unexpectedly.
Is the 16 KB page size requirement part of Android 16?
It's separate. It applies to apps targeting Android 15 or higher, and from 1 February 2027 updates that don't support 16 KB pages can't be released.
Sources
- Android Developers: Meet Google Play's target API level requirement (checked 2026-10-31)
- Android Developers: Behavior changes for apps targeting Android 16 (checked 2026-10-31)
- Android Developers: Support 16 KB page sizes (checked 2026-10-31)
- Flutter docs: Android predictive back breaking change (checked 2026-10-31)
- Play Console Help: Target API level requirements (checked 2026-10-31)