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 clean
con 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
-jN
ni 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.mk
especí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 comandocd
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.
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.