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
Las siguientes opciones están disponibles:
-
clean - Quita los objetos binarios generados anteriormente.
Nota: En Mac OS X, si se ejecuta
ndk-build cleancon un alto número de ejecuciones paralelas, es posible que aparezca un error de compilación con el siguiente mensaje:rm: fts_read: No such file or directory
A fin de evitar este problema, procura no usar el modificador
-jNni seleccionar un valor inferior paraN, como "2". -
V=1 - Inicia la compilación y muestra los comandos de compilación.
-
-B - Fuerza una recompilación completa.
-
-B V=1 - Fuerza una recompilación completa y muestra los comandos de compilación.
-
NDK_LOG=1 - Muestra mensajes de registros internos del NDK (usados para depurar el NDK en sí).
-
NDK_DEBUG=1 - Fuerza una compilación depurable (consulta la Tabla 1).
-
NDK_DEBUG=0 - Fuerza una compilación de actualizació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.mkespecífico al que apunte la variableNDK_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 comandocdpara 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 manifiesto | NDK_DEBUG=0 | NDK_DEBUG=1 | NDK_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 optimizar | Actualización; sin símbolos, optimizada*3 |
*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.