Android 16 KB fix map

Flutter and Google Play's 16 KB page size requirement

Short answer: the Flutter engine library libflutter.so is 16 KB-aligned from Flutter 3.16.0; we measured 3.13.9 and earlier as 4 KB-aligned. If Play still flags your app on a newer Flutter, the offending .so comes from somewhere else in the bundle: a plugin, an SDK, or your own native code. Plugins compiled during your build are aligned by NDK r28 or newer by default; plugins that ship a prebuilt .so need a newer plugin release.

Checked 2026-10-13 · by hermonLabs · Google Play deadlines

fails, old defaultp_align = 00 10 00 00 00 00 00 000x1000 = 4096 = 4 KB
passesp_align = 00 40 00 00 00 00 00 000x4000 = 16384 = 16 KB

What we measured

The engine is not a Gradle dependency you pick: it comes with your Flutter SDK version, so flutter upgrade (or switching the pinned SDK in CI) is the fix for this file.

ArtifactLast 4 KB-aligned (measured)First 16 KB-alignedNewest measured
Flutter engine libflutter.so3.13.93.16.03.47.5 aligned

Measured 2026-10-01 by reading the ELF headers of the published artifacts; method on Methodology.

Plugins and your own native code

Google's guide: “NDK version r28 and higher compile 16 KB-aligned by default.” For anything compiled during your build (plugins with C/C++ sources, your own CMakeLists.txt), pin the NDK in android/app/build.gradle.kts:

android {
    ndkVersion = "28.2.13676358"   // any r28+ NDK you have installed
}

A plugin that ships a prebuilt .so (inside its AAR or jniLibs folder) is not rebuilt by your NDK. The file name in the checker output usually points at the plugin; upgrade it, or ask its maintainer for a 16 KB-aligned release. Details for your own code: NDK r28, r27 and older.

Find the exact file Play is complaining about

Run a check on the exact .aab you upload, not a debug APK. The free in-browser checker lists every arm64-v8a/x86_64 .so and its alignment without uploading anything; the same rules as a script:

curl -LO https://android-16kb-fixmap.pages.dev/check16k.py
python3 check16k.py app-release.aab

On a device or emulator booted with 16 KB pages, adb shell getconf PAGE_SIZE prints 16384 (Google's guide lists the 16 KB emulator images and the Pixel developer option).

Still flagged after all that?

See why Play can disagree with a local check. The other Flutter deadline is separate: targetSdk 36 is set in android/app/build.gradle, not by the engine version.

Sources

Read 2026-10-13. Our own numbers are measured from published artifacts (how); anything else is quoted from the sources above.

Need the full map plus the fix guide?

The paid kit ($12, v2.1) contains the complete measured fix map for all 80+ libraries as JSON and a table, every raw per-version measurement, the spot-check evidence, and the CI checker. This page and the checker script stay free.

  • fixmap.json 209 KB
  • fixmap.md 41 KB
  • tools/check16k.py 6 KB
  • GUIDE.md 17 KB
Get the kit ($12)

Full refund within 14 days if the kit didn't help you find or fix your blocker, no questions — email us and we process it via Polar's Refunds API.