Скрипт ndk-build

Сценарий ndk-build создает проекты, использующие систему сборки NDK на основе Make. Существует более конкретная документация по конфигурации Android.mk и Application.mk, используемой ndk-build .

Внутренности

Запуск сценария ndk-build эквивалентен выполнению следующей команды:

$GNUMAKE -f <ndk>/build/core/build-local.mk
<parameters>

$GNUMAKE указывает на GNU Make 3.81 или новее, а <ndk> указывает на каталог установки NDK. Вы можете использовать эту информацию для вызова ndk-build из других сценариев оболочки или даже из ваших собственных файлов make.

Вызов из командной строки

Сценарий ndk-build находится в каталоге установки NDK верхнего уровня. Чтобы запустить его из командной строки, вызовите его, находясь в каталоге проекта вашего приложения или под ним. Например:

$ cd <project>
$ <ndk>/ndk-build

В этом примере <project> указывает на корневой каталог вашего проекта, а <ndk> — это каталог, в котором вы установили NDK.

Параметры

Все параметры ndk-build передаются непосредственно базовой команде GNU make , которая запускает сценарии сборки NDK. Объедините ndk-build и параметры в форме ndk-build <option> . Например:

$ ndk-build clean

Доступны следующие варианты:

clean
Удалите все ранее созданные двоичные файлы.

Примечание. В Mac OS X запуск ndk-build clean с большим количеством параллельных выполнений может привести к ошибке сборки, которая включает следующее сообщение:

rm: fts_read: No such file or directory

Чтобы избежать этой проблемы, рассмотрите возможность не использовать модификатор -j N или выбрать меньшее значение для N , например 2.

V=1
Запустите сборку и отобразите команды сборки.
-B
Принудительно выполнить полную перестройку.
-BV=1
Принудительно выполнить полную перестройку и отобразить команды сборки.
NDK_LOG=1
Отображать внутренние сообщения журнала NDK (используются для отладки самого NDK).
NDK_DEBUG=1
Принудительно создайте отлаживаемую сборку (см. таблицу 1 ).
NDK_DEBUG=0
Принудительно выполните сборку выпуска (см. таблицу 1 ).
NDK_HOST_32BIT=1
Всегда используйте набор инструментов в 32-битном режиме.
NDK_APPLICATION_MK=<file>
Сборка с использованием определенного файла Application.mk , на который указывает переменная NDK_APPLICATION_MK .
-C <project>
Создайте собственный код для пути проекта, расположенного в <project> . Полезно, если вы не хотите cd к нему в терминале.

Отладочные и релизные сборки

Используйте параметр NDK_DEBUG и, в некоторых случаях, AndroidManifest.xml чтобы указать отладочную или выпускную сборку, поведение, связанное с оптимизацией, а также включение символов. В таблице 1 показаны результаты каждой возможной комбинации настроек.

Таблица 1. Результаты комбинаций NDK_DEBUG (командная строка) и android:debuggable (манифест).

Настройка манифеста NDK_DEBUG=0 NDK_DEBUG=1 NDK_DEBUG не указан
Android: отладка = "истина" Отлаживать; Символы; Оптимизированный*1 Отлаживать; Символы; Не оптимизировано*2 (то же самое, что NDK_DEBUG=1)
Android: отладка = "ложь" Выпускать; Символы; Оптимизированный Выпускать; Символы; Не оптимизировано Выпускать; Никаких символов; Оптимизированный*3
*1: Полезно для профилирования.
*2: По умолчанию для запуска ndk-gdb .
*3: Режим по умолчанию.

Примечание. `NDK_DEBUG=0` является эквивалентом `APP_OPTIM=release` и компилируется с `-O2`. `NDK_DEBUG=1` является эквивалентом `APP_OPTIM=debug` в `Application.mk` и компилируется с `-O0`. Дополнительные сведения о APP_OPTIM см. в Application.mk .

Синтаксис командной строки, например:

$ ndk-build NDK_DEBUG=1

Требования

Вам понадобится GNU Make 4, чтобы использовать ndk-build или NDK в целом. NDK включает в себя собственную копию GNU Make и будет использовать ее, если только вы не установили переменную среды $GNUMAKE , указывающую на неподходящую версию make.

Базы данных компиляции JSON

В NDK r18 и более поздних версиях ndk-build может генерировать базу данных компиляции JSON .

Вы можете использовать ndk-build compile_commands.json для создания базы данных без построения кода или ndk-build GEN_COMPILE_COMMANDS_DB=true если вы хотите создать и сгенерировать базу данных в качестве побочного эффекта.