ndk-build

O script ndk-build compila 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.

Elementos 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. Por 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 para o 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>. 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 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 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 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 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
    

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 as pastas linux-x86 e linux-x86_64 para as ferramentas do Linux nos modos de 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. É possível forçar o uso de um conjunto de ferramentas de 32 bits usando 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 gerenciam 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.

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

É possível substituir 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>