
Ну как, вы уже обновили свои приложения для поддержки новых требований Google? Если нет, то эта статья будет вам особенно полезна =) Напомню, что с 1 ноября 2025 года приложения, таргетирующиеся Android 15 и выше, должны поддерживать 16-килобайтные страницы памяти.
Как вы помните по предыдущим статьям, я работаю в МойОфис в команде разработки мобильной версии высоконагруженного корпоративного мессенджера Squadus (бэкенд на Node.js, NestJS и Meteor, а веб-интерфейс на React). Мы уже успешно перестроились на новые стандарты Google, и поэтому могу компетентно рассказать, что именно требуется, как адаптировать под это React Native-приложение и что делать, если используемая библиотека ещё не успела обновиться.
Требования и сроки от Google Play
Итак, еще раз: с выходом Android 15 устройства впервые смогут работать с увеличенным размером страниц памяти — 16 KB вместо привычных 4 KB.
Google сразу обозначил чёткий дедлайн: с 1 ноября 2025 года все новые APK/AAB и обновления, таргетирующие Android 15 и выше, должны корректно поддерживать 16-килобайтные страницы памяти.
Android 16 добавит специальный режим совместимости, однако в Google рекомендуют переходить на полную поддержку 16 KB, а не полагаться на fallback. Причина проста — ощутимый выигрыш в производительности. По оценкам Google и Android-команды, переход даёт:
ускорение запуска приложений на 3–30%;
ускорение загрузки камеры примерно на 4–6%;
сокращение времени загрузки системы на 8%;
снижение энергопотребления при старте приложений на несколько процентов.
То есть переход — не просто бюрократическое требование, а ощутимый апгрейд скорости и эффективности.
Если в вашем приложении только собственный нативный код — достаточно пересобрать его новыми инструментами. Но почти все современные проекты используют SDK и библиотеки с нативной частью. В нашем случае React Native как фреймворк несет множество нативных зависимостей. Их тоже придётся обновить и пересобрать с учётом 16 KB-выравнивания — иначе можно столкнуться с крашами и деградацией производительности.
Как проверить, соответствует ли приложение требованиям
Чтобы убедиться, что ваше приложение готово к переходу на 16-килобайтные страницы памяти, нужно собрать его актуальную версию и проверить совместимость. Самый надёжный способ — загрузить сборку в Play Console: в разделе App Bundle Explorer появится предупреждение, если поддержка 16 KB отсутствует.
Для локальной проверки стоит обновить Android Studio до последней версии. В ней можно открыть сборку через APK Analyzer (пункт Build -> Analyze APK) — в столбце Alignment будет отображено, с каким выравниванием собраны страницы. Кроме того, новый Android Gradle Plugin теперь автоматически проверяет соответствие требованиям при сборке и уведомит, если проект собран не под 16 KB.

Шаги миграции: обновление инструментов и кода
Первое, с чего стоит начать — обновить React Native как минимум до версии 0.77. Именно с этого релиза фреймворк получил полноценную поддержку 16-килобайтных страниц памяти.
Если вы переживаете из-за новой архитектуры и пока не готовы её включать, можно просто отключить её в сборщиках: в Android-проекте добавить строку newArchEnabled=false в android/gradle.properties, а для iOS в Podfile прописать ENV['RCT_NEW_ARCH_ENABLED'] = '0'. Этого будет достаточно, чтобы собрать совместимую версию без включения новой архитектуры.
Следующий шаг — обновление инструментов сборки. Скачайте новую Android Studio, рекомендую ставить Android Studio как минимум 2025.1.3, так как сообщество столкнулось с проблемой в Android Studio 2025.1.2 и ниже при проверке выравнивания.
Вместе с Android Studio установите Android Gradle Plugin 8.5.1 или новее — эти версии уже автоматически включают поддержку 16KB при сборке App Bundle и APK, а также корректно выравнивают нативные библиотеки под 16KB. Если по каким-то причинам вы используете AGP до 8.5.1, можно временно включить старую упаковку, добавив в build.gradle опцию useLegacyPackaging внутри packagingOptions.
Далее — NDK и нативный код. React Native 0.77 идёт с NDK 27, но лучше сразу установить Android NDK r28 или выше, где 16-килобайтное выравнивание уже включено по умолчанию. Для более ранних версий (r27 и ниже) придётся явно указать поддержку гибких размеров страниц: добавьте аргумент -DANDROID_SUPPORT_FLEXIBLE_PAGE_SIZES=ON в CMakeLists.txt или Gradle.
Если используете ndk-build, в Application.mk нужно прописать APP_SUPPORT_FLEXIBLE_PAGE_SIZES := true. Не стану рассказывать про все более старые версии NDK, если у вас ниже r26 обратитесь к инструкции от Google.
Отдельно стоит проверить, чтобы в проекте не было жёстко зашитой константы PAGE_SIZE=4096 — вместо неё используйте динамический вызов sysconf(_SC_PAGESIZE) в C/C++ или аналог в Java. Это гарантирует, что код корректно подстроится под любой размер страницы.
После этого можно переходить к обновлению зависимостей и SDK. Соберите APK или AAB, откройте сборку в APK Analyzer внутри Android Studio и посмотрите столбец Alignment. Если увидите предупреждения у отдельных .so-файлов, обратите внимание на их имена — по ним легко определить библиотеку. Например, libmmkv.so принадлежит react-native-mmkv, а libreanimated.so — react-native-reanimated. Именно эти зависимости нужно обновить. В нашем случае, например, потребовалось обновить Jitsi SDK до 11.5.1, а также ряд других библиотек: старые версии просто не были готовы к 16KB. Если какая-то из ваших зависимостей до сих пор не поддерживает 16KB, можно обратиться к разделу «Что делать, если библиотека не поддержала 16KB».
Далее — сборка и упаковка. В сообществе React Native часто отмечают, что некоторые нативные библиотеки попадают в итоговый пакет уже сжатыми. Поэтому убедитесь, что при сборке .so-файлы включаются без сжатия (параметр extractNativeLibs=false или аналогичный) и проходят ZIP-выравнивание средствами AGP или bundletool. В CI/CD-цепочке стоит обновить сам bundletool как минимум до версии 1.17.0 — в ней выравнивание на 16KB включено по умолчанию.
Заключительный этап — тестирование. После сборки запустите приложение на устройстве или эмуляторе с 16-килобайтными страницами. Android Studio уже предлагает образы с такой конфигурацией, а на реальных Pixel 8 / 8a / 8 Pro (с Android 15 QPR1) можно включить режим разработчика «Boot with 16KB page size». Если у вас нет нужного устройства, подойдёт и Samsung Remote Test Lab или другие облачные сервисы. Проверьте все ключевые сценарии, особенно те, где используется нативный код. Это поможет вовремя поймать проблемы, связанные с фиксированным размером страницы 4KB, до выхода релиза.
Так мы готовили приложение и окружение к новым требованиям Google. Если что-то останется неясным — загляните в официальную инструкцию Google.
Что делать, если библиотека не поддержала 16KB
Иногда библиотеки с нативной частью обновляются не так быстро, как хотелось бы, — или вовсе перестали поддерживаться. В этом случае не всё потеряно: проблему можно решить вручную.
Для начала проверьте issues библиотеки на GitHub. Часто кто-то уже столкнулся с той же ошибкой и либо открыл pull request, либо описал временное решение в обсуждении. Если готового фикса нет — можно пропатчить библиотеку самостоятельно или форкнуть её, изменив настройки сборки.
В CMakeLists.txt добавьте поддержку 16-килобайтных страниц:
cmake_minimum_required(VERSION 3.10.2)
project("my_native_lib")
# Добавляем поддержку 16 KB страниц
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,-z,max-page-size=0x4000")
add_library(my_native_lib SHARED my_native_lib.cpp)
find_library(log-lib log)
target_link_libraries(my_native_lib ${log-lib})
Здесь 0x4000 — это 16384 байта, то есть 16 KB. Флаг сообщает линковщику, что максимальный размер страницы для данного ELF-файла должен быть 16 KB.
Если библиотека собирается через Gradle, добавьте параметры в app/build.gradle:
defaultConfig {
applicationId "com.example.myapp"
minSdk 23
targetSdk 35
// подключаем параметры CMake
externalNativeBuild {
cmake {
arguments "-DANDROID_SUPPORT_FLEXIBLE_PAGE_SIZES=ON"
cppFlags "-std=c++17"
}
}
}
После этого пересоберите зависимость, затем — всё приложение, и проверьте результат в APK Analyzer. Если выравнивание отображается как 16 KB, значит всё прошло успешно.
Выводы и рекомендации
Переход на 16 KB page size в Android — не просто оптимизация, а обязательное требование для всех новых версий приложений, начиная с конца 2025 года. Несмотря на то, что времени осталось немного, большая часть миграции сводится к обновлению инструментов, зависимостей и пары конфигурационных строк. Если подойти к этому заранее, переход пройдёт спокойно, а приложение — получит бонус в производительности и энергоэффективности.
Ну а если вам близки темы производительности, системной архитектуры и нативных технологий, обязательно загляните в нашу новую вакансию — Архитектор решений (Solution Architect) в команду Squadus =)
Источники:
— официальная документация Google по 16KB page size
— руководство Getting ready for 16KB
— блог React Native 0.77