Das Skript "ndk-build"

Mit dem Skript ndk-build werden Projekte erstellt, die das Make-basierte Build-System des NDK verwenden. Es gibt eine spezifischere Dokumentation für die von ndk-build verwendete Android.mk- und Application.mk-Konfiguration.

Intern

Das Ausführen des Skripts ndk-build entspricht dem Ausführen des folgenden Befehls:

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

$GNUMAKE verweist auf GNU Make 3.81 oder höher und <ndk> auf Ihr NDK-Installationsverzeichnis. Sie können diese Informationen verwenden, um ndk-build über andere Shell-Skripte oder sogar Ihre eigenen Make-Dateien aufzurufen.

Über die Befehlszeile aufrufen

Das Skript ndk-build befindet sich im NDK-Installationsverzeichnis der obersten Ebene. Wenn Sie es über die Befehlszeile ausführen möchten, rufen Sie es im Verzeichnis Ihres Anwendungsprojekts auf. Beispiele:

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

In diesem Beispiel verweist <project> auf das Stammverzeichnis Ihres Projekts und <ndk> ist das Verzeichnis, in dem Sie den NDK installiert haben.

Optionen

Alle Parameter für „ndk-build“ werden direkt an den zugrunde liegenden GNU-Befehl make übergeben, der die NDK-Build-Skripts ausführt. Kombinieren Sie ndk-build und Optionen in der Form ndk-build <option>. Beispiele:

$ ndk-build clean

Folgende Optionen sind verfügbar:

clean
Entfernen Sie alle zuvor generierten Binärprogramme.

Hinweis: Unter Mac OS X kann das Ausführen von ndk-build clean mit einer hohen Anzahl paralleler Ausführungen zu einem Build-Fehler wie der folgenden Meldung führen:

rm: fts_read: No such file or directory

Du kannst dieses Problem vermeiden, indem du nicht den -jN-Modifikator verwendest oder einen kleineren Wert für N auswählst, z. B. 2.

V=1
Build starten und Build-Befehle anzeigen.
-B
Erzwingt eine vollständige Neuerstellung.
-B V=1
Erzwingt eine vollständige Neuerstellung und zeigt Build-Befehle an.
NDK_LOG=1
Zeigt interne NDK-Logmeldungen an (zum Debuggen des NDK selbst).
NDK_DEBUG=1
Erzwingt einen debugfähigen Build (siehe Tabelle 1).
NDK_DEBUG=0
Erzwingen Sie einen Release-Build (siehe Tabelle 1).
NDK_HOST_32BIT=1
Verwenden Sie die Toolchain immer im 32-Bit-Modus.
NDK_APPLICATION_MK=<file>
Verwenden Sie zum Erstellen eine bestimmte Application.mk-Datei, auf die die Variable NDK_APPLICATION_MK verweist.
-C <project>
Erstellen Sie den nativen Code für den Projektpfad unter <project>. Nützlich, wenn du in deinem Terminal nicht per cd an ihn senden möchtest.

Debug-fähige und Release-Builds im Vergleich

Verwenden Sie die Option NDK_DEBUG und in bestimmten Fällen AndroidManifest.xml, um den Fehlerbehebungs- oder Release-Build, das optimierungsbezogene Verhalten und die Einbeziehung von Symbolen anzugeben. Tabelle 1 zeigt die Ergebnisse jeder möglichen Kombination von Einstellungen.

Tabelle 1 Ergebnisse der Kombinationen NDK_DEBUG (Befehlszeile) und android:debuggable (Manifest)

ManifesteinstellungNDK_DEBUG=0 NDK_DEBUG=1NDK_DEBUG nicht angegeben
android:debuggable="true" Fehlerbehebung; Symbole; Optimiert*1 Fehlerbehebung; Symbole; Nicht optimiert*2 (wie NDK_DEBUG=1)
android:debuggable="false"Release; Symbole; Optimiert Release; Symbole; Nicht optimiertVeröffentlichung; keine Symbole; Optimiert*3
*1: Nützlich für die Profilerstellung.
*2: Standardeinstellung für die Ausführung von ndk-gdb.
*3: Standardmodus

Hinweis: „NDK_DEBUG=0“ entspricht „APP_OPTIM=release“ und wird mit „-O2“ kompiliert. „NDK_DEBUG=1“ entspricht „APP_OPTIM=debug“ in „Application.mk“ und wird mit „-O0“ kompiliert. Weitere Informationen zu APP_OPTIM.

Die Syntax in der Befehlszeile lautet beispielsweise:

$ ndk-build NDK_DEBUG=1

Voraussetzungen

Sie benötigen GNU Make 4, um ndk-build oder den NDK im Allgemeinen zu verwenden. Das NDK enthält eine eigene Kopie von GNU Make und verwendet diese, sofern Sie nicht die $GNUMAKE-Umgebungsvariable so festgelegt haben, dass sie auf eine ungeeignete Marke verweist.

JSON-Kompilierungsdatenbanken

In NDK r18 und höher kann „ndk-build“ eine JSON-Kompilierungsdatenbank generieren.

Sie können entweder ndk-build compile_commands.json verwenden, um die Datenbank zu generieren, ohne Ihren Code zu erstellen, oder ndk-build GEN_COMPILE_COMMANDS_DB=true, wenn Sie die Datenbank als Nebeneffekt erstellen und generieren möchten.