If you’ve recently uploaded an app to the Google Play Console, you might have seen this new warning:
“The App isn’t 16KB compatible.”
This message started appearing in 2025 as Google now requires 64-bit native libraries to be aligned on 16KB boundaries for Android 15 and newer devices. Many developers are confused, but the fix is straightforward if you know what to update.
Naturally, this raises questions like “How do I prepare my Flutter apps for Google Play’s 16KB page size requirement?” or “How can I solve the 16KB memory page warning in Flutter or Android?”
I recently solved this issue for my own Flutter app, so here’s a step-by-step guide to help you fix it too.✅
1. Update to the Latest Flutter & Tools
Make sure you’re on the latest Flutter stable version. At the time of writing:
Flutter → 3.x (latest stable)
Dart (Narwhal) → 2025.1.3
NDK → r28
Gradle → 8.14.3-all.zip OR Above
Android Gradle Plugin (AGP) → latest stable (8.6+), [I used(8.9.1)]
Compile & Target SDK → 36
Run:
flutter upgrade
flutter pub upgrade
2. Update Dependencies
Play Console often flags outdated .so libraries bundled inside dependencies.
Update all your pubspec.yaml packages to their latest stable or beta versions.
Rebuild your project to ensure it links against the latest native binaries.
3. Use a 16KB-Compatible Emulator for Testing
On Android Studio:
Go to Device Manager → Create Virtual Device.
Enable “Show Hidden Settings”.
Create an emulator, and select the Pre-Release 16KB Option, then hit Finish.
Run your app inside that emulator.
👉 If you still get the 16KB compatibility warning, update more libraries in the (pubspec.yaml) until it disappears.
4. Verify AAB Before Publishing
Before uploading to Play Console, you can manually check your AAB for 16KB alignment.
Run the following commands:
rm -rf extracted_aab
unzip -q build/app/outputs/bundle/release/app-release.aab -d extracted_aab
find extracted_aab/base/lib -name "*.so" -exec sh -c '
for f; do
if readelf -lW "$f" | grep -q "0x4000"; then
echo "✅ $f is 16KB aligned"
else
echo "❌ $f is only 4KB aligned"
fi
done
' sh {} +
✅ Good: If your arm64-v8a and x86_64 libraries show 0x4000 → they’re aligned correctly.
❌ Bad: If you still see 4KB, update the related dependency and rebuild.
⚠️ Note: 16KB alignment only applies to 64-bit libraries (arm64-v8a, x86_64). 32-bit ones (armeabi-v7a) are not required to be 16KB aligned.
5. Upload to Play Console
Once your .so files are aligned correctly, rebuild your release bundle and upload it to Play Console. The warning should disappear. 🎉
✅ Final Checklist
Flutter upgraded (latest stable)
Dart (Narwhal 2025.1.3)
NDK r28
Gradle 8.14.3-all.zip
AGP 8.6+
Target SDK 36
Dependencies updated
Emulator tested (16KB option)
Verified with readelf
💡 Conclusion
This 16KB compatibility warning is new but not a bug in your app—it’s just a signal that Google is moving forward with new memory alignment standards for Android 15+.
By keeping your tools, SDKs, and dependencies up to date, and verifying your AAB manually, you can resolve the issue quickly and avoid rejections in the future.
Top comments (10)
Thanks for sharing this! I was stuck with the same 16KB warning on Play Console and your step-by-step explanation actually cleared things up. The Gradle changes you mentioned worked perfectly. Really appreciate the way you explained it in simple terms
The 16KB survival kit we all needed...
Glad it helped
Oh god, i missed this page, My complete app code is gone while working on this 16kb thing,
now i have complete broken code :(
need some helping hand :(
Sorry to hear that, you might be having a backup code on Github, get to the previous code, and follow this article, hopefully it will help you sort your issue.
i have code in my local, unfortunately my app is in the playstore now, when i try to fix the code lot of libraries mismatched and my core functionality in the app gone, now the app is not at all building :(
Nice article! Do you have any recommendation about the libdatastore_shared_counter.so ? It is from Google Firebase/Firestore and it is dtill 4K !
Thanks 🙌 That .so is part of Firestore internals (~4KB). Safe to keep, nothing to optimize there — main size gains come from R8/ProGuard + shrinkResources.
There is also a shell script code that does the verification for you.
You can find the
check_elf_alignment.sh
script here — special thanks to @NitinPrakash9911 for sharing it.Create the shell script file, copy the code and place it in the root of your project, then make it executable: