Поддержка размеров страниц 16 КБ.

Требование совместимости с Google Play: 16 КБ
Начиная с 1 ноября 2025 года все новые приложения и обновления существующих приложений, отправляемые в Google Play и предназначенные для устройств Android 15+, должны поддерживать размер страницы 16 КБ.

Исторически сложилось так, что Android поддерживал только размеры страниц памяти 4 КБ, что оптимизировало производительность системной памяти для среднего объема общей памяти, который обычно имеется в устройствах Android. Начиная с Android 15, AOSP поддерживает устройства, настроенные на использование страницы размером 16 КБ (устройства 16 КБ). Если ваше приложение использует какие-либо библиотеки NDK , прямо или косвенно через SDK, вам потребуется пересобрать приложение, чтобы оно работало на этих устройствах с размером памяти 16 КБ.

Поскольку производители устройств продолжают создавать устройства с большим объемом физической памяти (ОЗУ), многие из этих устройств будут использовать размеры страниц 16 КБ (и, в конечном итоге, больше) для оптимизации производительности устройства. Добавление поддержки устройств с размером страницы 16 КБ позволяет вашему приложению работать на этих устройствах и помогает вашему приложению извлечь выгоду из связанных с этим улучшений производительности. Без перекомпиляции приложения могут не работать на устройствах с размером памяти 16 КБ, когда они будут выпущены в будущих выпусках Android.

Чтобы помочь вам добавить поддержку вашего приложения, мы предоставили рекомендации о том, как проверить, не затронуто ли ваше приложение , как пересобрать приложение (если применимо) и как протестировать приложение в среде размером 16 КБ с помощью эмуляторов (включая Android). 15 системных образов для эмулятора Android).

Преимущества и повышение производительности

Устройства, настроенные с размером страницы 16 КБ, в среднем используют немного больше памяти, но также получают различные улучшения производительности как для системы, так и для приложений:

  • Сокращение времени запуска приложений, когда система испытывает нехватку памяти: в среднем на 3,16 % меньше, с более значительными улучшениями (до 30 %) для некоторых протестированных нами приложений.
  • Снижение энергопотребления при запуске приложения: в среднем снижение на 4,56 %.
  • Более быстрый запуск камеры: в среднем на 4,48 % более быстрый горячий запуск и в среднем на 6,60 % более быстрый холодный запуск.
  • Улучшено время загрузки системы: в среднем улучшено на 8% (приблизительно 950 миллисекунд).

Эти улучшения основаны на нашем первоначальном тестировании, и результаты на реальных устройствах, вероятно, будут отличаться. По мере продолжения тестирования мы предоставим дополнительный анализ потенциальных преимуществ для приложений.

Проверьте, затронуто ли ваше приложение

Если ваше приложение использует какой-либо собственный код , вам следует перестроить его с поддержкой устройств размером 16 КБ . Если вы не уверены, использует ли ваше приложение собственный код, вы можете использовать анализатор APK, чтобы определить, присутствует ли какой-либо собственный код , а затем проверить выравнивание сегментов ELF для всех найденных общих библиотек .

Если ваше приложение использует только код, написанный на языке программирования Java или Kotlin, включая все библиотеки и SDK, то ваше приложение уже поддерживает устройства размером 16 КБ. Тем не менее, мы рекомендуем протестировать ваше приложение в среде размером 16 КБ, чтобы убедиться в отсутствии неожиданных изменений в поведении приложения.

Использует ли ваше приложение собственный код?

Ваше приложение использует собственный код, если применимо любое из следующих условий:

  • Ваше приложение использует любой код C/C++ (нативный). Если ваше приложение использует Android NDK , то ваше приложение использует нативный код.
  • Ваше приложение связывается со сторонними собственными библиотеками или зависимостями (например, SDK), которые их используют.
  • Ваше приложение создано с помощью стороннего конструктора приложений, который использует собственные библиотеки устройства.

Определите собственные библиотеки с помощью APK Analyzer

APK Analyzer — это инструмент, который позволяет вам оценивать различные аспекты построенного APK. Чтобы проверить, использует ли ваше приложение собственный код (независимо от того, совместимо ли оно с 16 КБ):

  1. Откройте Android Studio , затем нажмите Файл > Открыть и выберите любой проект.
  2. В строке меню нажмите «Сборка» > «Анализ APK...».

    Пункт меню Studio Build для запуска APK Анализатора

  3. Выберите APK, который вы хотите проанализировать.

  4. Посмотрите в папке lib , где размещены файлы общих объектов ( .so ), если таковые имеются. Если присутствуют какие-либо файлы общих объектов, ваше приложение использует собственный код. Если нет файлов общих объектов или нет папки lib , ваше приложение не использует собственный код.

    Вид APK Analyzer, показывающий, что файлы общих объектов присутствуют

Проверьте выравнивание сегментов ELF для общих библиотек

Для любых общих библиотек проверьте, что сегменты ELF общих библиотек правильно выровнены с использованием выравнивания ELF 16 КБ. Если вы разрабатываете на Linux или macOS, вы можете использовать скрипт check_elf_alignment.sh как описано в следующем разделе. Вы также можете использовать инструменты командной строки напрямую .

Используйте скрипт check_elf_alignment.sh (Linux или macOS)

Чтобы проверить выравнивание сегментов ELF с помощью скрипта check_elf_alignment.sh , выполните следующие действия:

  1. Сохраните скрипт check_elf_alignment.sh в файл.

  2. Запустите скрипт в APK-файле вашего приложения:

    check_elf_alignment.sh APK_NAME.apk
    

    Скрипт выводит либо ALIGNED , либо UNALIGNED для всех общих библиотек arm64-v8a .

  3. Если какие-либо общие библиотеки arm64-v8a или x86_64 UNALIGNED , вам необходимо обновить упаковку для этих библиотек , а затем перекомпилировать приложение и повторно протестировать его, выполнив действия, описанные в этом разделе.

Используйте инструменты командной строки напрямую

Чтобы проверить выравнивание сегментов ELF напрямую с помощью инструментов командной строки, выполните следующие действия:

  1. Убедитесь, что установлены Android SDK Build-Tools версии 35.0.0 или выше и Android NDK с помощью SDK Manager в Android Studio или инструмента командной строки sdkmanager .
  2. Извлеките 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
    
  3. Во временном каталоге, в который вы извлекли свой 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
    
  4. Проверьте выходные строки, чтобы убедиться, что сегменты нагрузки не имеют значений меньше 2**14 . Если какие-либо сегменты нагрузки имеют значения 2**13 , 2**12 или ниже, вам необходимо обновить упаковку для этих библиотек , а затем перекомпилировать приложение и повторно протестировать его, выполнив действия, описанные в этом разделе.

  5. Затем запустите инструмент командной строки 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 КБ:

  1. Обновите упаковку ваших общих библиотек
  2. Скомпилируйте свое приложение, используя выравнивание ELF размером 16 КБ
  3. Исправление кода и устранение проблем во время выполнения
  4. Проверьте 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-сборка

В вашем 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-сборка

Обновите 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")

Исправление кода и устранение проблем во время выполнения

Даже если ваше приложение выровнено по 16 КБ, оно может столкнуться с ошибками, если места в вашем коде предполагают, что устройство использует определенный размер страницы. Чтобы избежать этого, выполните следующие действия:

  1. Удалите все жестко заданные зависимости, ссылающиеся на константу PAGE_SIZE , или экземпляры в логике кода, которые предполагают, что размер страницы устройства составляет 4 КБ ( 4096 ).

    Вместо этого используйте getpagesize() или sysconf(_SC_PAGESIZE) .

  2. Найдите случаи использования 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 КБ, чтобы увидеть, не возникнет ли у вашего приложения регрессий. Для этого выполните следующие действия:

  1. Настройте Android 15 SDK .

  2. Настройте одну из следующих сред тестирования:

  3. Запустите тестовое устройство, затем выполните следующую команду, чтобы убедиться, что оно использует среду размером 16 КБ:

    adb shell getconf PAGE_SIZE
    

    Команда должна вернуть значение 16384 .

  4. Выполните следующую команду zipalign , чтобы убедиться, что ваше приложение выровнено по размеру 16 КБ, где APK_NAME — это имя APK-файла вашего приложения:

    zipalign -c -P 16 -v 4 APK_NAME.apk
    
  5. Тщательно протестируйте свое приложение, уделяя особое внимание областям, на которые может повлиять изменение экземпляров кода, ссылающихся на определенные размеры страниц .

Настройте эмулятор Android с помощью образа системы Android 15 размером 16 КБ.

Чтобы настроить среду размером 16 КБ с помощью эмулятора Android, выполните следующие действия:

  1. Системные образы эмулятора Android 15 на базе 16 КБ совместимы с Android Studio Jellyfish | 2023.3.1 или выше. Однако для наилучшего опыта работы с устройствами на 16 КБ используйте Android Studio Ladybug | 2024.2.1 или выше.

    Мы постоянно работаем над новыми функциями, поэтому рассмотрите возможность загрузки новых версий или последней предварительной версии Android Studio по мере их появления.

    Помните, что вы можете оставить установленной существующую версию Android Studio, так как вы можете установить несколько версий одновременно .

  2. В Android Studio нажмите Инструменты > Менеджер SDK .

  3. На вкладке «Платформы SDK» установите флажок «Показать сведения о пакете» , затем разверните раздел «Android VanillaIceCream или более поздняя версия» и выберите один или оба следующих образа системы эмулятора в зависимости от виртуальных устройств, которые вы хотите создать:

    • API Google Экспериментальный размер страницы 16 КБ ARM 64 v8a Системный образ
    • API Google Экспериментальный размер страницы 16 КБ Intel x86_64 Atom System Image

    Загрузите 16 КБ образы системы эмулятора с помощью SDK Manager в Android Studio

  4. Нажмите «Применить» > «ОК» , чтобы загрузить выбранные вами образы системы.

  5. Следуйте инструкциям по настройке виртуального устройства для Android 15 , и когда будет предложено выбрать образ системы, выберите загруженный вами образ системы размером 16 КБ. Если он не рекомендуется автоматически, вы можете найти образ системы размером 16 КБ на вкладке Другие образы .

    Найдите образ эмулятора размером 16 КБ на вкладке «Другие образы».

Дополнительные шаги для некоторых версий эмулятора и образов системы

Для Android Emulator версий 35.1.5 по 35.1.20 и до ревизии 4 системных образов Android 15.0 16 КБ Page Size, предлагаемых в SDK Manager, для имитации среды 16 КБ в системах x86_64 вам также необходимо выполнить следующие шаги. Эти шаги не требуются после версии 35.1.21 и с ревизией 4 системных образов Android 15.0 16 КБ Page Size или более поздней.

  1. В диспетчере устройств нажмите на три точки рядом с изображением размером 16 КБ, затем нажмите Показать на диске .
  2. В этой папке найдите файл config.ini .
  3. Добавьте следующую строку в файл config.ini и сохраните изменения:

    kernel.parameters = androidboot.page_shift=14
    
  4. Чтобы проверить изменения, выполните следующую команду, которая должна вернуть 16384 :

    adb shell getconf PAGE_SIZE
    

Запустить эмулятор

После завершения настройки эмулятора Android и виртуальных устройств запустите эмулятор из меню целевого устройства или из командной строки .

Включите режим 16 КБ на устройстве, используя параметры разработчика.

Включите параметр разработчика «Загрузка с размером страницы 16 КБ», чтобы загрузить устройство в режиме 16 КБ.

Начиная с Android 15 QPR1, вы можете использовать опцию разработчика , доступную на некоторых устройствах, для загрузки устройства в режиме 16 КБ и выполнения тестирования на устройстве. Прежде чем использовать опцию разработчика, перейдите в «Настройки» -> «Система» -> «Обновления программного обеспечения» и примените все доступные обновления.

Этот вариант разработчика доступен на следующих устройствах:

  • Pixel 8 и 8 Pro (с Android 15 QPR1 или более поздней версии)

    Предупреждение . Из-за известной проблемы с Android 15 QPR2 Beta 3 сенсорный экран не работает на устройствах Pixel 8 после установки Android 15 QPR2 Beta 3 и загрузки устройства в режиме 16 КБ. Эта проблема не затрагивает устройства Pixel 8 Pro.

  • Pixel 8a (с Android 15 QPR1 или более поздней версии)

    Предупреждение . Из-за известной проблемы с Android 15 QPR2 Beta 3 сенсорный экран не работает на устройствах Pixel 8a после установки Android 15 QPR2 Beta 3 и загрузки устройства в режиме 16 КБ.

  • Pixel 9, 9 Pro и 9 Pro XL (с Android 15 QPR2 Beta 2 или более поздней версии)

Требования к совместимости с Google Play

Поскольку производители устройств оснащают устройства большим объемом оперативной памяти для оптимизации производительности, многие из них будут использовать большие размеры страниц, например 16 КБ. Чтобы подготовить запуск этих будущих устройств, Google Play вводит требование совместимости для всех новых приложений и обновлений существующих приложений, а также нацеливает устройства Android 15+ на поддержку размеров страниц 16 КБ с 1 ноября 2025 года.

Чтобы узнать больше об этом требовании совместимости, прочтите эту запись в блоге .

,
Требование совместимости с Google Play: 16 КБ
Начиная с 1 ноября 2025 года все новые приложения и обновления существующих приложений, отправляемые в Google Play и предназначенные для устройств Android 15+, должны поддерживать размер страницы 16 КБ.

Исторически сложилось так, что Android поддерживал только размеры страниц памяти 4 КБ, что оптимизировало производительность системной памяти для среднего объема общей памяти, который обычно имеется в устройствах Android. Начиная с Android 15, AOSP поддерживает устройства, настроенные на использование страницы размером 16 КБ (устройства 16 КБ). Если ваше приложение использует какие-либо библиотеки NDK , прямо или косвенно через SDK, вам потребуется пересобрать приложение, чтобы оно работало на этих устройствах с размером памяти 16 КБ.

Поскольку производители устройств продолжают создавать устройства с большим объемом физической памяти (ОЗУ), многие из этих устройств будут использовать размеры страниц 16 КБ (и, в конечном итоге, больше) для оптимизации производительности устройства. Добавление поддержки устройств с размером страницы 16 КБ позволяет вашему приложению работать на этих устройствах и помогает вашему приложению извлечь выгоду из связанных с этим улучшений производительности. Без перекомпиляции приложения могут не работать на устройствах с размером памяти 16 КБ, когда они будут выпущены в будущих выпусках Android.

Чтобы помочь вам добавить поддержку вашего приложения, мы предоставили рекомендации о том, как проверить, не затронуто ли ваше приложение , как пересобрать приложение (если применимо) и как протестировать приложение в среде размером 16 КБ с помощью эмуляторов (включая Android). 15 системных образов для эмулятора Android).

Преимущества и повышение производительности

Устройства, настроенные с размером страницы 16 КБ, в среднем используют немного больше памяти, но также получают различные улучшения производительности как для системы, так и для приложений:

  • Сокращение времени запуска приложений, когда система испытывает нехватку памяти: в среднем на 3,16 % меньше, с более значительными улучшениями (до 30 %) для некоторых протестированных нами приложений.
  • Снижение энергопотребления при запуске приложения: в среднем снижение на 4,56 %.
  • Более быстрый запуск камеры: в среднем на 4,48 % более быстрый горячий запуск и в среднем на 6,60 % более быстрый холодный запуск.
  • Улучшено время загрузки системы: в среднем улучшено на 8% (приблизительно 950 миллисекунд).

Эти улучшения основаны на нашем первоначальном тестировании, и результаты на реальных устройствах, вероятно, будут отличаться. По мере продолжения тестирования мы предоставим дополнительный анализ потенциальных преимуществ для приложений.

Проверьте, затронуто ли ваше приложение

Если ваше приложение использует какой-либо собственный код , вам следует перестроить его с поддержкой устройств размером 16 КБ . Если вы не уверены, использует ли ваше приложение собственный код, вы можете использовать анализатор APK, чтобы определить, присутствует ли какой-либо собственный код , а затем проверить выравнивание сегментов ELF для всех найденных общих библиотек .

Если ваше приложение использует только код, написанный на языке программирования Java или Kotlin, включая все библиотеки и SDK, то ваше приложение уже поддерживает устройства размером 16 КБ. Тем не менее, мы рекомендуем протестировать ваше приложение в среде размером 16 КБ, чтобы убедиться в отсутствии неожиданных изменений в поведении приложения.

Использует ли ваше приложение собственный код?

Ваше приложение использует собственный код, если применимо любое из следующих условий:

  • Ваше приложение использует любой код C/C++ (нативный). Если ваше приложение использует Android NDK , то ваше приложение использует нативный код.
  • Ваше приложение связывается со сторонними собственными библиотеками или зависимостями (например, SDK), которые их используют.
  • Ваше приложение создано с помощью стороннего конструктора приложений, который использует собственные библиотеки устройства.

Определите собственные библиотеки с помощью APK Analyzer

APK Analyzer — это инструмент, который позволяет вам оценивать различные аспекты построенного APK. Чтобы проверить, использует ли ваше приложение собственный код (независимо от того, совместимо ли оно с 16 КБ):

  1. Откройте Android Studio , затем нажмите Файл > Открыть и выберите любой проект.
  2. В строке меню нажмите «Сборка» > «Анализ APK...».

    Пункт меню Studio Build для запуска APK Анализатора

  3. Выберите APK, который вы хотите проанализировать.

  4. Посмотрите в папке lib , где размещены файлы общих объектов ( .so ), если таковые имеются. Если присутствуют какие-либо файлы общих объектов, ваше приложение использует собственный код. Если нет файлов общих объектов или нет папки lib , ваше приложение не использует собственный код.

    Вид APK Analyzer, показывающий, что файлы общих объектов присутствуют

Проверьте выравнивание сегментов ELF для общих библиотек

Для любых общих библиотек проверьте, что сегменты ELF общих библиотек правильно выровнены с использованием выравнивания ELF 16 КБ. Если вы разрабатываете на Linux или macOS, вы можете использовать скрипт check_elf_alignment.sh как описано в следующем разделе. Вы также можете использовать инструменты командной строки напрямую .

Используйте скрипт check_elf_alignment.sh (Linux или macOS)

Чтобы проверить выравнивание сегментов ELF с помощью скрипта check_elf_alignment.sh , выполните следующие действия:

  1. Сохраните скрипт check_elf_alignment.sh в файл.

  2. Запустите скрипт в APK-файле вашего приложения:

    check_elf_alignment.sh APK_NAME.apk
    

    Скрипт выводит либо ALIGNED , либо UNALIGNED для всех общих библиотек arm64-v8a .

  3. Если какие-либо общие библиотеки arm64-v8a или x86_64 UNALIGNED , вам необходимо обновить упаковку для этих библиотек , а затем перекомпилировать приложение и повторно протестировать его, выполнив действия, описанные в этом разделе.

Используйте инструменты командной строки напрямую

Чтобы проверить выравнивание сегментов ELF напрямую с помощью инструментов командной строки, выполните следующие действия:

  1. Убедитесь, что установлены Android SDK Build-Tools версии 35.0.0 или выше и Android NDK с помощью SDK Manager в Android Studio или инструмента командной строки sdkmanager .
  2. Извлеките 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
    
  3. Во временном каталоге, в который вы извлекли свой 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
    
  4. Проверьте выходные строки, чтобы убедиться, что сегменты нагрузки не имеют значений меньше 2**14 . Если какие-либо сегменты нагрузки имеют значения 2**13 , 2**12 или ниже, вам необходимо обновить упаковку для этих библиотек , а затем перекомпилировать приложение и повторно протестировать его, выполнив действия, описанные в этом разделе.

  5. Затем запустите инструмент командной строки 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 КБ:

  1. Обновите упаковку ваших общих библиотек
  2. Скомпилируйте свое приложение, используя выравнивание ELF размером 16 КБ
  3. Исправление кода и устранение проблем во время выполнения
  4. Проверьте 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-сборка

В вашем 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-сборка

Обновите 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")

Исправление кода и устранение проблем во время выполнения

Даже если ваше приложение выровнено по 16 КБ, оно может столкнуться с ошибками, если места в вашем коде предполагают, что устройство использует определенный размер страницы. Чтобы избежать этого, выполните следующие действия:

  1. Удалите все жестко заданные зависимости, ссылающиеся на константу PAGE_SIZE , или экземпляры в логике кода, которые предполагают, что размер страницы устройства составляет 4 КБ ( 4096 ).

    Вместо этого используйте getpagesize() или sysconf(_SC_PAGESIZE) .

  2. Найдите случаи использования 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 КБ, чтобы увидеть, не возникнет ли у вашего приложения регрессий. Для этого выполните следующие действия:

  1. Настройте Android 15 SDK .

  2. Настройте одну из следующих сред тестирования:

  3. Запустите тестовое устройство, затем выполните следующую команду, чтобы убедиться, что оно использует среду размером 16 КБ:

    adb shell getconf PAGE_SIZE
    

    Команда должна вернуть значение 16384 .

  4. Выполните следующую команду zipalign , чтобы убедиться, что ваше приложение выровнено по размеру 16 КБ, где APK_NAME — это имя APK-файла вашего приложения:

    zipalign -c -P 16 -v 4 APK_NAME.apk
    
  5. Тщательно протестируйте свое приложение, уделяя особое внимание областям, на которые может повлиять изменение экземпляров кода, ссылающихся на определенные размеры страниц .

Настройте эмулятор Android с помощью образа системы Android 15 размером 16 КБ.

Чтобы настроить среду размером 16 КБ с помощью эмулятора Android, выполните следующие действия:

  1. Системные образы эмулятора Android 15 на базе 16 КБ совместимы с Android Studio Jellyfish | 2023.3.1 или выше. Однако для наилучшего опыта работы с устройствами на 16 КБ используйте Android Studio Ladybug | 2024.2.1 или выше.

    Мы постоянно работаем над новыми функциями, поэтому рассмотрите возможность загрузки новых версий или последней предварительной версии Android Studio по мере их появления.

    Помните, что вы можете оставить установленной существующую версию Android Studio, так как вы можете установить несколько версий одновременно .

  2. В Android Studio нажмите Инструменты > Менеджер SDK .

  3. На вкладке «Платформы SDK» установите флажок «Показать сведения о пакете» , затем разверните раздел «Android VanillaIceCream или более поздняя версия» и выберите один или оба следующих образа системы эмулятора в зависимости от виртуальных устройств, которые вы хотите создать:

    • API Google Экспериментальный размер страницы 16 КБ ARM 64 v8a Системный образ
    • API Google Экспериментальный размер страницы 16 КБ Intel x86_64 Atom System Image

    Загрузите 16 КБ образы системы эмулятора с помощью SDK Manager в Android Studio

  4. Нажмите «Применить» > «ОК» , чтобы загрузить выбранные вами образы системы.

  5. Следуйте инструкциям по настройке виртуального устройства для Android 15 , и когда будет предложено выбрать образ системы, выберите загруженный вами образ системы размером 16 КБ. Если он не рекомендуется автоматически, вы можете найти образ системы размером 16 КБ на вкладке Другие образы .

    Найдите образ эмулятора размером 16 КБ на вкладке «Другие образы».

Дополнительные шаги для некоторых версий эмулятора и образов системы

Для Android Emulator версий 35.1.5 по 35.1.20 и до ревизии 4 системных образов Android 15.0 16 КБ Page Size, предлагаемых в SDK Manager, для имитации среды 16 КБ в системах x86_64 вам также необходимо выполнить следующие шаги. Эти шаги не требуются после версии 35.1.21 и с ревизией 4 системных образов Android 15.0 16 КБ Page Size или более поздней.

  1. В диспетчере устройств нажмите на три точки рядом с изображением размером 16 КБ, затем нажмите Показать на диске .
  2. В этой папке найдите файл config.ini .
  3. Добавьте следующую строку в файл config.ini и сохраните изменения:

    kernel.parameters = androidboot.page_shift=14
    
  4. Чтобы проверить изменения, выполните следующую команду, которая должна вернуть 16384 :

    adb shell getconf PAGE_SIZE
    

Запустить эмулятор

После завершения настройки эмулятора Android и виртуальных устройств запустите эмулятор из меню целевого устройства или из командной строки .

Включите режим 16 КБ на устройстве, используя параметры разработчика.

Включите параметр разработчика «Загрузка с размером страницы 16 КБ», чтобы загрузить устройство в режиме 16 КБ.

Начиная с Android 15 QPR1, вы можете использовать опцию разработчика , доступную на некоторых устройствах, для загрузки устройства в режиме 16 КБ и выполнения тестирования на устройстве. Прежде чем использовать опцию разработчика, перейдите в «Настройки» -> «Система» -> «Обновления программного обеспечения» и примените все доступные обновления.

Этот вариант разработчика доступен на следующих устройствах:

  • Pixel 8 и 8 Pro (с Android 15 QPR1 или более поздней версии)

    Предупреждение . Из-за известной проблемы с Android 15 QPR2 Beta 3 сенсорный экран не работает на устройствах Pixel 8 после установки Android 15 QPR2 Beta 3 и загрузки устройства в режиме 16 КБ. Эта проблема не затрагивает устройства Pixel 8 Pro.

  • Pixel 8a (с Android 15 QPR1 или более поздней версии)

    Предупреждение . Из-за известной проблемы с Android 15 QPR2 Beta 3 сенсорный экран не работает на устройствах Pixel 8a после установки Android 15 QPR2 Beta 3 и загрузки устройства в режиме 16 КБ.

  • Pixel 9, 9 Pro и 9 Pro XL (с Android 15 QPR2 Beta 2 или более поздней версии)

Требования к совместимости с Google Play

Поскольку производители устройств оснащают устройства большим объемом оперативной памяти для оптимизации производительности, многие из них будут использовать большие размеры страниц, например 16 КБ. Чтобы подготовить запуск этих будущих устройств, Google Play вводит требование совместимости для всех новых приложений и обновлений существующих приложений, а также нацеливает устройства Android 15+ на поддержку размеров страниц 16 КБ с 1 ноября 2025 года.

Чтобы узнать больше об этом требовании совместимости, прочтите эту запись в блоге .

,
Требование совместимости с Google Play: 16 КБ
Начиная с 1 ноября 2025 года все новые приложения и обновления существующих приложений, отправляемые в Google Play и предназначенные для устройств Android 15+, должны поддерживать размер страницы 16 КБ.

Исторически сложилось так, что Android поддерживал только размеры страниц памяти 4 КБ, что оптимизировало производительность системной памяти для среднего объема общей памяти, который обычно имеется в устройствах Android. Начиная с Android 15, AOSP поддерживает устройства, настроенные на использование страницы размером 16 КБ (устройства 16 КБ). Если ваше приложение использует какие-либо библиотеки NDK , прямо или косвенно через SDK, вам потребуется пересобрать приложение, чтобы оно работало на этих устройствах с размером памяти 16 КБ.

Поскольку производители устройств продолжают создавать устройства с большим объемом физической памяти (ОЗУ), многие из этих устройств будут использовать размеры страниц 16 КБ (и, в конечном итоге, больше) для оптимизации производительности устройства. Добавление поддержки устройств с размером страницы 16 КБ позволяет вашему приложению работать на этих устройствах и помогает вашему приложению извлечь выгоду из связанных с этим улучшений производительности. Без перекомпиляции приложения могут не работать на устройствах с размером памяти 16 КБ, когда они будут выпущены в будущих выпусках Android.

Чтобы помочь вам добавить поддержку вашего приложения, мы предоставили рекомендации о том, как проверить, не затронуто ли ваше приложение , как пересобрать приложение (если применимо) и как протестировать приложение в среде размером 16 КБ с помощью эмуляторов (включая Android). 15 системных образов для эмулятора Android).

Преимущества и повышение производительности

Устройства, настроенные с размером страницы 16 КБ, в среднем используют немного больше памяти, но также получают различные улучшения производительности как для системы, так и для приложений:

  • Сокращение времени запуска приложений, когда система испытывает нехватку памяти: в среднем на 3,16 % меньше, с более значительными улучшениями (до 30 %) для некоторых протестированных нами приложений.
  • Снижение энергопотребления при запуске приложения: в среднем снижение на 4,56 %.
  • Более быстрый запуск камеры: в среднем на 4,48 % более быстрый горячий запуск и в среднем на 6,60 % более быстрый холодный запуск.
  • Улучшено время загрузки системы: в среднем улучшено на 8% (приблизительно 950 миллисекунд).

Эти улучшения основаны на нашем первоначальном тестировании, и результаты на реальных устройствах, вероятно, будут отличаться. По мере продолжения тестирования мы предоставим дополнительный анализ потенциальных преимуществ для приложений.

Проверьте, затронуто ли ваше приложение

Если ваше приложение использует какой-либо собственный код , вам следует перестроить его с поддержкой устройств размером 16 КБ . Если вы не уверены, использует ли ваше приложение собственный код, вы можете использовать анализатор APK, чтобы определить, присутствует ли какой-либо собственный код , а затем проверить выравнивание сегментов ELF для всех найденных общих библиотек .

Если ваше приложение использует только код, написанный на языке программирования Java или Kotlin, включая все библиотеки и SDK, то ваше приложение уже поддерживает устройства размером 16 КБ. Тем не менее, мы рекомендуем протестировать ваше приложение в среде размером 16 КБ, чтобы убедиться в отсутствии неожиданных изменений в поведении приложения.

Использует ли ваше приложение собственный код?

Ваше приложение использует собственный код, если применимо любое из следующих условий:

  • Ваше приложение использует любой код C/C++ (нативный). Если ваше приложение использует Android NDK , то ваше приложение использует нативный код.
  • Ваше приложение связывается со сторонними собственными библиотеками или зависимостями (например, SDK), которые их используют.
  • Ваше приложение создано с помощью стороннего конструктора приложений, который использует собственные библиотеки устройства.

Определите собственные библиотеки с помощью APK Analyzer

Apk Analyzer - это инструмент, который позволяет оценивать различные аспекты встроенного APK. Чтобы проверить, использует ли ваше приложение собственный код (независимо от того, совместимо с 16 кб):

  1. Откройте Android Studio , затем нажмите «Файл»> «Открыть» и выберите любой проект.
  2. В панели меню нажмите «Построить»> Анализировать APK ...

    Опция меню сборки студии для запуска APK Анализатор

  3. Выберите APK, который вы хотите проанализировать.

  4. Посмотрите в папке lib , которая проводит файлы общего объекта ( .so ), если таковые имеются. Если присутствуют какие -либо общие объектные файлы, ваше приложение использует собственный код. Если нет общих объектных файлов или нет папки lib , то ваше приложение не использует натуральный код.

    Анализатор APK показывает, что общие объектные файлы настоящий

Проверьте выравнивание сегментов ELF для общих библиотек

Для любых общих библиотек убедитесь, что сегменты эльфов общих библиотек правильно выровнены с использованием выравнивания ELF 16 КБ. Если вы разрабатываете на Linux или MacOS, вы можете использовать скрипт check_elf_alignment.sh как описано в следующем разделе. Вы также можете напрямую использовать инструменты командной строки .

Используйте скрипт check_elf_alenment.sh (Linux или MacOS)

Следуйте этим шагам, чтобы проверить выравнивание сегментов ELF с помощью скрипта check_elf_alignment.sh :

  1. Сохраните скрипт check_elf_alignment.sh в файл.

  2. Запустите сценарий в файле APK вашего приложения:

    check_elf_alignment.sh APK_NAME.apk
    

    Скрипт выводит либо ALIGNED , либо UNALIGNED для всех общих библиотек arm64-v8a .

  3. Если какие-либо общие библиотеки arm64-v8a или x86_64 UNALIGNED , вам нужно обновить упаковку для этих библиотек , а затем перекомпилировать ваше приложение и повторно, выполнив шаги в этом разделе.

Используйте инструменты командной строки напрямую

Следуйте этим шагам, чтобы проверить выравнивание сегментов ELF, используя инструменты командной строки напрямую:

  1. Убедитесь, что оба Android SDK Build-Tools версии 35.0.0 или выше, а Android NDK установлены с использованием SDK Manager в Android Studio или инструменте командной строки sdkmanager .
  2. Извлеките файл 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
    
  3. Во временном каталоге, в который вы извлекли свой файл APK, проверьте содержимое файлов lib Directory для файлов общего объекта ( .so ). Это те же самые общие объектные файлы, которые вы бы увидели при выявлении собственных библиотек с использованием APK -анализатора . Запустите следующую команду в каждом файле общего объекта:

    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
    
  4. Проверьте выходные линии, чтобы убедиться, что сегменты нагрузки не имеют значений менее 2**14 Если какие -либо сегменты нагрузки составляют 2**13 , 2**12 или более низкие значения, вам необходимо обновить упаковку для этих библиотек , а затем перекомпилировать ваше приложение и повторно, выполнив шаги в этом разделе.

  5. Затем запустите инструмент командной строки 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 вашего приложения. Последняя строка вывода будет сказать «успешная проверка», если все общие библиотеки выровнены правильно.

    Если проверка не удалась, некоторые общие библиотеки должны быть перераспределены, поэтому вам нужно обновить упаковку для этих библиотек , а затем перекомпилировать ваше приложение и повторно, выполнив шаги в этом разделе.

Создайте свое приложение с поддержкой устройств 16 КБ

Если ваше приложение использует собственный код, выполните шаги, которые изложены в следующих разделах, чтобы убедиться, что ваше приложение поддерживает 16 КБ.

  1. Обновите упаковку ваших общих библиотек
  2. Скомпилируйте ваше приложение, используя выравнивание ELF 16 КБ
  3. Исправить код и решить проблемы времени выполнения
  4. Проверьте SDK для поддержки 16 КБ

Обновите упаковку ваших общих библиотек

Мы рекомендуем вам перейти на AGP версию 8.5.1 или выше и использовать несжатые общие библиотеки.

AGP версия 8.5.1 или выше

Устройства 16 КБ требуют, чтобы приложения, которые поставляются с несжатыми общими библиотеками, чтобы выровнять их на границе с выравниваемой на молнии 16 КБ. Для этого необходимо перейти на версию 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 16 КБ, чтобы ваше приложение могло работать.

Для разработчиков игр, если ваша игра работает на вершине игрового двигателя Unity , обратитесь к руководству Unity . Если ваша игра работает на вершине нереального игрового двигателя , обратитесь к нереальному гид . Для нативных игровых двигателей продолжайте с этим руководством.

Чтобы скомпилировать ваше приложение, используя выравнивание 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")

Исправить код и решить проблемы времени выполнения

Даже если ваше приложение составляет 16 КБ, ваше приложение может столкнуться с ошибками, если места в вашем коде предполагают, что устройство использует определенный размер страницы. Чтобы избежать этого, выполните следующие шаги:

  1. Удалите любые жесткие зависимости, которые ссылаются на постоянные или экземпляры PAGE_SIZE Constant или экземпляры в вашей логике кода, которые предполагают, что размер страницы устройства составляет 4 КБ ( 4096 ).

    Вместо этого используйте getpagesize() или sysconf(_SC_PAGESIZE) .

  2. Ищите использование 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 КБ, чтобы увидеть, испытывает ли ваше приложение какие -либо регрессии. Для этого следуйте этим шагам:

  1. Установите Android 15 SDK .

  2. Настройте одну из следующих средств тестирования:

  3. Запустите ваше испытательное устройство, затем запустите следующую команду, чтобы убедиться, что оно использует среду 16 кб:

    adb shell getconf PAGE_SIZE
    

    Команда должна вернуть значение 16384 .

  4. Запустите следующую команду zipalign , чтобы убедиться, что ваше приложение состоит из 16 КБ, где APK_NAME -это имя файла APK вашего приложения:

    zipalign -c -P 16 -v 4 APK_NAME.apk
    
  5. Тщательно протестируйте свое приложение, сосредоточившись на любых областях, которые могут повлиять на изменение экземпляров кода, которые ссылаются на конкретные размеры страниц .

Установите эмулятор Android с помощью системы Android 15 на основе 16 КБ, Android 15

Чтобы настроить среду 16 кб с использованием эмулятора Android, выполните следующие действия:

  1. Изображения эмуляторов Android 15 на основе 16 т.п. 2023.3.1 или выше. Тем не менее, для лучшего опыта при работе с 16 КБ устройства, используйте Android Studio Ladybug | 2024.2.1 или выше.

    Мы всегда работаем над новыми функциями, поэтому подумайте о загрузке новых версий или последней предварительной версии Android Studio по мере их появления.

    Помните, что вы можете сохранить свою существующую версию Android Studio, так как вы можете установить несколько версий бок о бок .

  2. В Android Studio нажмите «Инструменты»> «SDK Manager» .

  3. На вкладке платформ SDK проверьте данные о том, чтобы показать сведения о пакете , затем разверните раздел Android vanillaiceCream или более высокий раздел и выберите одно или оба из следующих изображений системы эмуляторов, в зависимости от виртуальных устройств, которые вы хотите создать:

    • Google APIS Experimental 16 КБ размер страницы ARM 64 V8A Системное изображение
    • Google APIS Experimental 16 КБ размер страницы Intel x86_64 Изображение системы атома

    Скачать Images System Emulation 16 КБ с помощью SDK Manager в Android     Студия

  4. Нажмите Применить> ОК , чтобы загрузить любые системы системы, которые вы выбрали.

  5. Следуйте шагам, чтобы настроить виртуальное устройство для Android 15 , и, когда будет предложено выбрать системное изображение, выберите загруженное изображение системы 16 КБ. Если он не рекомендуется автоматически, вы можете найти системное изображение 16 кб на другой вкладке «Другие изображения» .

    Найдите изображение эмулятора 16 КБ на других изображениях вкладка

Дополнительные шаги для некоторых версий эмулятора и системных изображений

Для версий эмулятора Android с 35,1,5 по 35,1,20, а перед ревизией 4 изображений Android 15.0 16 КБ. Эти шаги не нужны после версии 35.1.21, а также с ревизией 4 изображений системы Android 15.0 16 КБ.

  1. В диспетчере устройств нажмите 3 точки рядом с изображением 16 КБ, затем нажмите « Показать на диске» .
  2. В этой папке найдите файл config.ini .
  3. Добавьте следующую строку в файл config.ini и сохраните ваши изменения:

    kernel.parameters = androidboot.page_shift=14
    
  4. Чтобы проверить свои изменения, запустите следующую команду, которая должна вернуть 16384 :

    adb shell getconf PAGE_SIZE
    

Запустить эмулятор

После завершения настройки эмулятора Android и виртуальных устройств запустите эмулятор из меню Target Device или из командной строки .

Включите режим 16 КБ на устройстве, используя параметры разработчика.

Включите параметр разработчика «Загрузка с размером страницы 16 КБ», чтобы загрузить устройство в режиме 16 КБ.

Начиная с Android 15 QPR1, вы можете использовать опцию разработчика , доступную на некоторых устройствах, для загрузки устройства в режиме 16 КБ и выполнения тестирования на устройстве. Прежде чем использовать опцию разработчика, перейдите в «Настройки» -> «Система» -> «Обновления программного обеспечения» и примените все доступные обновления.

Этот вариант разработчика доступен на следующих устройствах:

  • Pixel 8 и 8 Pro (с Android 15 QPR1 или более поздней версии)

    Предупреждение . Из-за известной проблемы с Android 15 QPR2 Beta 3 сенсорный экран не работает на устройствах Pixel 8 после установки Android 15 QPR2 Beta 3 и загрузки устройства в режиме 16 КБ. Эта проблема не затрагивает устройства Pixel 8 Pro.

  • Pixel 8a (с Android 15 QPR1 или более поздней версии)

    Предупреждение . Из-за известной проблемы с Android 15 QPR2 Beta 3 сенсорный экран не работает на устройствах Pixel 8a после установки Android 15 QPR2 Beta 3 и загрузки устройства в режиме 16 КБ.

  • Pixel 9, 9 Pro и 9 Pro XL (с Android 15 QPR2 Beta 2 или более поздней версии)

Требование совместимости Google Play

Поскольку производители устройств снабжают устройства большим количеством оперативной памяти для оптимизации производительности, многие примут большие размеры страниц, такие как 16 КБ. Чтобы подготовить запуск этих будущих устройств, Google Play представляет собой требование совместимости для всех новых приложений и обновлений для существующих приложений и нацеливания на устройства Android 15+ для поддержки размеров 16 КБ, начиная с 1 ноября 2025 года.

Чтобы узнать больше об этом требовании совместимости, см. В этом блоге .

,
16 КБ.
Начиная с 1 ноября 2025 года, все новые приложения и обновления для существующих приложений, представленных в Google Play и нацеливание на устройства Android 15+, должны поддерживать размеры 16 КБ.

Исторически сложилось так, что Android поддерживал только размеры страниц памяти 4 КБ, что оптимизировало производительность системной памяти для среднего объема общей памяти, который обычно имеется в устройствах Android. Начиная с Android 15, AOSP поддерживает устройства, настроенные на использование страницы размером 16 КБ (устройства 16 КБ). Если ваше приложение использует какие-либо библиотеки NDK , прямо или косвенно через SDK, вам потребуется пересобрать приложение, чтобы оно работало на этих устройствах с размером памяти 16 КБ.

Поскольку производители устройств продолжают создавать устройства с большим объемом физической памяти (ОЗУ), многие из этих устройств будут использовать размеры страниц 16 КБ (и, в конечном итоге, больше) для оптимизации производительности устройства. Добавление поддержки устройств с размером страницы 16 КБ позволяет вашему приложению работать на этих устройствах и помогает вашему приложению извлечь выгоду из связанных с этим улучшений производительности. Без перекомпиляции приложения могут не работать на устройствах с размером памяти 16 КБ, когда они будут выпущены в будущих выпусках Android.

Чтобы помочь вам добавить поддержку вашего приложения, мы предоставили рекомендации о том, как проверить, не затронуто ли ваше приложение , как пересобрать приложение (если применимо) и как протестировать приложение в среде размером 16 КБ с помощью эмуляторов (включая Android). 15 системных образов для эмулятора Android).

Преимущества и прирост производительности

Устройства, настроенные с размером страницы 16 КБ, в среднем используют немного больше памяти, но также получают различные улучшения производительности как для системы, так и для приложений:

  • Сокращение времени запуска приложений, когда система испытывает нехватку памяти: в среднем на 3,16 % меньше, с более значительными улучшениями (до 30 %) для некоторых протестированных нами приложений.
  • Снижение энергопотребления при запуске приложения: в среднем снижение на 4,56 %.
  • Более быстрый запуск камеры: в среднем на 4,48 % более быстрый горячий запуск и в среднем на 6,60 % более быстрый холодный запуск.
  • Улучшено время загрузки системы: в среднем улучшено на 8% (приблизительно 950 миллисекунд).

Эти улучшения основаны на нашем первоначальном тестировании, и результаты на реальных устройствах, вероятно, будут отличаться. По мере продолжения тестирования мы предоставим дополнительный анализ потенциальных преимуществ для приложений.

Проверьте, повлияло ли ваше приложение

Если ваше приложение использует какой-либо собственный код , вам следует перестроить его с поддержкой устройств размером 16 КБ . Если вы не уверены, использует ли ваше приложение собственный код, вы можете использовать анализатор APK, чтобы определить, присутствует ли какой-либо собственный код , а затем проверить выравнивание сегментов ELF для всех найденных общих библиотек .

Если ваше приложение использует только код, написанный на языке программирования Java или Kotlin, включая все библиотеки и SDK, то ваше приложение уже поддерживает устройства размером 16 КБ. Тем не менее, мы рекомендуем протестировать ваше приложение в среде размером 16 КБ, чтобы убедиться в отсутствии неожиданных изменений в поведении приложения.

Ваше приложение использует собственный код?

Ваше приложение использует собственный код, если какое -либо из следующего применимо:

  • Ваше приложение использует любой код C/C ++ (натив). Если ваше приложение использует Android NDK , то в вашем приложении используется собственный код.
  • Ваше приложение связывается с любыми сторонними нативными библиотеками или зависимостями (например, SDK), которые их используют.
  • Ваше приложение создано сторонним приложением, который использует собственные библиотеки на устройстве.

Определите нативные библиотеки, используя APK -анализатор

Apk Analyzer - это инструмент, который позволяет оценивать различные аспекты встроенного APK. Чтобы проверить, использует ли ваше приложение собственный код (независимо от того, совместимо с 16 кб):

  1. Откройте Android Studio , затем нажмите «Файл»> «Открыть» и выберите любой проект.
  2. В панели меню нажмите «Построить»> Анализировать APK ...

    Опция меню сборки студии для запуска APK Анализатор

  3. Выберите APK, который вы хотите проанализировать.

  4. Посмотрите в папке lib , которая проводит файлы общего объекта ( .so ), если таковые имеются. Если присутствуют какие -либо общие объектные файлы, ваше приложение использует собственный код. Если нет общих объектных файлов или нет папки lib , то ваше приложение не использует натуральный код.

    Анализатор APK показывает, что общие объектные файлы настоящий

Проверьте выравнивание сегментов ELF для общих библиотек

Для любых общих библиотек убедитесь, что сегменты эльфов общих библиотек правильно выровнены с использованием выравнивания ELF 16 КБ. Если вы разрабатываете на Linux или MacOS, вы можете использовать скрипт check_elf_alignment.sh как описано в следующем разделе. Вы также можете напрямую использовать инструменты командной строки .

Используйте скрипт check_elf_alenment.sh (Linux или MacOS)

Следуйте этим шагам, чтобы проверить выравнивание сегментов ELF с помощью скрипта check_elf_alignment.sh :

  1. Сохраните скрипт check_elf_alignment.sh в файл.

  2. Запустите сценарий в файле APK вашего приложения:

    check_elf_alignment.sh APK_NAME.apk
    

    Скрипт выводит либо ALIGNED , либо UNALIGNED для всех общих библиотек arm64-v8a .

  3. Если какие-либо общие библиотеки arm64-v8a или x86_64 UNALIGNED , вам нужно обновить упаковку для этих библиотек , а затем перекомпилировать ваше приложение и повторно, выполнив шаги в этом разделе.

Используйте инструменты командной строки напрямую

Следуйте этим шагам, чтобы проверить выравнивание сегментов ELF, используя инструменты командной строки напрямую:

  1. Убедитесь, что оба Android SDK Build-Tools версии 35.0.0 или выше, а Android NDK установлены с использованием SDK Manager в Android Studio или инструменте командной строки sdkmanager .
  2. Извлеките файл 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
    
  3. Во временном каталоге, в который вы извлекли свой файл APK, проверьте содержимое файлов lib Directory для файлов общего объекта ( .so ). Это те же самые общие объектные файлы, которые вы бы увидели при выявлении собственных библиотек с использованием APK -анализатора . Запустите следующую команду в каждом файле общего объекта:

    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
    
  4. Проверьте выходные линии, чтобы убедиться, что сегменты нагрузки не имеют значений менее 2**14 Если какие -либо сегменты нагрузки составляют 2**13 , 2**12 или более низкие значения, вам необходимо обновить упаковку для этих библиотек , а затем перекомпилировать ваше приложение и повторно, выполнив шаги в этом разделе.

  5. Затем запустите инструмент командной строки 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 вашего приложения. Последняя строка вывода будет сказать «успешная проверка», если все общие библиотеки выровнены правильно.

    Если проверка не удалась, некоторые общие библиотеки должны быть перераспределены, поэтому вам нужно обновить упаковку для этих библиотек , а затем перекомпилировать ваше приложение и повторно, выполнив шаги в этом разделе.

Создайте свое приложение с поддержкой устройств 16 КБ

Если ваше приложение использует собственный код, выполните шаги, которые изложены в следующих разделах, чтобы убедиться, что ваше приложение поддерживает 16 КБ.

  1. Обновите упаковку ваших общих библиотек
  2. Скомпилируйте ваше приложение, используя выравнивание ELF 16 КБ
  3. Исправить код и решить проблемы времени выполнения
  4. Проверьте SDK для поддержки 16 КБ

Обновите упаковку ваших общих библиотек

Мы рекомендуем вам перейти на AGP версию 8.5.1 или выше и использовать несжатые общие библиотеки.

AGP версия 8.5.1 или выше

Устройства 16 КБ требуют, чтобы приложения, которые поставляются с несжатыми общими библиотеками, чтобы выровнять их на границе с выравниваемой на молнии 16 КБ. Для этого необходимо перейти на версию 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 16 КБ, чтобы ваше приложение могло работать.

Для разработчиков игр, если ваша игра работает на вершине игрового двигателя Unity , обратитесь к руководству Unity . Если ваша игра работает на вершине нереального игрового двигателя , обратитесь к нереальному гид . Для нативных игровых двигателей продолжайте с этим руководством.

Чтобы скомпилировать ваше приложение, используя выравнивание 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")

Исправить код и решить проблемы времени выполнения

Даже если ваше приложение составляет 16 КБ, ваше приложение может столкнуться с ошибками, если места в вашем коде предполагают, что устройство использует определенный размер страницы. Чтобы избежать этого, выполните следующие шаги:

  1. Удалите любые жесткие зависимости, которые ссылаются на постоянные или экземпляры PAGE_SIZE Constant или экземпляры в вашей логике кода, которые предполагают, что размер страницы устройства составляет 4 КБ ( 4096 ).

    Вместо этого используйте getpagesize() или sysconf(_SC_PAGESIZE) .

  2. Ищите использование 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 КБ, чтобы увидеть, испытывает ли ваше приложение какие -либо регрессии. Для этого следуйте этим шагам:

  1. Установите Android 15 SDK .

  2. Настройте одну из следующих средств тестирования:

  3. Запустите ваше испытательное устройство, затем запустите следующую команду, чтобы убедиться, что оно использует среду 16 кб:

    adb shell getconf PAGE_SIZE
    

    Команда должна вернуть значение 16384 .

  4. Запустите следующую команду zipalign , чтобы убедиться, что ваше приложение состоит из 16 КБ, где APK_NAME -это имя файла APK вашего приложения:

    zipalign -c -P 16 -v 4 APK_NAME.apk
    
  5. Тщательно протестируйте свое приложение, сосредоточившись на любых областях, которые могут повлиять на изменение экземпляров кода, которые ссылаются на конкретные размеры страниц .

Установите эмулятор Android с помощью системы Android 15 на основе 16 КБ, Android 15

Чтобы настроить среду 16 кб с использованием эмулятора Android, выполните следующие действия:

  1. Изображения эмуляторов Android 15 на основе 16 т.п. 2023.3.1 или выше. Тем не менее, для лучшего опыта при работе с 16 КБ устройства, используйте Android Studio Ladybug | 2024.2.1 или выше.

    Мы всегда работаем над новыми функциями, поэтому подумайте о загрузке новых версий или последней предварительной версии Android Studio по мере их появления.

    Помните, что вы можете сохранить свою существующую версию Android Studio, так как вы можете установить несколько версий бок о бок .

  2. В Android Studio нажмите «Инструменты»> «SDK Manager» .

  3. На вкладке платформ SDK проверьте данные о том, чтобы показать сведения о пакете , затем разверните раздел Android vanillaiceCream или более высокий раздел и выберите одно или оба из следующих изображений системы эмуляторов, в зависимости от виртуальных устройств, которые вы хотите создать:

    • Google APIS Experimental 16 КБ размер страницы ARM 64 V8A Системное изображение
    • Google APIS Experimental 16 КБ размер страницы Intel x86_64 Изображение системы атома

    Скачать Images System Emulation 16 КБ с помощью SDK Manager в Android     Студия

  4. Нажмите Применить> ОК , чтобы загрузить любые системы системы, которые вы выбрали.

  5. Следуйте шагам, чтобы настроить виртуальное устройство для Android 15 , и, когда будет предложено выбрать системное изображение, выберите загруженное изображение системы 16 КБ. Если он не рекомендуется автоматически, вы можете найти системное изображение 16 кб на другой вкладке «Другие изображения» .

    Найдите изображение эмулятора 16 КБ на других изображениях вкладка

Дополнительные шаги для некоторых версий эмулятора и системных изображений

Для версий эмулятора Android с 35,1,5 по 35,1,20, а перед ревизией 4 изображений Android 15.0 16 КБ. Эти шаги не нужны после версии 35.1.21, а также с ревизией 4 изображений системы Android 15.0 16 КБ.

  1. В диспетчере устройств нажмите 3 точки рядом с изображением 16 КБ, затем нажмите « Показать на диске» .
  2. В этой папке найдите файл config.ini .
  3. Добавьте следующую строку в файл config.ini и сохраните ваши изменения:

    kernel.parameters = androidboot.page_shift=14
    
  4. Чтобы проверить свои изменения, запустите следующую команду, которая должна вернуть 16384 :

    adb shell getconf PAGE_SIZE
    

Запустить эмулятор

После завершения настройки эмулятора Android и виртуальных устройств запустите эмулятор из меню Target Device или из командной строки .

Включите режим 16 КБ на устройстве, используя параметры разработчика.

Включите параметр разработчика «Загрузка с размером страницы 16 КБ», чтобы загрузить устройство в режиме 16 КБ.

Начиная с Android 15 QPR1, вы можете использовать опцию разработчика , доступную на некоторых устройствах, для загрузки устройства в режиме 16 КБ и выполнения тестирования на устройстве. Прежде чем использовать опцию разработчика, перейдите в «Настройки» -> «Система» -> «Обновления программного обеспечения» и примените все доступные обновления.

Этот вариант разработчика доступен на следующих устройствах:

  • Pixel 8 и 8 Pro (с Android 15 QPR1 или более поздней версии)

    Предупреждение . Из-за известной проблемы с Android 15 QPR2 Beta 3 сенсорный экран не работает на устройствах Pixel 8 после установки Android 15 QPR2 Beta 3 и загрузки устройства в режиме 16 КБ. Эта проблема не затрагивает устройства Pixel 8 Pro.

  • Pixel 8a (с Android 15 QPR1 или более поздней версии)

    Предупреждение . Из-за известной проблемы с Android 15 QPR2 Beta 3 сенсорный экран не работает на устройствах Pixel 8a после установки Android 15 QPR2 Beta 3 и загрузки устройства в режиме 16 КБ.

  • Pixel 9, 9 Pro и 9 Pro XL (с Android 15 QPR2 Beta 2 или более поздней версии)

Требование совместимости Google Play

Поскольку производители устройств снабжают устройства большим количеством оперативной памяти для оптимизации производительности, многие примут большие размеры страниц, такие как 16 КБ. Чтобы подготовить запуск этих будущих устройств, Google Play представляет собой требование совместимости для всех новых приложений и обновлений для существующих приложений и нацеливания на устройства Android 15+ для поддержки размеров 16 КБ, начиная с 1 ноября 2025 года.

Чтобы узнать больше об этом требовании совместимости, см. В этом блоге .