В этом документе описывается файл сборки Application.mk
, используемый ndk-build
.
Мы рекомендуем вам прочитать страницу «Концепции» перед этой страницей.
Обзор
Application.mk
определяет общепроектные настройки для ndk-build. По умолчанию он находится по адресу jni/Application.mk
в каталоге проекта вашего приложения.
Переменные
ПРИЛОЖЕНИЕ_ABI
По умолчанию система сборки NDK генерирует код для всех неустаревших ABI. Вы можете использовать параметр APP_ABI
для создания кода для определенных ABI. В таблице 1 показаны настройки APP_ABI
для разных наборов инструкций.
Таблица 1. Настройки APP_ABI
для разных наборов инструкций.
Набор инструкций | Ценить |
---|---|
32-битный ARMv7 | APP_ABI := armeabi-v7a |
64-битный ARMv8 (AArch64) | APP_ABI := arm64-v8a |
х86 | APP_ABI := x86 |
х86-64 | APP_ABI := x86_64 |
Все поддерживаемые ABI (по умолчанию) | APP_ABI := all |
Вы также можете указать несколько значений, разместив их в одной строке, разделив их пробелами. Например:
APP_ABI := armeabi-v7a arm64-v8a x86
Список всех поддерживаемых ABI, а также подробную информацию об их использовании и ограничениях см. в разделе Android ABI .
ПРИЛОЖЕНИЕ_ASFLAGS
Флаги, передаваемые ассемблеру для каждого исходного файла сборки (файлы .s
и .S
) в проекте.
ПРИЛОЖЕНИЕ_ASMFLAGS
Флаги, которые должны передаваться в YASM для всех исходных файлов YASM (только .asm
, x86/x86_64).
ПРИЛОЖЕНИЕ_BUILD_SCRIPT
По умолчанию ndk-build предполагает, что файл Android.mk расположен по адресу jni/Android.mk
относительно корня проекта.
Чтобы загрузить файл Android.mk из другого места, задайте APP_BUILD_SCRIPT
абсолютный путь к файлу Android.mk.
ПРИЛОЖЕНИЕ_CFLAGS
Флаги, которые должны передаваться для всех компиляций C/C++ в проекте.
См. также: APP_CONLYFLAGS , APP_CPPFLAGS .
ПРИЛОЖЕНИЕ_CLANG_TIDY
Установите значение true, чтобы включить clang-tidy для всех модулей проекта. По умолчанию отключено.
APP_CLANG_TIDY_FLAGS
Флаги, которые необходимо передать для всех аккуратных исполнений в проекте.
ПРИЛОЖЕНИЕ_CONLYFLAGS
Флаги, которые должны передаваться для всех компиляций C в проекте. Эти флаги не будут использоваться для кода C++.
См. также: APP_CFLAGS , APP_CPPFLAGS .
ПРИЛОЖЕНИЕ_CPPFLAGS
Флаги, которые должны передаваться для всех компиляций C++ в проекте. Эти флаги не будут использоваться для кода C.
См. также: APP_CFLAGS , APP_CONLYFLAGS .
ПРИЛОЖЕНИЕ_CXXFLAGS
Идентичен APP_CPPFLAGS
, но появится после APP_CPPFLAGS
в команде компиляции. Например:
APP_CPPFLAGS := -DFOO
APP_CXXFLAGS := -DBAR
Приведенная выше конфигурация приведет к созданию команды компиляции, похожей на clang++ -DFOO -DBAR
а не clang++ -DBAR -DFOO
.
ПРИЛОЖЕНИЕ_DEBUG
Установите значение true, чтобы создать отлаживаемое приложение.
ПРИЛОЖЕНИЕ_LDFLAGS
Флаги, которые необходимо передавать при связывании исполняемых файлов и общих библиотек.
ПРИЛОЖЕНИЕ_МАНИФЕСТ
Абсолютный путь к файлу AndroidManifest.xml.
По умолчанию будет использоваться $(APP_PROJECT_PATH)/AndroidManifest.xml)
если он существует.
ПРИЛОЖЕНИЕ_МОДУЛИ
Явный список модулей для сборки. Элементами этого списка являются имена модулей, которые появляются в LOCAL_MODULE
в файле Android.mk .
По умолчанию ndk-build собирает все общие библиотеки, исполняемые файлы и их зависимости. Статические библиотеки будут собираться только в том случае, если они используются проектом, проект содержит только статические библиотеки или если они названы в APP_MODULES
.
ПРИЛОЖЕНИЕ_OPTIM
Определите эту необязательную переменную как release
или debug
. Двоичные файлы выпуска будут собраны по умолчанию.
Режим выпуска позволяет оптимизировать и может создавать двоичные файлы, которые невозможно использовать с отладчиком. Режим отладки отключает оптимизацию, поэтому можно использовать отладчики.
Обратите внимание, что вы можете отлаживать либо выпуск, либо отладку двоичных файлов. Однако двоичные файлы релизов предоставляют меньше информации во время отладки. Например, переменные могут быть оптимизированы, что предотвратит проверку. Кроме того, изменение порядка кода может затруднить его пошаговое выполнение; трассировки стека могут быть ненадежными.
Объявление android:debuggable
в теге <application>
манифеста вашего приложения приведет к тому, что эта переменная по умолчанию будет использоваться для debug
а не для release
. Переопределите это значение по умолчанию, установив для APP_OPTIM
значение release
.
ПРИЛОЖЕНИЕ_ПЛАТФОРМА
APP_PLATFORM
объявляет уровень Android API, на котором создано это приложение, и соответствует minSdkVersion
приложения.
Если не указано, ndk-build будет нацелен на минимальный уровень API, поддерживаемый NDK. Минимальный уровень API, поддерживаемый последней версией NDK, всегда будет достаточно низким для поддержки практически всех активных устройств.
Например, значение android-16
указывает, что ваша библиотека использует API, которые недоступны ниже Android 4.1 (уровень API 16) и не могут использоваться на устройствах с более низкой версией платформы. Полный список названий платформ и соответствующих образов системы Android см. в разделе Собственные API Android NDK .
При использовании Gradle и externalNativeBuild
этот параметр не следует задавать напрямую. Вместо этого установите свойство minSdkVersion
в блоках defaultConfig
или productFlavors
вашего файла build.gradle
на уровне модуля . Это гарантирует, что ваша библиотека будет использоваться только приложениями, установленными на устройствах под управлением соответствующей версии Android.
Обратите внимание, что NDK не содержит библиотеки для каждого уровня API Android. Версии, которые не включали новые собственные API, опущены для экономии места в NDK. ndk-build использует в порядке убывания предпочтения:
- Версия платформы, соответствующая
APP_PLATFORM
. - Следующий доступный уровень API ниже
APP_PLATFORM
. Например,android-19
будет использоваться, когдаAPP_PLATFORM
имеет значениеandroid-20
, поскольку в android-20 не было новых собственных API. - Минимальный уровень API, поддерживаемый NDK.
APP_PROJECT_PATH
Абсолютный путь к корневому каталогу проекта.
ПРИЛОЖЕНИЕ_SHORT_COMMANDS
Эквивалент LOCAL_SHORT_COMMANDS
для всего проекта. Для получения дополнительной информации см. документацию для LOCAL_SHORT_COMMANDS
в Android.mk .
ПРИЛОЖЕНИЕ_STL
Стандартная библиотека C++, используемая в этом приложении.
По умолчанию используется system
STL. Другие варианты: c++_shared
, c++_static
и none
. См. раздел Среды выполнения и возможности NDK C++ .
ПРИЛОЖЕНИЕ_STRIP_MODE
Аргумент, который будет передан в strip
для модулей в этом приложении. По умолчанию — --strip-unneeded
. Чтобы избежать удаления всех двоичных файлов в модуле, установите значение none
. О других режимах полосы см. в документации полосы .
ПРИЛОЖЕНИЕ_THIN_ARCHIVE
Установите значение true, чтобы использовать тонкие архивы для всех статических библиотек в проекте. Дополнительную информацию см. в документации LOCAL_THIN_ARCHIVE
в Android.mk .
ПРИЛОЖЕНИЕ_WRAP_SH
Путь к файлу Wrap.sh , который будет включен в это приложение.
Вариант этой переменной существует для каждого ABI, как и общий вариант ABI:
-
APP_WRAP_SH
-
APP_WRAP_SH_armeabi-v7a
-
APP_WRAP_SH_arm64-v8a
-
APP_WRAP_SH_x86
-
APP_WRAP_SH_x86_64