App Rejection Fix
Google Play

Google Play Says Your App Doesn’t Support 16 KB Page Sizes? Let’s Fix the Native Libraries.

Newer 64-bit Android devices run with 16 KB memory pages instead of the traditional 4 KB. Native code that was linked with 4 KB assumptions either runs in a compatibility mode with a warning or fails outright. Google Play therefore requires every app that targets Android 15 (API level 35) or higher to support 16 KB page sizes — enforced for new apps and updates since 1 November 2025, with a hard stop for all updates on 1 February 2027. Because target API 36 is now mandatory for updates, practically every app that ships a release has to pass this check. Pure Java/Kotlin apps already do; apps with native libraries — their own or from SDKs, Flutter, React Native, Unity — often do not.

Free initial review · No payment required · No source code required initially

On this page (7 sections)

What Google requires

  • “All apps targeting Android 15 (API level 35) and higher must support 16 KB memory page sizes on 64-bit devices on Google Play.”
  • Since 1 November 2025, new apps and updates to existing apps that target Android 15+ must support 16 KB page sizes.
  • “Starting February 1, 2027, if your app updates don’t support 16 KB memory page sizes, you won’t be able to release these updates.”

Sources: Android Developers, Support 16 KB page sizes, and the Android Developers Blog announcement (linked in the sources panel; verified 22 September 2026). Community threads mention case-by-case extensions granted through Play Console; Google’s documentation does not describe them, so plan on the dates above.

Who is affected

Which apps need changes for 16 KB page sizes
App type Needs changes? Why
Java / Kotlin only, no .so files in the bundle No (test anyway) No native code to align
Native code you build (C/C++, NDK) Yes, if built with NDK r27 or older without flags ELF segments must be 16 KB aligned
Third-party SDKs with native code (ads, analytics, media, crash reporting, maps, payments) Yes, until the vendor ships aligned builds You cannot re-link a vendor .so — only upgrade or replace it
Flutter Usually via plugins The Flutter engine is aligned in current releases; old plugin versions are not
React Native Usually via native modules Hermes and RN core are aligned in current releases; old modules are not
Unity / Unreal Yes, on old engine versions Engine and plugin .so files; both vendors publish 16 KB guidance

How to check your bundle

  1. Play Console — the app’s policy status or the release warnings name the issue; the App bundle explorer lists the native libraries per ABI.
  2. APK Analyzer (Android Studio → Build → Analyze APK): the lib folder shows an alignment column with warnings for misaligned .so files.
  3. zipalign -c -P 16 -v 4 app.apk — must end with “Verification successful”. Bundles: bundletool dump config --bundle=app.aab | grep alignment should show PAGE_ALIGNMENT_16K.
  4. ELF check per library: llvm-objdump -p lib.so | grep LOAD — every LOAD segment needs align 2**14 or higher; 2**12 / 2**13 fail. Google’s check_elf_alignment.sh script does this for a whole APK.
  5. Run it on a 16 KB device or emulator image (adb shell getconf PAGE_SIZE returns 16384) — a warning dialog on first launch means the app is running in backcompat mode.

Alignment itself can only be proved from the built bundle, so nothing you paste into a form can confirm it. What a configuration file can show is whether the toolchain is capable of producing aligned libraries at all and which dependencies are likely to ship native code — our update readiness checker flags exactly that, and says plainly that the 16 KB check itself still has to happen on the artefact.

How the fix works

Native code you build

  • NDK r28 or newer links 16 KB-aligned by default — no flags needed.
  • NDK r27 and older: add -Wl,-z,max-page-size=16384 -Wl,-z,common-page-size=16384 to the linker flags (LOCAL_LDFLAGS in ndk-build, target_link_options in CMake).
  • Remove hard-coded 4096 / PAGE_SIZE assumptions; use getpagesize() or sysconf(_SC_PAGESIZE). Custom allocators and mmap arithmetic are the usual suspects.
  • Android Gradle Plugin 8.5.1 or newer packages uncompressed libraries with 16 KB zip alignment. If AGP cannot be upgraded yet, packagingOptions { jniLibs { useLegacyPackaging = true } } compresses the libraries as a fallback — slower installs, but compliant.

Third-party SDKs

Upgrade to the vendor’s 16 KB-ready release; if the vendor has none, replace the SDK. Most major SDKs shipped aligned builds during 2025, but transitive dependencies pinned by an old plugin or a resolutionStrategy often drag the old version back in — check the resolved dependency tree, not the declared one.

Flutter, React Native, Unity

  • Flutter: upgrade the Flutter SDK and every plugin with native code; then verify the plugin .so files in the bundle, because a plugin can declare compatibility and still ship an old binary.
  • React Native: upgrade to a release with aligned Hermes/core, then each native module; check node_modules/**/android for prebuilt .so files.
  • Unity: move to a Unity version with 16 KB support and rebuild; re-import Google and third-party plugins. Unreal: follow Epic’s Android page-size guidance.

Backcompat mode is not compliance

Android 16 can run a misaligned app in 16 KB backcompat mode and shows the user a warning. That keeps the app from crashing for some users; it does not satisfy the Play requirement and it is not a reliable state for every library. The bundle itself has to be aligned.

What we do

  1. Pull the native-library inventory from your bundle (or from the dependency tree if you cannot share a build) and run the alignment checks per ABI.
  2. Attribute each failing .so to its owner: your code, a plugin, or a transitive SDK.
  3. Upgrade, rebuild or replace — including the AGP/NDK/Gradle changes that come with it — and re-verify with zipalign and llvm-objdump.
  4. Test on a 16 KB device image, then produce the release bundle and rollout notes. If the same release needs the target API 36 or Billing Library 8 change, we do them together.

Checklist

  • Every .so in every ABI folder passes the ELF alignment check
  • zipalign -c -P 16 succeeds on the APK; bundletool shows PAGE_ALIGNMENT_16K
  • NDK r28+ or linker flags in place for own native code; no hard-coded page size
  • AGP 8.5.1+ (or legacy packaging as a documented fallback)
  • Third-party SDKs at 16 KB-ready versions, verified in the resolved dependency tree
  • Tested on a 16 KB emulator image or Pixel device without the backcompat warning
  • Release plan aligned with the target API level and Billing Library requirements

Frequently asked questions

How do I know whether my app is affected by the 16 KB page size requirement?

If your app targets Android 15 (API level 35) or higher and ships any native code, it is in scope — and because target API 36 is now mandatory for updates, that is most apps that still release. Pure Java/Kotlin apps generally pass already. Native code arrives more often through SDKs and frameworks than through your own source: Flutter and React Native engines, Unity, and ads, analytics, database, media or security SDKs all bundle .so files.

Related: 16 KB Page Size Fix

Can I check 16 KB alignment without building the app?

Not conclusively. Alignment is a property of the compiled .so files, so it can only be proved from an APK or bundle — with zipalign -c -P 16, bundletool, APK Analyzer or an ELF segment check. What a build file can tell you is whether the toolchain is even capable of producing aligned libraries and which dependencies are likely to carry native code. Our update readiness checker reports exactly that and says plainly that the alignment check itself still has to happen on the artefact.

Related: 16 KB Page Size Fix, Android Update Readiness Checker

What happens if my app does not support 16 KB page sizes?

Today an affected app either runs in a compatibility mode on 16 KB devices — with a warning on first launch — or fails outright, and Play Console flags the bundle. From 1 February 2027, updates that do not support 16 KB page sizes cannot be released at all. The requirement has applied to new apps and updates targeting Android 15 or higher since 1 November 2025.

Related: 16 KB Page Size Fix, App Publishing Deadlines

Not sure which native library is failing the 16 KB check?

Share the Play Console warning and your dependency list (build.gradle, pubspec.yaml, package.json or the Unity plugin list). The initial review names the offending libraries, whether an SDK upgrade or a rebuild fixes them, and what the release plan looks like.

What happens next: an engineer on our technical team reads the notice you send — not an autoresponder. We work out what it most likely means and what we would check, and reply with that assessment and a recommended next step.

The initial compatibility review is free. Rebuild and SDK-upgrade work, if you want us to do it, is quoted separately.

Get My Free Update Review

Free initial review · No payment required · No source code required initially