Google Play’s New Rule – 16 KB page size compatibility on Android Apps.

Android has announced that starting November 1st 2025, apps that do not support a 16KB page size will not be approved on the Play Store. Please refer to the official link for details.

In this blog, we are going to see the changes we need to make in our Flutter application.

Android SQLite Page Size Explained

Generally, people might think that page size refers to an app’s screen size, but that is not the case. Page size in Android refers to the memory allocation used by SQLite to enable faster database transactions. Previously, SQLite used a 4 KB page size. This page holds cached data to improve performance, allowing faster reads/writes and smoother switching between apps. This is a system/SQLite-level change, not an app-level change.

Why did Android increase the page size?

Modern smartphones come with larger RAM and more powerful hardware, allowing faster and smoother app performance. To take advantage of this, Android increased the SQLite page size from 4 KB to 16 KB, improving database read/write speed and overall app responsiveness. For more details, please check the official Android video.

Will Flutter or Android apps be faster than before?

It depends on the features your app uses. According to the Android documentation, the page size change affects SQLite databases. Apps that use SQLite for caching or local storage will see significantly faster database transactions. Apps that do not use SQLite will not notice a performance difference. However, all apps need to support this change to comply with Play Store requirements.

How do we create new flutter app to support this change?

If you are starting a new project, please use the latest version of Flutter. If you need to use an older version, make sure it is a stable version greater than 3.27.0, because support for the 16 KB page size in Flutter starts from this version. Using an older version may prevent you from submitting your app or updates to the Play Store. Below the release notes from 3.27.0

How can I check if my project supports this change?

The steps to check are as follows:

The project below was created using Flutter version 3.32.2.
  • Open your project, go to the project terminal, and run the command to generate the APK.
  • After building the APK, copy it to a folder of your choice, such as Desktop or Downloads.
  • Then, in Android Studio, go to the Build menu, select Analyze APK, and choose the APK file you just generated.
  • This will display the following details in the IDE.
Note: Make sure you are using the latest version of Android Studio. In older versions, the Compressed column will not be visible.
  • The above .so files show Compressed: Yes, so there is no problem with this project.

What is .so file?
A .so file stands for Shared Object file. It’s a compiled binary library used mainly in Linux and Android systems. contain native code written in C, C++, or Rust, compiled for different CPU architectures (like arm64-v8a, armeabi-v7a, x86_64)

If any .so file shows “Compressed: No,” you need to apply the following updates:

  • Important: The first step is to upgrade the gradle to the latest or greater than 8.5.1
  • Important: Next upgrade the NDK Version upto 28
The two updates mentioned above can be found in the official documentation. If you miss this change, your app may crash, fail to build, or cause native libraries to stop working. For more details, please refer to this link.
  • Next Step – Upgrade the package to the latest version that supports the 16KB page size. Below is an example of where you can check for updates in the packages.
  • In some cases, we might use native bridging or import libraries directly into our application. In such scenarios, we need to identify which plugin is not compressed.
  • Please see the example below, which is using an older Flutter version (< 3.27.0).
  • If you upgrade to the latest Flutter version, the libapp.so and libflutter.so files will be compressed.

What about libbarhopper_v3.so and libdatastore_shared_counter.so?

You first need to identify which plugin or dependency is using these .so files.
Open the android folder in a new window and run the following command in your terminal:

./gradlew app:dependencies > deps.txt

Then, open the deps.txt file and search for keywords related to the .so file (for example, barhopper or datastore). The matching entry will point to the plugin or dependency that includes the .so file.

If the above method doesn’t work, simply search on Google to find out which Flutter package is using the corresponding .so file.

Now we can see that libbarhopper comes under ML Kit. Next, you need to identify the native plugin being used for ML Kit. You can easily find this by checking the project’s GitHub repository.

Here you can see the native dependency com.google.mlkit:barcode-scanning used. So we need to find the latest version which supports the 16KB. That you can find it in the ml kit release notes

Simply update to the latest version of the dependency, and your issue will be resolved! 🚀🎉

Note:
Due to this dependency change, you may have to update the native code too. So please check the functionality it is working or not.

Please check our other blog:

Flutter – Tutorials, Expert Tips, Real world Solutions.

Please follow us:

YouTube

LinkedIn

Instagram

Facebook