Independent product studio · Swedenhello@karelialabs.com

Guide

Unreal Engine and Google Play's 16 KB page size rule: which version, and how to check

Short answerUnreal Engine 5.6 and higher support 16 KB page sizes. On 5.6.0 it needs legacy packaging, which 5.6.1 no longer requires. Rebuild or update every plugin's .so files, then check each 64-bit library in the AAB before you upload.

Updated

What the Play Console message means

Google's page size guide says that all apps targeting Android 15 (API level 35) and higher must support 16 KB memory page sizes on 64-bit devices on Google Play, and that from February 1, 2027 updates without 16 KB support can't be released. Play Console shows a compatibility warning for a bundle that doesn't support them.

Google Play already requires new apps and updates to target API level 36 (Google's target API rule; Wear OS, Android Automotive OS, Android TV and Android XR have lower levels). So for a phone or tablet app, the 16 KB rule applies to every update that contains native code.

The warning is about native libraries, the .so files for the 64-bit ABIs arm64-v8a and x86_64. A library fails when its LOAD segments are aligned to 4 KB instead of 16 KB, or when it is stored uncompressed and does not start on a 16 KB boundary in the zip. In an Unreal build that means the game library the engine builds and every library a plugin adds.

Which Unreal versions support 16 KB pages

Android's Unreal guide says Unreal 5.6 and higher support 16 KB page sizes. A post by Epic staff in the Unreal Engine forum adds the details:

  • UE 5.6.0 supports 16 KB pages only with useLegacyPackaging=true; set bExtractNativeLibs to True in the relevant Engine.ini.
  • UE 5.6.1 removed that requirement.
  • UE 5.7.0: the post lists an updated Google Play Asset Delivery library (libplaycore, version 1.15.4) and a warning when bundled libraries are not 16 KB aligned.
  • UE 4.27: 16 KB support is in the 4.27-plus branch, which also switched to the static libplaycore_static.a.

The same post says every .so file in the APK or AAB has to be rebuilt with the new linker flags, and that there is no way to patch an existing library: plugin developers must rebuild theirs, and if you have no source, ask the vendor. Google's guide and the vendor pages linked here were read on 15 November 2026.

Find the library that fails

  1. List the native libraries in the build. In a macOS, Linux or Git Bash terminal: unzip -l MyGame.aab | grep '\.so$'. In Windows PowerShell: tar -tf .\MyGame.aab | Select-String '\.so$'. In an AAB they are under base/lib/<abi>/, in an APK under lib/<abi>/.
  2. Look at the arm64-v8a and x86_64 folders; the rule is about 64-bit devices. Match each file name against the table below to see whether it comes from the engine, a plugin or an SDK.
  3. Check how each library is aligned. Ship Check (below) checks all of them at once. In Android Studio, Build > Analyze APK... shows an Alignment column that warns about every library that is not 16 KB aligned.
LibraryComes fromWhat to do
libUnreal.soYour game, built by Unreal Engine 5Build with UE 5.6.1 or higher (5.6.0 with legacy packaging).
libUE4.soYour game, built by Unreal Engine 4Use the 4.27-plus branch, per Epic's post.
libplaycore.soGoogle Play Asset Delivery, through its pluginEpic's post: updated to 1.15.4 in the 4.27-plus branch and for UE 5.7.0.
libAk*.soWwise (Audiokinetic)Audiokinetic says 16 KB support came in Wwise 2023.1.7. Update Wwise and its Unreal integration.
libfmod*.soFMODWe have not checked which FMOD release adds 16 KB support. Use a release built with NDK r28 or newer, or ask FMOD.
libc++_shared.soThe NDK's C++ runtimeGoogle says copies from NDK r26 and lower are not always 16 KB aligned. Rebuild with a newer NDK or update the plugin that ships it.
Any other .so fileA plugin or SDKRebuild it with NDK r28 or newer, or get a 16 KB build from its vendor.

Ship Check names libUnreal.so as Unreal Engine and the Wwise and FMOD libraries by vendor. libUE4.so, libplaycore.so and plugin libraries are listed by file name. In the forum thread, developers quote messages that name such libraries by path, for example base/lib/arm64-v8a/libplaycore.so.

Fix it

  1. Move to UE 5.6.1 or higher. On UE 5.6.0, use legacy packaging as above. On UE 4, use the 4.27-plus branch.
  2. Rebuild every plugin library you have the source for with NDK r28 or newer, or with -Wl,-z,max-page-size=16384 -Wl,-z,common-page-size=16384 on an older NDK. For the others, get a 16 KB build from the vendor.
  3. Package the AAB again and check it before you upload it.

Check the build before you upload it

  1. Open Ship Check and drop the .aab or .apk on the page. It is free, runs in your browser and nothing is uploaded.
  2. Read the 16 KB results. Every 64-bit library is checked for LOAD segment alignment and for Google's RELRO rule, and each failing library is named with the engine, plugin or SDK that ships it where Ship Check knows it. A library it does not know is listed by file name.
  3. On a build server, run Ship Check CLI: node shipcheck.mjs MyGame.aab --fail-on=error. It exits with code 1 when a check fails, so the pipeline stops before the upload. Add --date 2027-02-01 to see the build as it will be judged on that day.

Alignment is not the only test. Google's page also has a rule for the GNU_RELRO segment: if it ends inside a 16 KB page that also holds writable data, the app crashes with a segmentation fault (SIGSEGV) on a 16 KB device when that data is written. Google says this typically happens with libraries built with NDK r27 or lower without the 16 KB flags.

Ship Check reads what is in the file. It cannot see your Play Console, and a passing report does not guarantee that Google Play accepts the app.

The same rule in other engines

FAQ

Does UE 5.5 or older support 16 KB pages?

Android's Unreal guide names 5.6 and higher, and Epic's post names 5.6.0, 5.6.1, 5.7.0 and the 4.27-plus branch. Neither names a fix for other UE5 versions, so move to 5.6.1 or higher.

Do I still need useLegacyPackaging?

Only on UE 5.6.0, according to Epic's post; 5.6.1 removed the requirement. Google's page notes that compressed libraries take more space once installed.

Can a third-party .so be patched without its source?

No. Epic's post says there is no way to patch an existing library for 16 KB pages. It has to be rebuilt, so ask the vendor.

Is my build uploaded anywhere?

No. Ship Check reads the file in your browser, and Ship Check CLI reads it on your own machine.

More guides

More from Karelia Labs