ndk-build

O arquivo ndk-build é um script de shell introduzido no Android NDK r4. Seu objeto é invocar o script de compilação correto do NDK.

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 seu NDK. Você pode usar essas informações para invocar ndk-build por outros scripts de shell ou até por makefiles próprios.

Invocar pela linha de comando

O arquivo ndk-build fica no nível superior do diretório de instalação do NDK. Para executá-lo pela linha de comando, invoque-o 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 ndk-build são passados diretamente ao comando make relacionado 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 eventuais binários gerados anteriormente.
V=1
Iniciar a compilação e exibir comandos dela.
-B
Forçar uma recompilação completa.
-B V=1
Forçar uma recompilação completa e exibir comandos dela.
NDK_LOG=1
Exibir mensagens de registro internas do NDK (usado para depurar o próprio NDK).
NDK_DEBUG=1
Forçar uma compilação depurável (vide Tabela 1).
NDK_DEBUG=0
Forçar uma compilação para lançamento (vide Tabela 1).
NDK_HOST_32BIT=1
Sempre usar a cadeia de ferramentas em modo de 32 bits (vide 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>. Ú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 determinados casos, AndroidManifest.xml para especificar compilação de depuração ou para lançamento, comportamento relacionado a otimização e inclusão de símbolos. A tabela 1 mostra os resultados de cada combinação de configurações possível.

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

NDK_DEBUG=0 NDK_DEBUG=1NDK_DEBUG não especificado
android:debuggble="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 compila com a opção -O2 do GCC. NDK_DEBUG=1 é equivalente a APP_OPTIM=debug no Application.mk e compila com a opção -O0 do GCC. Para saber mais sobre APP_OPTIM, consulte Application.mk.

A sintaxe da linha de comando é, por exemplo:

$ ndk-build NDK_DEBUG=1

Se estiver usando ferramentas de compilação anteriores ao SDK r8, você precisará modificar o arquivo AndroidManifest.xml para definir o modo de depuração. A sintaxe para fazer isso parece com o seguinte:

<application android:label="@string/app_name"
android:debuggable="true">
DO SDK r8 em diante, não é necessário tocar em AndroidManifest.xml. Compilar um pacote de depuração (por exemplo, com depuração ant ou a opção correspondente do plug-in ADT) faz a ferramenta selecionar automaticamente os arquivos de depuração nativos gerados com NDK_DEBUG=1.

Cadeias de ferramentas de 32 e 64 bits

Algumas cadeias 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 escolha uma versão em 64 bits da cadeia de ferramentas automaticamente se o sistema operacional hóspede for compatível com ela. 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.

Observe que as ferramentas em 64 bits utilizam recursos de host de uma melhor forma (por exemplo, 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 versão posterior é necessário para usar o ndk-build ou o NDK como um todo. Os scripts de compilação detectarão uma ferramenta Make inadequada e gerarão uma mensagem de erro.

Se você tiver GNU Make 3.81 instalado, mas o comando make padrão não o inicializar, configure GNUMAKE no seu ambiente para apontar para ele antes de inicializar 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 do ambiente:

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