从历史上看,Android 仅支持 4 KB 内存页面大小,这优化了系统内存性能,以适应 Android 设备通常拥有的平均总内存量。从 Android 15 开始,AOSP 支持配置为使用 16 KB 页面大小的设备(16 KB 设备)。如果您的应用直接或通过 SDK 间接使用任何 NDK 库,则需要重新构建应用,才能在这些 16 KB 设备上运行。
随着设备制造商不断制造出具有更大物理内存 (RAM) 的设备,许多此类设备将采用 16 KB(最终甚至更大)的页面大小来优化设备性能。添加对 16 KB 页面大小设备的支持,可让您的应用在这些设备上运行,并帮助您的应用受益于相关的性能改进。如果不重新编译,应用将无法在未来 Android 版本的 16 KB 设备上运行。
为帮助您为应用添加支持,我们提供了相关指南,介绍了如何检查应用是否受到影响、如何重新构建应用(如果适用),以及如何使用模拟器(包括 Android 模拟器的 Android 15 系统映像)在 16 KB 环境中测试应用。
Преимущества и повышение производительности
配置为使用 16 KB 页面大小的设备平均会使用略多一些的内存,但系统和应用的性能也会得到各种提升:
- 缩短了系统内存压力时的应用启动时间:平均降低了 3.16%;对于我们测试的某些应用而言,改进幅度更大(最高可达 30%)
- 应用启动期间的功耗降低:平均降低了 4.56%
- 相机启动更快:热启动速度平均提高了 4.48%,冷启动速度平均提高了 6.60%
- 缩短了系统启动时间:平均缩短了 8%(约 950 毫秒)
这些改进基于我们的初始测试,实际设备上的结果可能会有所不同。随着测试的继续进行,我们将进一步分析应用的潜在收益。
Проверьте, затронуто ли ваше приложение
Если ваше приложение использует нативный код , вам следует пересобрать его с поддержкой устройств с памятью 16 КБ . Если вы не уверены, использует ли ваше приложение нативный код, вы можете использовать APK Analyzer для его определения, а затем проверить выравнивание сегментов ELF для любых обнаруженных общих библиотек . Android Studio также предоставляет функции, помогающие автоматически обнаруживать проблемы выравнивания .
Если ваше приложение использует только код, написанный на языке программирования Java или Kotlin, включая все библиотеки и SDK, то оно уже поддерживает устройства с 16 КБ. Тем не менее, мы рекомендуем протестировать приложение в среде с 16 КБ, чтобы убедиться в отсутствии непредвиденных регрессий в его поведении.
Использует ли ваше приложение нативный код?
Ваше приложение использует собственный код, если выполняется хотя бы одно из следующих условий:
- Ваше приложение использует любой код C/C++ (нативный). Если ваше приложение использует Android NDK , то оно использует нативный код.
- Ваше приложение связывается со сторонними собственными библиотеками или зависимостями (например, SDK), которые их используют.
- Ваше приложение создано с помощью стороннего конструктора приложений, который использует собственные библиотеки устройства.
Определите нативные библиотеки с помощью APK Analyzer
APK Analyzer — это инструмент, позволяющий оценить различные аспекты собранного APK-файла. Чтобы проверить, использует ли ваше приложение нативный код (независимо от того, совместимо ли оно с 16 КБ):
- Откройте Android Studio , затем нажмите Файл > Открыть и выберите любой проект.
В строке меню выберите «Сборка» > «Анализ APK...».
Выберите APK, который вы хотите проанализировать.
Проверьте папку
lib
, в которой размещены файлы общих объектов (.so
), на наличие таковых. Если такие файлы присутствуют, ваше приложение использует машинный код. В столбце «Выравнивание» отображаются предупреждения для всех файлов с проблемами выравнивания. Если файлы общих объектов отсутствуют или папкаlib
отсутствует, ваше приложение не использует машинный код.
Выявляйте проблемы выравнивания с помощью автоматизированных проверок
Android Studio заблаговременно предупреждает, если ваши готовые библиотеки или APK-файлы не соответствуют требованиям 16 КБ. Используйте инструмент APK Analyzer , чтобы узнать, какие библиотеки необходимо обновить или требуется ли внести изменения в код.

Lint в Android Studio также выделяет нативные библиотеки, которые не выровнены по размеру 16 КБ.

Проверьте выравнивание сегментов ELF для общих библиотек.
Для всех общих библиотек убедитесь, что сегменты ELF в общих библиотеках правильно выровнены с использованием выравнивания ELF по 16 КБ. Если вы разрабатываете в Linux или macOS, вы можете использовать скрипт check_elf_alignment.sh
как описано в следующем разделе. Вы также можете напрямую использовать инструменты командной строки .
Используйте скрипт check_elf_alignment.sh (Linux или macOS)
Чтобы проверить выравнивание сегментов ELF с помощью скрипта check_elf_alignment.sh
, выполните следующие действия:
Сохраните скрипт
check_elf_alignment.sh
в файл.Запустите скрипт в APK-файле вашего приложения:
check_elf_alignment.sh APK_NAME.apk
Скрипт выводит либо
ALIGNED
, либоUNALIGNED
для всех общих библиотекarm64-v8a
.Если какие-либо общие библиотеки
arm64-v8a
илиx86_64
UNALIGNED
, вам потребуется обновить упаковку для этих библиотек , а затем перекомпилировать приложение и повторно протестировать его, выполнив действия, описанные в этом разделе.
Используйте инструменты командной строки напрямую
Выполните следующие действия, чтобы проверить выравнивание сегментов ELF напрямую с помощью инструментов командной строки:
- Убедитесь, что установлены Android SDK Build-Tools версии 35.0.0 или выше и Android NDK с помощью SDK Manager в Android Studio или инструмента командной строки
sdkmanager
. Извлеките APK-файл вашего приложения:
Linux или macOS
unzip APK_NAME.apk -d /tmp/my_apk_out
Windows (PowerShell)
Expand-Archive -Path .\APK_NAME.apk -DestinationPath ~\tmp\my_apk_out
Во временном каталоге, куда вы распаковали APK-файл, проверьте содержимое каталога
lib
на наличие файлов общих объектов (.so
). Это те же файлы общих объектов, которые вы могли увидеть при идентификации нативных библиотек с помощью APK Analyzer . Выполните следующую команду для каждого файла общих объектов:Linux или macOS
SDK_ROOT_LOCATION/Android/sdk/ndk/NDK_VERSION/toolchains/llvm/prebuilt/darwin-x86_64/bin/llvm-objdump -p SHARED_OBJECT_FILE.so | grep LOAD
Windows (PowerShell)
SDK_ROOT_LOCATION\Android\sdk\ndk\NDK_VERSION\toolchains\llvm\prebuilt\windows-x86_64\bin\llvm-objdump.exe -p SHARED_OBJECT_FILE.so | Select-String -Pattern "LOAD"
Где
SDK_ROOT_LOCATION
— это путь к каталогу, в который установлен Android SDK,SHARED_OBJECT_FILE
— это имя проверяемого файла общего объекта, аNDK_VERSION
— это версия установленного Android NDK (например,28.0.12433566
). Вывод будет выглядеть примерно так для каждого проверяемого файла:LOAD off 0x0000000000000000 vaddr 0x0000000000000000 paddr 0x0000000000000000 align 2**14 LOAD off 0x0000000000042a90 vaddr 0x0000000000043a90 paddr 0x0000000000043a90 align 2**14 LOAD off 0x0000000000046230 vaddr 0x0000000000048230 paddr 0x0000000000048230 align 2**14
Проверьте выходные строки, чтобы убедиться, что значения сегментов нагрузки не меньше
2**14
. Если какие-либо сегменты нагрузки имеют значения2**13
,2**12
или меньше, вам необходимо обновить упаковку для этих библиотек , а затем перекомпилировать приложение и повторно протестировать его, следуя инструкциям в этом разделе.Затем запустите инструмент командной строки
zipalign
для APK-файла вашего приложения:Linux или macOS
SDK_ROOT_LOCATION/Android/sdk/build-tools/35.0.0/zipalign -v -c -P 16 4 APK_NAME.apk
Windows (PowerShell)
SDK_ROOT_LOCATION\Android\sdk\build-tools\35.0.0\zipalign.exe -v -c -P 16 4 APK_NAME.apk
Где
SDK_ROOT_LOCATION
— это путь к каталогу, в который установлен Android SDK, аAPK_NAME
— имя APK-файла вашего приложения. В последней строке вывода будет указано «Verification successful» (Проверка прошла успешно), если все общие библиотеки настроены правильно.Если проверка не удалась, необходимо перенастроить некоторые общие библиотеки, поэтому вам потребуется обновить упаковку для этих библиотек , а затем перекомпилировать приложение и повторно протестировать его, выполнив действия, описанные в этом разделе.
Создайте свое приложение с поддержкой устройств с экраном 16 КБ
Если ваше приложение использует собственный код, выполните действия, описанные в следующих разделах, чтобы убедиться, что ваше приложение поддерживает устройства с памятью 16 КБ:
- Обновите упаковку ваших общих библиотек
- Скомпилируйте свое приложение, используя выравнивание ELF размером 16 КБ.
- Исправление кода и устранение проблем во время выполнения
- Проверьте SDK на поддержку 16 КБ.
Обновите упаковку ваших общих библиотек
Мы рекомендуем вам обновить AGP до версии 8.5.1 или выше и использовать несжатые общие библиотеки.
AGP версии 8.5.1 или выше
Устройства с объёмом памяти 16 КБ требуют, чтобы приложения, поставляемые с несжатыми общими библиотеками, выравнивались по границе 16 КБ, выровненной с помощью zip-архива. Для этого необходимо обновить плагин Android Gradle Plugin (AGP) до версии 8.5.1 или выше. Подробную информацию о процессе обновления см. в разделе «Помощник по обновлению плагина Android Gradle» .
AGP версии 8.5 или ниже
Если вы не можете обновить AGP до версии 8.5.1 или выше, то альтернативой является переход на использование сжатых общих библиотек. Обновите конфигурацию Gradle, чтобы Gradle сжимал общие библиотеки при упаковке приложения, что позволит избежать проблем с установкой приложения из-за невыровненных общих библиотек.
Круто
В файле build.gradle
добавьте следующую опцию:
android {
...
packagingOptions {
jniLibs {
useLegacyPackaging true
}
}
}
Котлин
В файле build.gradle.kts
добавьте следующую опцию:
android {
...
packagingOptions {
jniLibs {
useLegacyPackaging = true
}
}
}
Скомпилируйте свое приложение, используя выравнивание ELF размером 16 КБ.
Для работы вашего приложения на устройствах объемом 16 КБ необходимо, чтобы сегменты ELF общих библиотек были правильно выровнены с использованием выравнивания ELF размером 16 КБ.
Для разработчиков игр: если ваша игра работает на игровом движке Unity , обратитесь к руководству по Unity . Если ваша игра работает на игровом движке Unreal , обратитесь к руководству по Unreal . Для игровых движков, работающих на нативных платформах, продолжайте читать это руководство.
Чтобы скомпилировать приложение с использованием выравнивания ELF размером 16 КБ, выполните действия, описанные в одном из следующих разделов, в зависимости от используемой вами версии Android NDK.
Android NDK r28 и выше
NDK версии r28 и выше по умолчанию компилируется с выравниванием по 16 КБ.
Android NDK r27
Для поддержки компиляции общих библиотек, выровненных по 16 КБ, с Android NDK версии r27 и выше вам необходимо обновить флаги ndk-build
, build.gradle
, build.gradle.kts
или компоновщика следующим образом:
ndk-build
В вашем Application.mk
:
APP_SUPPORT_FLEXIBLE_PAGE_SIZES := true
Круто
В файле build.gradle
задайте аргумент -DANDROID_SUPPORT_FLEXIBLE_PAGE_SIZES=ON
:
android {
...
defaultConfig {
...
// This block is different from the one you use to link Gradle
// to your CMake or ndk-build script.
externalNativeBuild {
// For ndk-build, instead use the ndkBuild block.
cmake {
// Passes optional arguments to CMake.
arguments "-DANDROID_SUPPORT_FLEXIBLE_PAGE_SIZES=ON"
}
}
}
}
Котлин
В файле build.gradle.kts
задайте аргумент -DANDROID_SUPPORT_FLEXIBLE_PAGE_SIZES=ON
:
android {
...
defaultConfig {
...
// This block is different from the one you use to link Gradle
// to your CMake or ndk-build script.
externalNativeBuild {
// For ndk-build, instead use the ndkBuild block.
cmake {
// Passes optional arguments to CMake.
arguments += listOf("-DANDROID_SUPPORT_FLEXIBLE_PAGE_SIZES=ON")
}
}
}
}
Другие системы сборки
Укажите следующие флаги компоновщика:
-Wl,-z,max-page-size=16384
Android NDK r26 и ниже
Для поддержки компиляции общих библиотек размером 16 КБ с Android NDK версии r26 или ниже необходимо обновить конфигурацию ndk-build
или cmake
следующим образом:
ndk-build
Обновите Android.mk
, чтобы включить выравнивание ELF размером 16 КБ:
LOCAL_LDFLAGS += "-Wl,-z,max-page-size=16384"
CMake
Обновите CMakeLists.txt
, чтобы включить выравнивание ELF размером 16 КБ:
target_link_options(${CMAKE_PROJECT_NAME} PRIVATE "-Wl,-z,max-page-size=16384")
Android NDK r22 и ниже
В дополнение к шагу, описанному для NDK r26 и ниже, необходимо установить common-page-size=16384
если вы используете NDK r22 или ниже. Установка common-page-size=16384
необходима из-за ошибок в более ранних версиях компоновщиков GNU ld и LLVM lld . Однако мы настоятельно рекомендуем обновить инструментарий до более новой версии, чтобы полностью избежать этих ошибок.
Чтобы скомпилировать 16-КБ совместимые общие библиотеки с Android NDK версии r22 или ниже, обновите конфигурацию ndk-build
или cmake
следующим образом:
ndk-build
Обновите Android.mk
для сборки 16 КБ-совместимого ELF:
LOCAL_LDFLAGS += "-Wl,-z,max-page-size=16384"
LOCAL_LDFLAGS += "-Wl,-z,common-page-size=16384"
CMake
Обновите CMakeLists.txt
для создания совместимого ELF размером 16 КБ:
target_link_options(${CMAKE_PROJECT_NAME} PRIVATE "-Wl,-z,max-page-size=16384")
target_link_options(${CMAKE_PROJECT_NAME} PRIVATE "-Wl,-z,common-page-size=16384")
Исправление кода и устранение проблем во время выполнения
Даже если ваше приложение выровнено по размеру страницы в 16 КБ, в нём могут возникать ошибки, если в коде предполагается, что устройство использует определённый размер страницы. Чтобы избежать этого, выполните следующие действия:
Удалите все жестко запрограммированные зависимости, ссылающиеся на константу
PAGE_SIZE
, или экземпляры в логике кода, которые предполагают, что размер страницы устройства составляет 4 КБ (4096
).Вместо этого используйте
getpagesize()
илиsysconf(_SC_PAGESIZE)
.Найдите случаи использования
mmap()
и других API, требующих выровненных по странице аргументов, и замените их альтернативными вариантами при необходимости.
В некоторых случаях, если ваше приложение использует PAGE_SIZE
как удобное значение, не привязанное к размеру базовой страницы, это не приведёт к сбоям в работе приложения при использовании в режиме 16 КБ. Однако, если это значение передается ядру с помощью mmap
без MAP_FIXED
, ядро всё равно использует всю страницу целиком, что приводит к неэффективному использованию памяти. По этим причинам PAGE_SIZE
не определено при включении режима 16 КБ в NDK r27 и выше.
Если ваше приложение использует PAGE_SIZE
таким образом и никогда напрямую не передает это значение ядру, то вместо использования PAGE_SIZE
создайте новую переменную с новым именем, чтобы отразить, что она используется для других целей и не отражает реальную страницу памяти.
Проверьте SDK на поддержку 16 КБ.
Многие SDK совместимы с размером страницы 16 КБ, особенно если вы создаёте их самостоятельно или используете последние готовые версии. Однако, поскольку некоторые готовые версии SDK или версии SDK несовместимы с 16 КБ, вам следует проверить веб-сайт каждого поставщика SDK, чтобы определить, какую версию использовать с 16 КБ.
Протестируйте свое приложение в среде размером 16 КБ
После создания приложения с поддержкой устройств с 16 КБ вам необходимо протестировать его в среде с 16 КБ, чтобы выявить возможные регрессии. Для этого выполните следующие действия:
Настройте одну из следующих сред тестирования:
Запустите тестовое устройство, затем выполните следующую команду, чтобы убедиться, что оно использует среду размером 16 КБ:
adb shell getconf PAGE_SIZE
Команда должна вернуть значение
16384
.Выполните следующую команду
zipalign
, чтобы убедиться, что ваше приложение выровнено по размеру 16 КБ, где APK_NAME — имя APK-файла вашего приложения:zipalign -c -P 16 -v 4 APK_NAME.apk
Тщательно протестируйте свое приложение, обращая особое внимание на области, на которые может повлиять изменение экземпляров кода, ссылающихся на определенные размеры страниц .
Настройте эмулятор Android с помощью образа системы Android 15 размером 16 КБ.
Чтобы настроить среду размером 16 КБ с помощью эмулятора Android, выполните следующие действия:
Образы системы эмулятора Android 15 с памятью 16 КБ совместимы с Android Studio Jellyfish | 2023.3.1 и выше. Однако для оптимальной работы с устройствами с памятью 16 КБ используйте Android Studio Ladybug | 2024.2.1 и выше.
Мы постоянно работаем над новыми функциями, поэтому рассмотрите возможность загрузки новых версий или последней предварительной версии Android Studio по мере их появления.
Помните, что вы можете оставить установленной существующую версию Android Studio, так как вы можете установить несколько версий одновременно .
В Android Studio выберите Инструменты > Менеджер SDK .
На вкладке «Платформы SDK» установите флажок «Показать сведения о пакете» , затем разверните раздел «Android VanillaIceCream или более поздняя версия» и выберите один или оба из следующих образов системы эмулятора в зависимости от виртуальных устройств, которые вы хотите создать:
- Экспериментальный размер страницы API Google 16 КБ, системный образ ARM 64 v8a
- Экспериментальный размер страницы API Google 16 КБ, образ системы Intel x86_64 Atom
Нажмите «Применить» > «ОК» , чтобы загрузить выбранные вами образы системы.
Следуйте инструкциям по настройке виртуального устройства для Android 15. Когда система предложит выбрать образ системы, выберите загруженный образ размером 16 КБ. Если он не рекомендован автоматически, вы можете найти образ размером 16 КБ на вкладке «Другие образы» .
Дополнительные шаги для некоторых версий эмулятора и образов системы
Для Android Emulator версий 35.1.5–35.1.20 и до версии 4 системных образов Android 15.0 с размером страницы 16 КБ, предлагаемых в SDK Manager, для имитации среды размером 16 КБ в системах x86_64 необходимо также выполнить следующие действия. Эти действия не требуются после версии 35.1.21 и для системных образов Android 15.0 с размером страницы 16 КБ, начиная с версии 4.
- В диспетчере устройств нажмите на три точки рядом с изображением размером 16 КБ, затем нажмите Показать на диске .
- В этой папке найдите файл
config.ini
. Добавьте следующую строку в файл
config.ini
и сохраните изменения:kernel.parameters = androidboot.page_shift=14
Чтобы проверить изменения, выполните следующую команду, которая должна вернуть
16384
:adb shell getconf PAGE_SIZE
Запустить эмулятор
После завершения настройки эмулятора Android и виртуальных устройств запустите эмулятор из меню целевого устройства или из командной строки .
Включите режим 16 КБ на устройстве с помощью параметров разработчика

Включите опцию разработчика «Загрузка с размером страницы 16 КБ», чтобы загрузить устройство в режиме 16 КБ.
Начиная с Android 15 QPR1, вы можете использовать функцию разработчика , доступную на некоторых устройствах, для загрузки устройства в режиме 16 КБ и проведения тестирования на устройстве. Перед использованием функции разработчика перейдите в раздел «Настройки» > «Система» > «Обновления ПО» и установите все доступные обновления.
Эта опция разработчика доступна на следующих устройствах:
Pixel 8 и 8 Pro (с Android 15 QPR1 или выше)
Pixel 8a (с Android 15 QPR1 или выше)
Pixel 9, 9 Pro и 9 Pro XL (с Android 15 QPR2 Beta 2 или выше)
Требование совместимости с Google Play
Поскольку производители устройств оснащают их большим объёмом оперативной памяти для оптимизации производительности, многие из них перейдут на более крупные размеры страниц, например, 16 КБ. В рамках подготовки к запуску этих будущих устройств Google Play вводит новое требование совместимости: с 1 ноября 2025 года все новые приложения и обновления существующих приложений, отправляемые в Google Play и предназначенные для устройств под управлением Android 15 (уровень API 35) и выше, должны поддерживать размеры страниц 16 КБ.
Более подробную информацию об этом требовании совместимости можно найти в этой записи блога .