ndk-build

La secuencia de comandos ndk-build compila proyectos que utilizan el sistema de compilación basado en Make del 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 se encuentra en el nivel superior del directorio de instalación del NDK. Para ejecutarla desde la línea de comandos, invócala mientras te encuentras 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 el formato 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, puede surgir un error de compilación que incluye el siguiente mensaje:

    rm: fts_read: No such file or directory
    

Para evitar este problema, puedes no utilizar el modificador -jN o seleccionar un valor menor 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 aplicació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 (consulta Cadenas 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 usar el comando cd para el directorio en la 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. Son los 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; Optimizada*1 Depuración; Símbolos; Sin optimizar*2 (igual que NDK_DEBUG=1)
android:debuggable="false"Versión; Símbolos; Optimizada Versión; Símbolos; Sin optimizarVersión; Sin símbolos, Optimizada*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 sobre APP_OPTIM, consulta Application.mk.

La sintaxis de la línea de comando 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 de Linux en modos de 32 y 64 bits, respectivamente. La secuencia de comandos ndk-build selecciona automáticamente una versión de 64 bits de la cadena de herramientas si el SO la admite. Puedes forzar el uso de una cadena 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 objetos binarios 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 cumple con los requisitos y generarán un mensaje de error.

Si tienes GNU Make 3.81 instalado, 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>