ndk-build

O script ndk-build cria projetos que usam o sistema de compilação baseado em Make do NDK. Há documentações mais específicas sobre as configurações do Android.mk e do Application.mk usadas pelo ndk-build.

Partes internas

Executar o script ndk-build é equivalente a executar o comando a seguir:

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

$GNUMAKE aponta para o GNU Make 3.81 ou posterior e <ndk> aponta para o diretório de instalação do NDK. Você pode usar essas informações para invocar o ndk-build por outros scripts de shell ou por makefiles próprios.

Invocar pela linha de comando

O script ndk-build é localizado no diretório de instalação do NDK de nível superior. Para executá-lo pela linha de comando, invoque o script enquanto ele está no diretório do projeto do aplicativo. Por exemplo:

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

Neste exemplo, <project> aponta para o diretório raiz do projeto e <ndk> é o diretório em que você instalou o NDK.

Opções

Todos os parâmetros para o ndk-build são passados diretamente para o comando make subjacente do GNU que executa os scripts de compilação do NDK. Combine ndk-build e opções no formato ndk-build <option>. Por exemplo:

$ ndk-build clean

As seguintes opções estão disponíveis:

clean
Remover binários gerados anteriormente.

Observação: No Mac OS X, executar ndk-build clean com um número alto de execuções paralelas pode gerar um erro de compilação que inclui a seguinte mensagem:

rm: fts_read: No such file or directory

Para evitar esse problema, é recomendável usar o modificador -jN ou selecionar um valor menor para N, como 2.

V=1
Iniciar a compilação e exibir os comandos correspondentes.
-B
Forçar uma recompilação completa.
-B V=1
Forçar uma recompilação completa e exibir os comandos correspondentes.
NDK_LOG=1
Exibir mensagens internas do registro do NDK (usadas para depurar o próprio NDK).
NDK_DEBUG=1
Forçar uma compilação depurável (consulte Tabela 1).
NDK_DEBUG=0
Forçar uma compilação para lançamento (consulte a Tabela 1).
NDK_HOST_32BIT=1
Sempre usar a cadeia de ferramentas em modo de 32 bits (consulte Cadeias de ferramentas de 32 e 64 bits).
NDK_APPLICATION_MK=<file>
Compilar usando um arquivo Application.mk específico apontado pela variável NDK_APPLICATION_MK.
-C <project>
Compilar o código nativo para o caminho do projeto localizado em <project>. Isso é útil se você não quiser usar o comando cd para o diretório no terminal.

Compilações depuráveis e de lançamento

Use a opção NDK_DEBUG e, em determinados casos, AndroidManifest.xml para especificar a compilação de depuração ou de lançamento, o comportamento relacionado à otimização e a inclusão de símbolos. A tabela 1 mostra os resultados de cada combinação de configurações possível.

Tabela 1. Resultados de combinações de NDK_DEBUG (linha de comando) e android:debuggable (manifesto).

A configuraçãoNDK_DEBUG=0 NDK_DEBUG=1NDK_DEBUG do manifesto não foi especificada
android:debuggable="true" Depuração; Símbolos; Otimizada*1 Depuração; Símbolos; Não otimizada*2 (igual a NDK_DEBUG=1)
android:debuggable="false"Lançamento; Símbolos; Otimizada Lançamento; Símbolos; Não otimizadaLançamento; Sem símbolos; Otimizada*3

*1: útil para criação de perfil.
*2: padrão para executar ndk-gdb.
*3: modo padrão.

Observação: NDK_DEBUG=0 é equivalente a APP_OPTIM=release e está de acordo com -O2. NDK_DEBUG=1 é equivalente a APP_OPTIM=debug em Application.mk e está de acordo com -O0. Para saber mais sobre APP_OPTIM, consulte Application.mk.

Exemplo da sintaxe da linha de comando:

$ ndk-build NDK_DEBUG=1

Cadeias de ferramentas de 32 e 64 bits

Algumas cadeias de ferramenta têm versões em 32 e 64 bits. Por exemplo, os diretórios <ndk>/toolchain/<name>/prebuilt/ e <ndk>/prebuilt/ podem conter pastas linux-x86 e linux-x86_64 para ferramentas Linux nos modos 32 e 64 bits, respectivamente. O script do ndk-build escolhe uma versão em 64 bits da cadeia de ferramentas automaticamente se o SO do host for compatível. Para forçar o uso de uma cadeia de ferramentas de 32 bits, use NDK_HOST_32BIT=1 no seu ambiente ou na linha de comando do ndk-build.

As ferramentas em 64 bits utilizam os recursos do host de uma melhor forma (por exemplo, elas são mais rápidas e lidam com programas maiores) e ainda geram binários em 32 bits para o Android.

Requisitos

O GNU Make 3.81 ou posterior é necessário para usar o ndk-build ou o NDK em geral. Os scripts de compilação detectarão uma ferramenta Make incompatível e gerarão uma mensagem de erro.

Se o GNU Make 3.81 estiver instalado, mas o comando make padrão não for iniciado, defina GNUMAKE no seu ambiente apontando para ele antes de iniciar o ndk-build. Por exemplo:

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

É possível modificar outras ferramentas de host pré-compiladas em $NDK/prebuilt/<OS>/bin/ com as seguintes variáveis de ambiente:

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