Mobile App WikiMobile App Wiki
WikiApp DiscoverDiscuss

Wiki

    mobileapp.wiki

    Wiki

    • ASO17
    • Monetization14
    • Store Policies20
    • Metrics15
    • Development25
    • Marketing15
    • Legal9
    • UI/UX14
    • Testing10
    • Infrastructure10

    mobileapp.wiki

    Home/Development/Android 16 KB Page Size: Google Play Requirement and Fix Guide
    Development5 min read

    Android 16 KB Page Size: Google Play Requirement and Fix Guide

    What the 16 KB memory page size means on Android 15+, which apps Google Play affects, and how to check, fix and test native libraries for compliance.

    Android 16 KB Page Size: Google Play Requirement and Fix Guide

    Table of Contents

    What Is the 16 KB Page Size?Why Apps BreakThe Google Play RequirementWho Is Affected?How to Check Your AppHow to Fix ItUpdate the Build ToolingFix Dependencies and CodeTesting on a 16 KB EnvironmentEmulatorPhysical DevicesWhat to TestRelated Topics

    What Is the 16 KB Page Size?

    A memory page is the smallest block of memory the operating system manages. Android has historically used 4 KB pages. Beginning with Android 15, AOSP supports devices configured with a 16 KB page size, and Google is moving the ecosystem toward it.

    Larger pages reduce memory-management overhead. Google's initial testing reported:

    • App launch under memory pressure: 3.16% faster on average, up to 30% for some apps
    • Power draw during app launch: 4.56% lower on average
    • Camera launch: 4.48% faster hot starts, 6.60% faster cold starts
    • System boot: about 8% faster (roughly 950 ms)

    The trade-off is slightly higher memory use on average. Real-device results will vary.

    Why Apps Break

    Kotlin and Java code does not care about page size. Native code does. A shared library (.so) whose ELF LOAD segments are aligned to 4 KB cannot be loaded correctly on a 16 KB device, which usually ends in a crash at startup or when the library is first loaded. Code that hardcodes 4096 as the page size can also misbehave.

    The Google Play Requirement

    Google first announced that, starting November 1, 2025, new apps and app updates targeting Android 15 (API level 35) or higher must support 16 KB pages. The enforcement date has since moved. As of October 2026, the official Android guide states:

    • All apps targeting Android 15 (API 35) and higher must support 16 KB pages on 64-bit devices.
    • Starting February 1, 2027, app updates that don't support 16 KB pages cannot be released on Google Play.
    • Until then, Play Console shows a compatibility warning on affected releases.

    Because Play's target API level rules already push new apps and updates to recent API levels, practically every actively maintained app that ships native code is in scope.

    Who Is Affected?

    App setupAffected?What to do
    Pure Kotlin/Java, all dependencies pure JVMNoTest on a 16 KB environment anyway
    Own C/C++ code via the NDKYesRebuild with a recent NDK and AGP
    SDKs that bundle .so files (ads, analytics, crypto, media, ML)YesUpdate to a 16 KB-compatible SDK version
    React NativeYesUse React Native 0.77 or newer and update native modules
    FlutterYesUse a recent Flutter release and update plugins with native code
    Unity / Unreal gamesYesFollow the engine's 16 KB guide and update the engine

    The most common real-world problem is not your own code but a prebuilt native library inside a third-party dependency.

    How to Check Your App

    1. APK Analyzer – In Android Studio, open Build > Analyze APK, open the lib folder and look at the Alignment column for warnings.
    2. Lint – Android Studio Lint highlights native libraries that are not 16 KB aligned.
    3. zipalign – Verify ZIP alignment of the APK:
    zipalign -c -P 16 -v 4 app-release.apk
    # Output should end with "Verification successful"
    
    1. ELF alignment – Google's check_elf_alignment.sh script (Linux/macOS) prints ALIGNED or UNALIGNED for every arm64-v8a library. Manually, llvm-objdump -p libfoo.so should show LOAD segments with align 2**14; 2**13 or lower is a problem.
    2. App bundle – For an AAB, run bundletool dump config --bundle=app.aab | grep alignment and look for PAGE_ALIGNMENT_16K.
    3. Play Console – The app bundle explorer flags releases that do not support 16 KB pages.

    How to Fix It

    Update the Build Tooling

    • Android Gradle Plugin 8.5.1 or higher packages uncompressed shared libraries with 16 KB ZIP alignment. On AGP 8.3–8.5, APKs are aligned by default but bundletool does not zipalign APKs by default.
    • NDK r28 or higher compiles 16 KB-aligned libraries by default.
    • On NDK r27 or lower, add the linker flags yourself:
    target_link_options(${CMAKE_PROJECT_NAME} PRIVATE
        "-Wl,-z,max-page-size=16384"
        "-Wl,-z,common-page-size=16384"
    )
    

    For ndk-build, add the same flags to LOCAL_LDFLAGS.

    If you cannot upgrade AGP, you can ship compressed native libraries instead. This works but increases installed size:

    android {
        packaging {
            jniLibs { useLegacyPackaging = true }
        }
    }
    

    Fix Dependencies and Code

    • Update every SDK and plugin that ships .so files; check release notes for 16 KB support.
    • If a vendor has no compatible build, contact them or replace the dependency.
    • Remove hardcoded page sizes. Query the real value at runtime with sysconf(_SC_PAGESIZE) or getpagesize().
    • Rebuild, then re-run the checks above. Only arm64-v8a and x86_64 matter for 16 KB devices, but rebuild all ABIs together.

    Testing on a 16 KB Environment

    Emulator

    1. In Android Studio's SDK Manager, install the "Google APIs Experimental 16 KB Page Size" system image (ARM 64 v8a or x86_64) for Android 15 (VanillaIceCream) or higher.
    2. Create a virtual device with that image and boot it.
    3. Confirm the page size:
    adb shell getconf PAGE_SIZE
    # 16384
    

    Physical Devices

    On Pixel 8 and 8 Pro (Android 15 QPR1 or higher) and some newer devices, the developer option Boot with 16KB page size restarts the device in 16 KB mode. Samsung's Remote Test Lab also offers 16 KB test devices.

    What to Test

    • Cold start and every screen that loads native code (camera, video, maps, ML, payments)
    • Background work and push handling that may load native libraries lazily
    • Release builds, not only debug builds, since minification and packaging differ

    Related Topics

    • Android API Level Requirements in 2026: Target SDK Level 36
    • App Size Optimization: Reduce Your Mobile App Bundle
    • React Native: Cross-Platform Mobile Development
    • Flutter: Google's UI Toolkit for Multi-Platform Apps

    How did you find this content?

    Share

    ← Previous

    React Native: Cross-Platform Mobile Development

    Next →

    Flutter: Google's UI Toolkit for Multi-Platform Apps

    Related Content

    React Native: Cross-Platform Mobile Development

    A complete guide to React Native for building cross-platform iOS and Android apps with JavaScript and a single shared codebase in 2026.

    Flutter: Google's UI Toolkit for Multi-Platform Apps

    A comprehensive guide to Flutter for building natively compiled apps for mobile, web, and desktop platforms from a single Dart codebase.

    Expo: The React Native Platform for Fast Development

    Complete guide to the Expo platform for building, deploying, and updating React Native apps with managed infrastructure and cloud builds.

    CI/CD for Mobile Apps: Automating Build, Test, and Deploy

    How to set up continuous integration and continuous delivery pipelines for iOS and Android mobile apps using modern tools and practices.

    iOS Code Signing: Certificates, Profiles, and Provisioning

    Understand iOS code signing with certificates, provisioning profiles, App IDs, and entitlements to successfully build and distribute apps.