Das Skript ndk-build
erstellt Projekte, die den Make-basierten Build des NDK verwenden.
System. Eine genauere Dokumentation
Android.mk und
Verwendete Application.mk-Konfiguration
von ndk-build
Interna
Die Ausführung des Skripts ndk-build
entspricht der Ausführung des folgenden Befehls:
$GNUMAKE -f <ndk>/build/core/build-local.mk <parameters>
$GNUMAKE
verweist auf GNU Make 3.81 oder höher und
<ndk>
verweist auf Ihr NDK-Installationsverzeichnis. Sie können
um ndk-build aus anderen Shell-Skripten oder sogar aus Ihrem eigenen
Dateien zu erstellen.
Über die Befehlszeile aufrufen
Das Skript ndk-build
befindet sich im NDK-Installationsverzeichnis der obersten Ebene. So führen Sie sie aus:
aus der Befehlszeile aus und rufen Sie sie auf, während sie sich im oder im Verzeichnis Ihres Anwendungsprojekts befinden.
Beispiel:
$ cd <project> $ <ndk>/ndk-build
In diesem Beispiel verweist <project>
auf Ihren
Stammverzeichnis des Projekts und <ndk>
ist das Verzeichnis,
Sie haben das NDK installiert.
Optionen
Alle Parameter für „ndk-build“ werden direkt an die zugrunde liegende GNU-make
übergeben.
zum Ausführen der NDK-Build-Skripte verwenden. ndk-build
und
im Format ndk-build <option>
. Beispiel:
$ ndk-build clean
Folgende Optionen sind verfügbar:
-
clean
-
Entfernen Sie alle zuvor generierten Binärprogramme.
Hinweis: Wenn Sie unter Mac OS X
ndk-build clean
mit einem kann eine hohe Anzahl paralleler Ausführungen zu einem Build-Fehler führen, der enthält die folgende Nachricht:rm: fts_read: No such file or directory
Sie können dieses Problem vermeiden, indem Sie
-jN
nicht verwenden oder einen kleineren Wert fürN
auswählen, z. B. 2. -
V=1
- Build-Befehle starten und Build-Befehle anzeigen
-
-B
- Erzwingen Sie eine vollständige Neuerstellung.
-
-B V=1
- Erzwingen Sie eine vollständige Neuerstellung und zeigen Sie Build-Befehle an.
-
NDK_LOG=1
- Interne NDK-Logmeldungen anzeigen, die zum Debuggen des NDK selbst verwendet werden
-
NDK_DEBUG=1
- Erzwingen Sie einen Debug-fä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>
-
Erstellen Sie einen Build mit einer bestimmten
Application.mk
-Datei, auf die dasNDK_APPLICATION_MK
. -
-C <project>
-
Erstellen Sie den nativen Code für den Projektpfad unter
<project>
. Das ist hilfreich, wenn Siecd
in Ihrem Terminal.
Debug-fähige Builds und Release-Builds im Vergleich
Verwenden Sie die Option NDK_DEBUG
und in bestimmten Fällen
AndroidManifest.xml
, um Debugging- oder Release-Build anzugeben,
optimierungsbezogenes Verhalten und die Verwendung von Symbolen. Tabelle 1 zeigt die
der einzelnen möglichen Einstellungskombinationen.
Manifesteinstellung | NDK_DEBUG=0 | NDK_DEBUG=1 | NDK_DEBUG nicht angegeben |
---|---|---|---|
android:debuggable="true" | Fehlerbehebung: Symbole Optimiert*1 | Fehlerbehebung: Symbole Nicht optimiert*2 | (entspricht NDK_DEBUG=1) |
android:debuggable="false" | Veröffentlichung; Symbole Optimiert | Veröffentlichung; Symbole Nicht optimiert | Veröffentlichung; Keine Symbole; Optimiert*3 |
*2: Standard 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 mit "-O0" kompilieren. Weitere Informationen zu APP_OPTIM finden Sie unter Application.mk
Die Syntax in der Befehlszeile lautet zum Beispiel:
$ ndk-build NDK_DEBUG=1
Voraussetzungen
Sie benötigen GNU Make 4, um ndk-build oder das NDK im Allgemeinen zu verwenden. Das NDK enthält seine
eine eigene Kopie von GNU Make und wird diese verwenden, es sei denn, Sie haben die $GNUMAKE
auf eine ungeeignete Marke verweist.
JSON-Kompilierungsdatenbanken
In NDK r18 und höher kann „ndk-build“ ein JSON-Kompilierungsdatenbank
Sie können entweder ndk-build compile_commands.json
verwenden, um die Datenbank zu generieren
ohne Code erstellen zu müssen, oder ndk-build GEN_COMPILE_COMMANDS_DB=true
, wenn Sie
die Datenbank als Nebeneffekt erstellen und generieren wollen.