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ürN
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 VariableNDK_APPLICATION_MK
verweist. -
-C <project>
- Erstellen Sie den nativen Code für den Projektpfad unter
<project>
. Nützlich, wenn du in deinem Terminal nicht percd
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.
Manifesteinstellung | NDK_DEBUG=0 | NDK_DEBUG=1 | NDK_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 optimiert | Veröffentlichung; keine Symbole; Optimiert*3 |
*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.