Перейти к основному содержимому
  1. Посты обо всем/

Android 15 и 16 KB страница памяти: что изменится, как подготовить Android и Flutter-приложения

·951 слово·5 минут· loading · loading · ·
Android Flutter Dev
Оглавление

Введение
#

С выходом Android 15 Google изменил фундаментальный принцип управления памятью: вместо фиксированных 4 KB страниц операционная система теперь поддерживает 16 KB memory pages.

Этот переход улучшает производительность и экономию энергии, но в то же время требует пересборки приложений, особенно тех, которые используют нативный код (NDK, C/C++, Flutter engine или плагины).

С 1 ноября 2025 года Google Play Console будет отклонять приложения без поддержки 16 KB страниц.

Если хотите сразу перейти к описанию как обновить flutter проект - переходите к части: Flutter-часть: что нужно сделать Flutter-разработчикам

1. Ключевые термины: MMU, Memory Page, Page Fault, Page Table, TLB
#

Постараюсь привести объяснение терминов которые встретятся далее в статьею Чтобы легче было запоминать - приведу аналогию с городской библиотекой. Если вам не интересно читать описание терминов - можете переходить к следующей части: Почему Google вводит 16 KB memory pages.

MMU (Memory Management Unit)
#

Аппаратный блок процессора, который сопоставляет виртуальные адреса с физической памятью и управляет правами доступа.
📖 Аналогия: библиотекарь, который по запросу читателя ищет книгу в каталоге и определяет её местонахождение на полке.


Страница памяти (Memory Page)
#

Минимальная единица управления памятью.

  • До Android 15 стандарт → 4 KB.
  • Теперь возможны → 16 KB.

📖 Аналогия: единообразие размеров книг библиотеке - одинаковый размер для упрощённого хранения книг.


Page Fault
#

Ошибка доступа к странице, когда её ещё нет в памяти. Ядро решает: подгрузить, выделить новую или запретить доступ.

📖 Аналогия: читатель просит книгу, библиотекарь идёт в архив потому, что на полке её пока нет.


Таблица страниц (Page Table)
#

Каталог соответствий виртуальных и физических страниц.

📖 Аналогия: карточный каталог библиотеки, где указано расположение каждой книги.


TLB (Translation Lookaside Buffer)
#

Быстрый кэш в процессоре для преобразований адресов.

📖 Аналогия: закладки для популярных книг - библиотекарь сразу знает, где они, без поиска в каталоге.


2. Почему Google вводит 16 KB memory pages
#

История
#

Исторически Android поддерживал только 4 KB страницы. Это было оптимально для устройств с небольшим объёмом RAM.

Но современные устройства имеют десятки гигабайт памяти и многоядерные процессоры. В этих условиях миллионы маленьких страниц стали создавать избыточные накладные расходы:


Что изменилось в Android 15
#

Android 15 впервые сделал платформу страница-независимой и добавил поддержку 16 KB страниц.

Зачем это было нужно:

  • меньше записей в таблицах страниц;
  • меньше TLB-промахов;
  • меньше обходов таблиц;
  • лучше масштабируемость под устройства с большим объёмом RAM.

Пример: чтобы отобразить 64 MB памяти

  • при 4 KB страницах → 16 384 записи
  • при 16 KB страницах → всего 4 096 записей.

Результаты тестов от Google
#

  • Запуск приложений быстрее на 3,16% в среднем (до 30% для отдельных).

  • Энергопотребление при запуске ниже на 4,56%.

  • Камера стартует быстрее: +4,48% (hot start) и +6,60% (cold start).

  • Загрузка системы быстрее на 8% (~950 мс).


Какие минусы
#

  • Внутренняя фрагментация: небольшой объект (например, 5 KB) занимает целую страницу 16 KB.

  • Но таблицы страниц уменьшаются в 4 раза, что компенсирует перерасход памяти.



3. Flutter-часть: что нужно сделать Flutter-разработчикам
#

❓ Почему это важно для разработки под Flutter
#

Flutter-приложения почти всегда используют нативный код:

  • сам Flutter engine написан на C/C++;
  • плагины (ads, analytics, camera, ML и др.) содержат .so библиотеки;
  • собственный нативный код через FFI или C/C++ тоже требует пересборки.

Даже если у вас проект написан на чистом Dart, устаревший плагин может вызвать падение на устройствах с Android 15 (16 KB).

Поэтому вероятность несовместимости у Flutter-приложений очень высокая.


🛠 Как исправить проблему совместимости во Flutter
#

1. Обновите инструменты
#

  • Flutter SDK → последняя стабильная (3.x)
  • NDK → r28+
  • Gradle → 8.14.3+
  • AGP → 8.6+ (лучше 8.9.1)
  • Target SDK → 36
flutter upgrade
flutter pub upgrade

2. Обновите зависимости
#

  • Проверьте все плагины в pubspec.yaml.
  • Обновите плагины с нативными .so (firebase, camera, ads, analytics, ML).

3. Пересоберите проект
#

Обновлённые Flutter SDK, AGP и NDK автоматически пересоберут нативные библиотеки с 16 KB alignment.


4. Тестирование
#

  • Эмулятор Android 15 (Device Manager → Kernel page size = 16 KB).

  • Физическое устройство (Pixel) → включить “Use 16 KB memory pages” в Developer Options.

  • Проверка:

    adb shell getconf PAGE_SIZE
    

    16384 → устройство работает в 16 KB режиме.


5. Проверьте 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 16KB совместимо"
else
  echo "❌ $f только 4KB совместимо"
fi
done
' sh {} +
  • ✅ Хорошо: 0x4000 (16 KB aligned)
  • ❌ Плохо: 0x1000 (4 KB aligned) → обновите зависимость и пересоберите.

✅ Чек-лист для Flutter-разработчиков
#

  • Flutter обновлён (последний stable release)
  • NDK r28+
  • Gradle 8.14.3+
  • AGP 8.6+
  • Target SDK 36
  • Зависимости обновлены
  • Протестировано на 16 KB эмуляторе/устройстве
  • Проверено через скрипт с readelf
  • AAB загружен в Play Console без предупреждений

4. Итоги
#

  • Android 15 меняет стандарт страниц памяти: с 4 KB → 16 KB.
  • Это ускоряет запуск приложений, камеры и систему, снижает энергопотребление.
  • Минус — фрагментация, но она компенсируется меньшими таблицами страниц.
  • Flutter-разработчики обязаны обновить SDK, NDK, AGP и все плагины.
  • Проверка AAB и тесты на 16 KB — ключ к успешной публикации в Play Console.

FAQ
#

Что будет, если не обновить приложение под 16 KB страницы в Android 15?

  • Приложение может упасть при запуске на новых устройствах, а с 1 ноября 2025 года Google Play Console отклонит публикацию.

Коснутся ли изменения приложений без нативного кода?

  • Если в проекте только Dart/Kotlin/Java и нет .so библиотек, приложение совместимо автоматически.

Как проверить совместимость Flutter-приложения?

  • Создайте эмулятор Android 15 с Kernel page size = 16 KB. Если приложение запускается, значит совместимо.

Что означает предупреждение Play Console “The App isn’t 16KB compatible”?

  • Это сигнал, что внутри AAB есть 64-битные .so библиотеки, собранные под 4 KB. Нужно пересобрать их с NDK r28+ и AGP 8.6+.

Связанные статьи

Поиск данных в файле - Cli хелпер для мастера с помощью Rust
1812 слов·9 минут· loading · loading
Rust Dev
Ввод данных от пользователя в Rust: как использовать stdin
344 слов·2 минут· loading · loading
Rust Dev
Arc в Rust: потокобезопасное разделённое владение
574 слов·3 минут· loading · loading
Rust Dev