Anwendung.Mk

In diesem Dokument wird die von ndk-build verwendete Build-Datei Application.mk erläutert.

Wir empfehlen Ihnen, die Seite Konzepte vorher zu lesen. eins.

Übersicht

Mit Application.mk werden projektweite Einstellungen für „ndk-build“ festgelegt. Standardmäßig Sie befindet sich unter jni/Application.mk im Projektverzeichnis Ihrer Anwendung.

Variablen

APP_ABI

Standardmäßig generiert das NDK-Build-System Code für alle nicht verworfenen ABIs. Ich kann mit der Einstellung APP_ABI Code für bestimmte ABIs generieren. Tabelle 1 enthält APP_ABI-Einstellungen für verschiedene Anweisungssätze.

Tabelle 1 APP_ABI-Einstellungen für verschiedene Anweisungssätze.

Anweisungssatz Wert
ARMv7 (32 Bit) APP_ABI := armeabi-v7a
64-Bit-ARMv8 (AArch64) APP_ABI := arm64-v8a
x86 APP_ABI := x86
x86–64 APP_ABI := x86_64
Alle unterstützten ABIs (Standardeinstellung) APP_ABI := all

Sie können auch mehrere Werte angeben, indem Sie sie in dieselbe Zeile einfügen. nach Leerzeichen. Beispiel:

APP_ABI := armeabi-v7a arm64-v8a x86

Für die Liste aller unterstützten ABIs und Details zu ihrer Verwendung und siehe Android-ABIs.

APP_ASFLAGS

Flags, die für jede Assembly-Quelldatei an den Assembler übergeben werden (.s und .S-Dateien) im Projekt.

APP_ASMFLAGS

Flags, die an YASM übergeben werden, wenn für alle YASM-Quelldateien (.asm, x86/x86_64) )

APP_Build_Script

Standardmäßig geht ndk-build davon aus, dass sich die Datei Android.mk im jni/Android.mk relativ zum Projektstamm.

Legen Sie APP_BUILD_SCRIPT fest, um eine Android.mk-Datei von einem anderen Speicherort zu laden. zum absoluten Pfad der Android.mk-Datei hinzu.

APP_UNTERLAGEN

Flags, die für alle C/C++-Kompilierungen im Projekt übergeben werden.

Siehe auch: APP_CONLYFLAGS, APP_CPPFLAGS.

APP_CLANG_FERTIG

Setzen Sie den Wert auf „true“, um Clang-tidy für alle Module im Projekt zu aktivieren. Deaktiviert von Standardeinstellung.

APP_CLANG_TIDY_FLAGGEN

Flags, die für alle Ausführungen im Projekt „clang-tidy“ übergeben werden sollen.

APP_CONLYFLAGS

Flags, die für alle C-Kompilierungen im Projekt übergeben werden. Diese Flags werden nicht für C++ Code verwendet wird.

Siehe auch: APP_CFLAGS, APP_CPPFLAGS.

APP_CPPFLAGS

Flags, die für alle C++-Kompilierungen im Projekt übergeben werden. Diese Flags werden nicht für C-Code verwendet wird.

Siehe auch: APP_CFLAGS, APP_CONLYFLAGS.

APP_CXXFLAGS

Identisch mit APP_CPPFLAGS, wird aber in der Kompilierung nach APP_CPPFLAGS angezeigt . Beispiel:

APP_CPPFLAGS := -DFOO
APP_CXXFLAGS := -DBAR

Die obige Konfiguration führt zu einem Kompilierungsbefehl, der clang++ -DFOO -DBAR und nicht clang++ -DBAR -DFOO ähnelt.

APP_FEHLERBEHEBUNG

Setzen Sie diesen Wert auf „true“, um eine debugfähige Anwendung zu erstellen.

APP_LDFLAGS

Flags, die beim Verknüpfen von ausführbaren Dateien und gemeinsam genutzten Bibliotheken übergeben werden.

APP_MANIFEST (APP_MANIFEST)

Absoluter Pfad zu einer AndroidManifest.xml-Datei.

Standardmäßig wird $(APP_PROJECT_PATH)/AndroidManifest.xml) verwendet, wenn existiert.

APP_MODULE

Eine explizite Liste der zu erstellenden Module. Die Elemente dieser Liste sind die Namen der Module, wie sie in LOCAL_MODULE in der Datei Android.mk angezeigt werden.

Standardmäßig erstellt „ndk-build“ alle gemeinsam genutzten Bibliotheken, ausführbaren Dateien und Abhängigkeiten. Statische Bibliotheken werden nur erstellt, wenn sie vom enthält, enthält das Projekt nur statische Bibliotheken oder sind in APP_MODULES

APP_OPTIMIERUNG

Definieren Sie diese optionale Variable als release oder debug. Binärdateien veröffentlichen werden standardmäßig erstellt.

Der Release-Modus ermöglicht Optimierungen und generiert möglicherweise Binärprogramme, die nicht nutzbar sind. mit einem Debugger. Im Debug-Modus werden Optimierungen deaktiviert, sodass Debugger verwendet.

Beachten Sie, dass Sie sowohl Release- als auch Binärdateien debuggen können. Release-Binärprogramme, aber bei der Fehlerbehebung geben Sie weniger Informationen an. Variablen können beispielsweise und so eine Prüfung verhindern. Außerdem kann eine Neuanordnung von Code die schwierig, den Code zu durchlaufen. sind Stacktraces möglicherweise nicht zuverlässig.

android:debuggable in der <application> deines App-Manifests deklarieren Tag verursacht, wird diese Variable standardmäßig auf debug anstelle von release gesetzt. Sie können diesen Standardwert überschreiben, indem Sie APP_OPTIM auf release setzen.

APP_PLATTFORM

APP_PLATFORM gibt das Android-API-Level an, für das diese App erstellt wird und entspricht dem minSdkVersion der Anwendung.

Wenn nicht angegeben, bezieht sich ndk-build auf das vom NDK Das vom neuesten NDK unterstützte minimale API-Level ist immer niedrig genug fast alle aktiven Geräte unterstützt.

Beispielsweise gibt der Wert android-16 an, dass Ihre Bibliothek APIs verwendet, die sind nur unter Android 4.1 (API-Level 16) verfügbar und können nicht auf Geräten verwendet werden. eine niedrigere Plattformversion ausgeführt wird. Eine vollständige Liste der Plattformnamen und entsprechenden Android-System-Images, siehe Android NDK native APIs

Wenn Sie Gradle und externalNativeBuild verwenden, sollte dieser Parameter nicht festgelegt werden . Lege stattdessen das Attribut minSdkVersion in der Datei defaultConfig oder productFlavors Häuserblocks von build.gradle-Datei auf Modulebene. Dieses wird Ihre Bibliothek nur von Apps verwendet, die auf Geräten mit einer geeigneter Android-Version.

Beachten Sie, dass das NDK nicht für jedes API-Level von Android Bibliotheken enthält. Versionen, die keine neuen nativen APIs enthielten, werden ausgelassen, um Platz im NDK ndk-build verwendet in absteigender Reihenfolge nach Präferenz:

  1. Die Plattformversion, die APP_PLATFORM entspricht.
  2. Das nächste verfügbare API-Level unter APP_PLATFORM. Beispiel: android-19 wird verwendet, wenn APP_PLATFORM den Wert android-20 hat, da es keine neuen native APIs in Android-20.
  3. Das vom NDK unterstützte minimale API-Level.

APP_PROJECT_PATH

Der absolute Pfad des Stammverzeichnisses des Projekts.

APP_SHORT_commands

Das projektweite Äquivalent von LOCAL_SHORT_COMMANDS. Weitere Informationen finden Sie unter der Dokumentation zu LOCAL_SHORT_COMMANDS in Android.mk

APP_STL

Die für diese Anwendung zu verwendende C++-Standardbibliothek.

Standardmäßig wird system STL verwendet. Weitere Optionen sind c++_shared, c++_static und none. Weitere Informationen finden Sie unter NDK C++ Laufzeiten und Funktionen:

APP_STRIP_MODE

Das Argument, das für Module in dieser Anwendung an strip übergeben werden soll. Standardeinstellungen an --strip-unneeded. Um zu vermeiden, dass alle Binärdateien im Modul entfernt werden, setzen Sie auf none Informationen zu anderen Streifenmodi siehe Streifen Dokumentation.

DURCHFÜHRTE_APP_ARCHIV

Setzen Sie den Wert auf „true“, um Thin Archive für alle statischen Bibliotheken im Projekt zu verwenden. Für Weitere Informationen finden Sie in der Dokumentation zu LOCAL_THIN_ARCHIVE unter Android.mk

APP_WRAP_SH

Pfad zur Datei wrap.sh, die in dieser Anwendung enthalten sein soll.

Für jedes ABI gibt es eine Variante dieser Variable sowie eine ABI-generische Variante:

  • APP_WRAP_SH
  • APP_WRAP_SH_armeabi-v7a
  • APP_WRAP_SH_arm64-v8a
  • APP_WRAP_SH_x86
  • APP_WRAP_SH_x86_64