ndk-build

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

Internos

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 versão posterior, e <ndk> aponta para o diretório de instalação do seu 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 fica localizado 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 projeto e <ndk> é o diretório em que 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 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 não 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 a Tabela 1).
NDK_DEBUG=0
Forçar uma compilação para 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>
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>. Útil se você não quiser cd para ele no terminal.

Compilações depuráveis x para lançamento

Use a opção NDK_DEBUG e, em alguns casos, AndroidManifest.xml para especificar a compilação de depuração ou para 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 de NDK_DEBUG (linha de comando) e android:debuggable (manifesto).

Configuração do manifestoNDK_DEBUG=0 NDK_DEBUG=1NDK_DEBUG não especificado
android:debuggable="true" Depurar; símbolos; otimizado *1 Depurar; símbolos; não otimizado *2 (igual a NDK_DEBUG=1)
android:debuggable="false"Lançamento; símbolos; otimizado Lanç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
    

Conjuntos de ferramentas de 32 e 64 bits

Alguns conjuntos de ferramenta vêm com 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 automaticamente uma versão em 64 bits do conjunto de ferramentas se o SO do host for compatível. Para forçar o uso de um conjunto 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 recursos de host de uma forma melhor (por exemplo, são mais rápidas e lidam com programas maiores) e ainda geram binários de 32 bits para o Android.

Requisitos

O GNU Make 3.81 ou versão 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 você tem o GNU Make 3.81 instalado, mas o comando make padrão não o inicializa, configure GNUMAKE no seu ambiente para apontar para ele antes de iniciar o ndk-build. 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>