Сценарий 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 |
*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 если вы хотите создать и сгенерировать базу данных в качестве побочного эффекта.