ndk-build

La secuencia de comandos ndk-build compila proyectos que utilizan el sistema de compilación basado en Make de NDK. Existe documentación más específica sobre la configuración de Android.mk y Application.mk que utiliza 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 GNU Make 3.81 o versiones posteriores, 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, e incluso desde tus propios archivos make.

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

La secuencia de comandos ndk-build existe en el nivel superior del directorio de instalación de NDK. Para ejecutarla desde la línea de comandos, invócala mientras te encuentres 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 en el que instalaste el NDK.

Opciones

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

$ ndk-build clean

Están disponibles las siguientes opciones:

clean
Quita los ejecutables generados con anterioridad.

Nota: En Mac OS X, si se ejecuta ndk-build clean con un alto número de ejecuciones paralelas de, puede surgir un error de compilación que incluya el mensaje siguiente:

rm: fts_read: No such file or directory

Para evitar este problema, considera no utilizar el modificador -jN o seleccionar un valor inferior para N, como 2.

V=1
Inicia la compilación y muestra los comandos de compilación.
-B
Hace que se vuelva a realizar una compilación completa de manera forzosa.
-B V=1
Hace que se vuelva a realizar una compilación completa de manera forzosa 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 el conjunto de herramientas en modo de 32 bits (consulta Conjuntos de herramientas de 64 y 32 bits).
NDK_APPLICATION_MK=<file>
Realiza compilaciones usando un archivo Application.mk específico al cual haga referencia la variable NDK_APPLICATION_MK.
-C <project>
Compila el código nativo para la ruta de acceso del proyecto que se encuentra en <project>. Resulta útil si no deseas cd con él en tu terminal.

Compilaciones depurables frente a compilaciones de versión

Usa la opción NDK_DEBUG y, en ciertos casos, AndroidManifest.xml para especificar la compilación de depuración o de versió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 las 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; Optimizado*1 Depuración; Símbolos; Sin optimizar*2 (igual a NDK_DEBUG=1)
android:debuggable="false"Versión; Símbolos; Optimizado Versión; Símbolos; Sin optimizarVersión; Sin símbolos; Optimizado*3

*1: Útil para el perfilamiento.
*2: Predeterminado para ejecutar ndk-gdb.
*3: 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 acerca de APP_OPTIM, consulta Application.mk.

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

$ ndk-build NDK_DEBUG=1

Conjuntos de herramientas de 64 y 32 bits

Algunos conjuntos de herramientas vienen con ambas versiones, la de 64 y la de 32 bits. Por ejemplo, los directorios <ndk>/toolchain/<name>/prebuilt/ y <ndk>/prebuilt/ pueden contener carpetas linux-x86 y linux-x86_64 para herramientas Linux en modos de 32 y 64 bits, respectivamente. La secuencia de comandos ndk-build, selecciona automáticamente una versión de 64 bits del conjunto de herramientas, si el SO la admite. Puedes forzar el uso de un conjunto de herramientas de 32 bits usando NDK_HOST_32BIT=1, ya sea en tu entorno o en la línea de comandos ndk-build.

Ten en cuenta que las herramientas de 64 bits usan mejor los recursos del host (por ejemplo, son más rápidas y admiten programas más grandes) y pueden, de todos modos, generar ejecutables de 32 bits para Android.

Requisitos

Necesitas GNU Make 3.81 o posterior para utilizar ndk-build o el NDK en general. Las secuencias de comandos de la compilación detectarán una herramienta Make que no cumpla con los requisitos y generarán un mensaje de error.

Si tienes instalado GNU Make 3.81, pero el comando predeterminado make no lo inicia, define GNUMAKE en tu entorno para hacer referencia a él antes de iniciar ndk-build. Por ejemplo:

$ export GNUMAKE=/usr/local/bin/gmake
$ ndk-build

Puedes anular otras herramientas del host compiladas previamente en $NDK/prebuilt/<OS>/bin/ con las siguientes variables de entorno:

$ export NDK_HOST_AWK=<path-to-awk>
$ export NDK_HOST_ECHO=<path-to-echo>
$ export NDK_HOST_CMP=<path-to-cmp>