Lo script ndk-build

Lo script ndk-build crea progetti che utilizzano il sistema di build basato su make di NDK. È disponibile documentazione più specifica per la configurazione di Android.mk e Application.mk utilizzata da ndk-build.

Interni

L'esecuzione dello script ndk-build equivale all'esecuzione del seguente comando:

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

$GNUMAKE rimanda a GNU Make 3.81 o versioni successive, mentre <ndk> rimanda alla directory di installazione NDK. Puoi utilizzare queste informazioni per richiamare ndk-build da altri script della shell o persino per creare file personali.

Richiama dalla riga di comando

Lo script ndk-build si trova nella directory di installazione NDK di primo livello. Per eseguirlo dalla riga di comando, richiamalo all'interno o nella directory del progetto dell'applicazione. Ecco alcuni esempi:

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

In questo esempio, <project> rimanda alla directory principale del progetto, mentre <ndk> è la directory in cui hai installato l'NDK.

Opzioni

Tutti i parametri di ndk-build vengono passati direttamente al comando make GNU sottostante che esegue gli script di build NDK. Combina ndk-build e opzioni nel formato ndk-build <option>. Ecco alcuni esempi:

$ ndk-build clean

Sono disponibili le seguenti opzioni:

clean
Rimuovi eventuali programmi binari generati in precedenza.

Nota: su Mac OS X, l'esecuzione di ndk-build clean con un numero elevato di esecuzioni parallele potrebbe causare un errore di build che include il seguente messaggio:

rm: fts_read: No such file or directory

Per evitare questo problema, non utilizzare il modificatore -jN o selezionare un valore inferiore per N, ad esempio 2.

V=1
Avvia build e visualizza i relativi comandi.
-B
Forza il completamento di una nuova build.
-B V=1
Forza una rigenerazione completa e visualizza i comandi di build.
NDK_LOG=1
Visualizza i messaggi di log NDK interni (utilizzati per il debug dell'NDK stesso).
NDK_DEBUG=1
Forza una build di cui è possibile eseguire il debug (vedi tabella 1).
NDK_DEBUG=0
Forza la build di una release (vedi tabella 1).
NDK_HOST_32BIT=1
Utilizza sempre la Toolchain in modalità a 32 bit.
NDK_APPLICATION_MK=<file>
Crea utilizzando un file Application.mk specifico a cui punta la variabile NDK_APPLICATION_MK.
-C <project>
Crea il codice nativo per il percorso del progetto che si trova in <project>. Utile se non vuoi cd nel tuo terminale.

Confronto tra build di debug e build di release

Utilizza l'opzione NDK_DEBUG e, in alcuni casi, AndroidManifest.xml per specificare la build di debug o della release, il comportamento relativo all'ottimizzazione e l'inclusione di simboli. La tabella 1 mostra i risultati di ogni possibile combinazione di impostazioni.

Tabella 1. Risultati delle combinazioni di NDK_DEBUG (riga di comando) e android:debuggable (manifest).

Impostazione manifestNDK_DEBUG=0 NDK_DEBUG=1NDK_DEBUG non specificato
android:debuggable="true" Debug; simboli; ottimizzato*1 Debug; simboli; non ottimizzato*2 (uguale a NDK_DEBUG=1)
android:debuggable="false"Release; simboli; ottimizzato Release; simboli; non ottimizzataRelease; nessun simbolo; ottimizzato*3
*1: Utile per la profilazione.
*2: impostazione predefinita per l'esecuzione di ndk-gdb.
*3: modalità predefinita.

Nota: "NDK_DEBUG=0" è l'equivalente di "APP_OPTIM=release" e viene compilato con "-O2". "NDK_DEBUG=1" è l'equivalente di "APP_OPTIM=debug" in "Application.mk" e viene compilato con "-O0". Per ulteriori informazioni su "APP_OPTIM.m", vedi

La sintassi nella riga di comando è, ad esempio:

$ ndk-build NDK_DEBUG=1

Requisiti

È necessario GNU Make 4 per utilizzare ndk-build o NDK in generale. L'NDK include la propria copia di GNU Make e la utilizzerà, a meno che tu non abbia impostato la variabile di ambiente $GNUMAKE in modo che rimandi a una marca non appropriata.

Database di compilazione JSON

In NDK r18 e versioni successive, ndk-build può generare un database di compilazione JSON.

Puoi utilizzare ndk-build compile_commands.json per generare il database senza generare il codice oppure ndk-build GEN_COMPILE_COMMANDS_DB=true se vuoi creare e generare il database come effetto collaterale.