Android 16 KB fix map

Android Studio says your app supports 16 KB pages, Google Play says it doesn't

Short answer: Play checks every 64-bit .so in the exact bundle you uploaded, and the zip alignment of uncompressed libraries. A local check can pass while Play fails when it looked at a different build, skipped one library, or the problem is zip alignment rather than ELF alignment. Check the uploaded .aab itself, every library in it, and your AGP version.

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

1. Check the bundle you uploaded

A debug APK or an older local build is not what Play scanned. Download the .aab from your release (or rebuild with the same commit and config) and check that file:

python3 check16k.py app-release.aab
bundletool dump config --bundle=app-release.aab | grep alignment   # expect PAGE_ALIGNMENT_16K

2. Check every library, not just yours

One prebuilt .so from an SDK is enough to fail. Google's guide specifically warns that some libc++_shared.so builds from NDK r26 and lower are not 16 KB-aligned. The checker lists each library with its alignment; look up the flagged ones in the library index.

3. Zip alignment, not ELF alignment

Libraries can be correctly built and still fail if they are stored uncompressed at an offset that is not a multiple of 16 KB. Google's fix: AGP 8.5.1 or newer (or useLegacyPackaging = true on older AGP). Check an APK with zipalign -c -P 16 -v 4 app.apk. Details on the NDK and AGP page.

4. The local check itself

In the Stack Overflow thread above, the accepted answer reports that Android Studio Narwhal 2025.1.1 did not check AAB alignment properly (APKs were fine) and that a newer Android Studio, NDK r28 and an updated Gradle fixed it for them. That is a community report, not a Google statement; a check that reads the AAB directly, like the commands above, sidesteps the question.

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.