La secuencia de comandos ndk-build

La secuencia de comandos ndk-build compila proyectos que usan el sistema de compilación basado en Make del NDK. Hay documentación más específica sobre la configuración de Android.mk y Application.mk que usa ndk-build.

Aspectos internos

La ejecución de la secuencia de comandos ndk-build es equivalente a ejecutar el siguiente comando:

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

$GNUMAKE apunta a Make 3.81 o versiones posteriores de GNU y <ndk> apunta al directorio de instalación del NDK. Puedes usar esta información para invocar ndk-build desde otras secuencias de comandos de shell o incluso desde tus propios archivos make.

Cómo realizar invocaciones desde la línea de comandos

La secuencia de comandos ndk-build está en el nivel superior del directorio de instalación del NDK. Para ejecutarla desde la línea de comandos, invócala mientras estás en el directorio del proyecto de tu aplicación o debajo de este. Por ejemplo:

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

En este ejemplo, <project> apunta al directorio raíz de tu proyecto y <ndk> es el directorio donde instalaste el NDK.

Opciones

Todos los parámetros de ndk-build se pasan directamente al comando make subyacente de GNU que ejecuta las secuencias de comandos de compilación del NDK. Combina ndk-build y opciones en el formulario ndk-build <option>. Por ejemplo:

$ ndk-build clean

Están disponibles las siguientes opciones:

clean
Quita los objetos binarios generados anteriormente.

Nota: En Mac OS X, si se ejecuta ndk-build clean con una gran cantidad de ejecuciones paralelas, puede producirse un error de compilación que incluya el siguiente mensaje:

rm: fts_read: No such file or directory

Para evitar este problema, procura no usar el modificador -jN ni seleccionar un valor inferior para N, como "2".

V=1
Inicia la compilación y muestra los comandos de compilación.
-B
Fuerza una nueva compilación.
-B V=1
Fuerza una nueva compilación y muestra los comandos de compilación.
NDK_LOG=1
Muestra mensajes de registros internos del NDK (empleados para depurarlo).
NDK_DEBUG=1
Fuerza una compilación depurable (consulta la tabla 1).
NDK_DEBUG=0
Fuerza una compilación de versión (consulta la Tabla 1).
NDK_HOST_32BIT=1
Usa siempre la cadena de herramientas en modo de 32 bits.
NDK_APPLICATION_MK=<file>
Compila con un archivo Application.mk específico al que apunte la variable NDK_APPLICATION_MK.
-C <project>
Compila el código nativo para la ruta de acceso al proyecto ubicado en <project>. Es útil si no deseas usar el comando cd para el directorio en la terminal.

Compilaciones depurables frente a compilaciones de actualización

Usa la opción NDK_DEBUG y, en determinados casos, AndroidManifest.xml para especificar la compilación de depuración o actualización, el comportamiento relacionado con la optimización y la inclusión de símbolos. En la tabla 1, se muestran los resultados de cada combinación de configuraciones posible.

Tabla 1. Resultados de combinaciones de NDK_DEBUG (línea de comandos) y android:debuggable (manifiesto).

Configuración de manifiestoNDK_DEBUG=0 NDK_DEBUG=1NDK_DEBUG no especificado
android:debuggable="true" Depuración; Símbolos; Optimizada*1 Depuración; Símbolos; Sin optimizar*2 (igual que NDK_DEBUG=1)
android:debuggable="false"Versión; Símbolos; Optimizada Actualización; símbolos; sin optimizarVersión; Sin símbolos, Optimizada*3
*1: Útil para el perfilamiento.
*2: Es el modo predeterminado para ejecutar ndk-gdb.
*3: Es el modo predeterminado.

Nota: "NDK_DEBUG=0" es equivalente a "APP_OPTIM=release" y se compila con "-O2". "NDK_DEBUG=1" es equivalente a "APP_OPTIM=debug" en "Application.mk" y se compila con "-O0". Para obtener más información sobre "APP_OPTIM", consulta Application.mk.

La sintaxis de la línea de comando es, por ejemplo:

$ ndk-build NDK_DEBUG=1

Requisitos

Necesitas GNU Make 4 para utilizar ndk-build o el NDK en general. El NDK incluye su propia copia de GNU Make y la usará a menos que hayas configurado la variable de entorno $GNUMAKE para que apunte a un archivo make inadecuado.

Bases de datos de compilación JSON

En el NDK r18 y versiones posteriores, ndk-build puede generar una base de datos de compilación JSON.

Puedes usar ndk-build compile_commands.json para generar la base de datos sin compilar tu código o ndk-build GEN_COMPILE_COMMANDS_DB=true si deseas compilar y generar la base de datos como un efecto secundario.