Skip to content
Back to journal
FlutterAndroidGoogle PlayBuild Errors

Flutter 16 KB Page Size: We Measured Three Flutter Versions

CCode2Native EngineeringEngineering team
Published

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 build

From February 1, 2027, Google Play will not release updates of apps that target Android 15 or higher unless they support 16 KB memory pages on 64-bit devices. We created a fresh app with each of three Flutter versions and measured it. The Flutter engine and the compiled Dart code passed on all three. The difference was how they are packed, and the real risks are a plugin that ships its own native library and an old Android Gradle Plugin.

What we measured

Flutter64-bit libflutter.so and libapp.soNative libraries in the APKzipalign -c -P 16Release APKDefault targetSdk
3.44.5Aligned to 64 KBUncompressed, at 16 KB offsetsPasses43.4 MB36
3.24.5Aligned to 64 KBCompressed, extracted at installPasses18.7 MB34
3.19.6Aligned to 64 KBCompressed, extracted at installPasses18.4 MB33

Method, October 3, 2026: in the Flutter builder images Code2Native runs, flutter create with default settings, then flutter build apk --release and flutter build appbundle --release. We read the program headers of every 64-bit library (arm64-v8a and x86_64) in the APK and the AAB, the same check our website builds run before they are marked ready for Google Play, and ran zipalign -c -P 16 -v 4 from Android build-tools 36.0.0 on each APK. Sizes are in decimal megabytes; Flutter 3.19.6's own build output prints them in binary units.

What the numbers mean

  • Flutter's own libraries are fine. Both were aligned to 64 KB, four times what 16 KB pages need, on every version we built.
  • A new project packs them differently. A fresh 3.44.5 project stores the libraries uncompressed at 16 KB boundaries, so Android can load them straight from the APK: its 42.8 MB of libraries fill almost the whole 43.4 MB APK. The two older projects compress about 39.5 MB of libraries to 18 MB, and Android unpacks them at install. Both ways pass. We checked the APK itself, not the APKs Play generates from the AAB; for those, the Android Gradle Plugin rule below applies, and an upgraded project keeps the plugin version it already had.
  • The Flutter version still matters for Google Play. By default, Flutter 3.24.5 and 3.19.6 target API 34 and 33, below what Play accepts for updates. See Flutter target API 36.
  • Plugins and old build tools are the risk. A fresh app has no plugins. A plugin that ships a prebuilt .so brings its own alignment, and Google warns that some SDK prebuilts are not 16 KB compatible.

Check your own build

Run Google's check on the release APK:

zipalign -c -P 16 -v 4 app-release.apk

Then open the APK in Android Studio (Build > Analyze APK), expand lib, and read the Alignment column for every 64-bit .so. A failing library's file name usually points to the plugin or SDK that ships it. The -P option needs build-tools 35.0.0 or later, and zipalign marks a compressed library “OK - compressed” without checking it, so for compressed libraries the Alignment column is the check that counts. Google's 16 KB page size guide adds the build-side rules: native code built with NDK r28 or later is aligned by default, older NDKs need linker flags, and Android Gradle Plugin 8.5.1 or later aligns uncompressed libraries in the APK.

Building it in the cloud

Code2Native's source builds use Flutter 3.44.5 by default, the version in the first row, and build the APK or AAB you choose. Flutter builds are not checked for 16 KB alignment for you yet, so run the check above on what you download. Source builds need Builder ($39/month) or Pro; check that your project is supported before you buy.

Compile 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

Does the 16 KB rule apply to my Flutter app?

If it targets Android 15 (API level 35) or higher, yes: every Flutter app ships native libraries (the Flutter engine and your compiled Dart code), and from February 1, 2027 Google Play will not release updates that do not support 16 KB memory pages on 64-bit devices.

Is Flutter itself 16 KB compatible?

In our builds, yes, on all three versions we tried: a fresh app from each version's flutter create on Flutter 3.19.6, 3.24.5 and 3.44.5 had its 64-bit libflutter.so and libapp.so aligned to 64 KB, and every APK passed zipalign -c -P 16. Older versions still fail Google Play for another reason: by default, 3.24.5 and 3.19.6 target API 34 and 33.

Then why would my app fail the check?

Because of plugins that ship their own .so files, or an Android Gradle Plugin older than 8.5.1. Google warns that some SDK prebuilts are not 16 KB compatible, so check what you build rather than the Flutter version alone.

How do I check my own app?

Run zipalign -c -P 16 -v 4 on the release APK, and look at the Alignment column for each .so in Android Studio's APK Analyzer (Build > Analyze APK). Every 64-bit library needs LOAD segments aligned to at least 16 KB.

C

Code2Native Engineering

Engineering team

Written by the Code2Native engineering team — the people who build and operate the cloud build pipeline.