ndk-build

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

Aspectos internos

A execução do script ndk-build é equivalente à execução do seguinte comando:

$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 seus próprios arquivos make.

Invocar pela linha de comando

O script ndk-build reside no diretório de instalação do NDK de nível superior. Para executar o script pela linha de comando, invoque-o enquanto ele estiver no diretório do projeto do app. Exemplo:

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

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

Opções

Todos os parâmetros para ndk-build são passados diretamente ao comando make GNU subjacente que executa os scripts de compilação do NDK. Combine o ndk-build e as opções no formulário ndk-build <option>. 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 alto número de execuções paralelas (link em inglês) pode resultar em um erro de compilação que inclui a seguinte mensagem:

rm: fts_read: No such file or directory

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

V=1
Iniciar o build e exibir os comandos correspondentes.
-B
Forçar um build completamente novo.
-B V=1
Forçar um build completamente novo 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 um build depurável (consulte a Tabela 1).
NDK_DEBUG=0
Forçar um build de lançamento (consulte a Tabela 1).
NDK_HOST_32BIT=1
Sempre usar o conjunto de ferramentas em modo de 32 bits. Consulte Conjuntos de ferramentas de 64 e 32 bits.
NDK_APPLICATION_MK=<file>
Criar, usando um arquivo Application.mk específico apontado pela variável NDK_APPLICATION_MK.
-C <project>
Criar o código nativo para o caminho do projeto localizado em <project>. Útil se você não quiser cd no terminal.

Builds depuráveis x de lançamento

Use a opção NDK_DEBUG e, em alguns casos, AndroidManifest.xml para especificar o build 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 possível de configurações.

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

Configuração do manifestoNDK_DEBUG=0NDK_DEBUG=1NDK_DEBUG não especificado
android:debuggable="true"Depurar; símbolos; otimizado *1Depurar; símbolos; não otimizado *2(igual a NDK_DEBUG=1)
android:debuggable="false"Lançamento; símbolos; otimizadoLançamento; símbolos; não otimizadoLançamento; sem símbolos; otimizado *3

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

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

A sintaxe da linha de comando é, por exemplo:

$ ndk-build NDK_DEBUG=1

Requisitos

O GNU Make 4 ou versão mais recente é necessário para usar o ndk-build ou o NDK em geral. O NDK inclui a própria cópia do GNU Make e a usará, a menos que você tenha definido a variável de ambiente $GNUMAKE para apontar para uma marca inadequada.

Bancos de dados de compilação JSON

No NDK r18 e versões mais recentes, o ndk-build pode gerar um banco de dados de compilação JSON.

Você poderá usar ndk-build compile_commands.json para gerar o banco de dados sem criar seu código ou ndk-build GEN_COMPILE_COMMANDS_DB=true se quiser criar e gerar o banco de dados como um efeito colateral.