Flutter Target API 36 for Google Play: Deadline and Fix
Have a Flutter or native Android project? Code2Native compiles it in the cloud from a ZIP or a Git repository, on Builder ($39/month) or Pro ($99/month).
Start a source buildSince August 31, 2026, Google Play refuses new apps and app updates that target below Android 16 (API level 36). The extension Google offers apps that need more time runs only to November 1, 2026. Flutter 3.35 and later target API 36 by default, so for most Flutter apps the fix is a toolchain upgrade and a rebuild, plus a check of three Android 16 behavior changes. Not a rewrite.
The dates
| Google Play rule | When |
|---|---|
| New apps and app updates must target API 36 or higher | Since August 31, 2026 |
| Extensions requested in Play Console end | On November 1, 2026 |
| Existing apps must target API 35 or higher to stay available to new users on newer Android versions | Ongoing |
| Updates to apps that target Android 15 or higher and ship native code must support 16 KB memory pages | From February 1, 2027 |
Sources: Google's target API level requirements and 16 KB page size guide, checked October 2, 2026.
Which Flutter version targets API 36
A Flutter app inherits its Android SDK levels from the Flutter toolchain unless the project overrides them. These are the defaults in Flutter's own Gradle plugin (FlutterExtension.kt) at each release tag:
| Flutter | targetSdk | compileSdk | minSdk | NDK |
|---|---|---|---|---|
| 3.32.0 | 35 | 35 | 21 | 26.3 |
| 3.35.0 | 36 | 36 | 24 | 27.0 |
| 3.44.5 | 36 | 36 | 24 | 28.2 |
So any Flutter release from 3.35 on produces an API 36 app, as long as your project still points at Flutter's value. Projects created by flutter create do, in android/app/build.gradle or build.gradle.kts:
defaultConfig {
minSdk = flutter.minSdkVersion
targetSdk = flutter.targetSdkVersion
}If someone replaced that line with a number, such as targetSdk = 34, the toolchain upgrade changes nothing: set it to 36 (or back to flutter.targetSdkVersion). The same goes for compileSdk, which must be at least the target. If a plugin then fails with “compile against version 36 or later”, see the compileSdk 36 error, explained.
Check what a built app actually targets
Don't trust the Gradle file alone; read the value from the artifact you are about to upload. For an Android App Bundle:
bundletool dump manifest --bundle=app-release.aab \
--xpath=/manifest/uses-sdk/@android:targetSdkVersionFor an APK, with the Android SDK build tools:
aapt2 dump badging app-release.apk | grep targetSdkVersionBoth should print 36. Checking before you upload saves a rejected release.
What changes when your app targets API 36
Targeting a new API level opts your app into that release's behavior changes. Google's Android 16 behavior changes list three that Flutter apps meet most often:
- Edge-to-edge is no longer optional. The
windowOptOutEdgeToEdgeEnforcementopt-out is disabled, so your UI draws behind the status and navigation bars. Screens that wrap their content inSafeArea(or readMediaQuery.paddingOf) are fine; check the ones that don't, especially custom app bars and bottom buttons. - Predictive back is on by default. On Android 16 devices,
onBackPressedis no longer called. In Flutter, intercept Back withPopScope; the olderWillPopScopeis deprecated. Native plugin code that overridesonBackPressedneeds the same update, or the temporaryandroid:enableOnBackInvokedCallback="false"opt-out. - Orientation locks are ignored on large screens. On displays whose smallest width is 600dp or more (tablets, unfolded foldables), Android ignores
screenOrientation, resizability and aspect-ratio limits. A portrait-only layout will be shown in landscape there. Google offers a temporary opt-out that stops working at API 37.
Keep your upload key
Play accepts an update only if it keeps the same application ID and is signed with your app's upload key. Before you rebuild anywhere new, find the keystore (and its passwords) that signed your last release. If it is lost and the app uses Play App Signing, request an upload key reset in Play Console first. An update signed with a new key is accepted only after Google processes that request.
Rebuild without upgrading your own machine
If your laptop is pinned to an old Flutter for another project, or you never had the Android toolchain installed, you can compile in the cloud. Code2Native's default Flutter toolchain is 3.44.5 with Android platform 36 and NDK 28.2, so a project that uses flutter.targetSdkVersion comes out at API 36:
- Upload the project as a ZIP, or give a Git URL. Leave out
build/, caches and secrets. - Choose an AAB for Google Play, and upload the keystore that holds your upload key so the bundle is signed with it.
- Read the real Gradle log while it builds. If it fails, the build page says which step failed and why.
- Run the
bundletoolcheck above on the download, then upload it to Play Console.
One caveat: to compile older projects, the builder can pick Flutter 3.24.5 or 3.19.6, whose defaults target below API 36. It does so when the SDK constraint in pubspec.yaml only allows an older Dart, when intl is pinned below 0.20 together with flutter_localizations, when carousel_slider is below 5 or syncfusion_flutter_pdfviewer below 26, or when android/ still applies the Flutter Gradle plugin the pre-3.16 way. The [c2n] Toolchain line in the build log names the version and the reason. That output is fine for APKs you share directly, but Play refuses it as an update: update those pins, or move android/ to the Flutter Gradle plugins block, first. See building an old Flutter app in the cloud.
Source compiles need Builder ($39/month, up to 20 Android source compiles a month, using included credits) or Pro ($99/month). Check which projects are supported before you buy, and see pricing for what each plan includes. A successful build is not a Play approval: if this is a new personal developer account, Google's closed-testing requirement still applies.
While you are rebuilding: 16 KB pages
From February 1, 2027, Play requires 16 KB memory page support for updates to apps that target Android 15 or higher and ship native code. Every Flutter app ships native code (the Flutter engine and your compiled Dart), so the rule applies to yours. Build with a current Flutter release and check the result instead of assuming: prebuilt .so files inside older plugins are the usual exceptions. Google's guide documents this check of an APK's zip alignment:
zipalign -c -P 16 -v 4 app-release.apkCompile your project in the cloud
Upload a ZIP or give a Git URL, choose APK or AAB, and read the real build log. Builder covers up to 20 Android source compiles a month, using its included credits. Check that your project is supported before you buy.
Frequently asked questions
Can I get an extension past August 31, 2026?
Google's extension, which developers who need more time to update an app request in Play Console, runs only to November 1, 2026. After it, new apps and app updates that target below API 36 are refused. Plan the rebuild rather than relying on the extension.
Will my published app disappear if I do nothing?
No. The API 36 rule applies to new apps and updates you submit. Separately, an existing app must target API 35 or higher to stay available to new users on devices running a newer Android version than the app targets. You cannot ship a fix or feature update until the app targets API 36.
Does raising targetSdk to 36 drop older phones?
targetSdk does not change which devices can install the app; minSdk does. Note that Flutter 3.35 also raised the default minSdk from 21 to 24, so if your project uses flutter.minSdkVersion, devices older than Android 7.0 stop receiving updates. You can set a lower minSdk yourself only as far as your Flutter version and plugins still support.
Do I need a Mac or Android Studio to rebuild?
No Mac is involved for Android. You need a current Flutter toolchain and an Android SDK with platform 36, either locally or in a cloud build that already has them.
Can I keep my Play listing, reviews and users?
Yes, if the update keeps the same application ID and is signed with your upload key. If you lost the upload key and your app uses Play App Signing, request an upload key reset in Play Console before you rebuild.
Code2Native Engineering
Engineering team
Written by the Code2Native engineering team — the people who build and operate the cloud build pipeline.
Next step
Check your project structure, build Flutter or Android source, and read failures.
Check supported source builds