Heim >Backend-Entwicklung >C++ >Kann ich LOCAL_SRC_FILES innerhalb des ndk {} DSL in Android Gradle definieren?
Möglicherweise müssen Sie LOCAL_SRC_FILES innerhalb des ndk {} DSL-Blocks in Ihrem gradle.build definieren Datei, wenn Sie mit Android Studio-Projekten arbeiten, die nativen Code enthalten. Obwohl dies von aktuellen Gradle-Plugins nicht nativ unterstützt wird, gibt es mehrere Ansätze, um eine ähnliche Funktionalität zu erreichen.
In früheren Versionen von Gradle konnten Sie dieses Problem beheben, indem Sie unerwünschte Elemente ausschließen Quelldateien aus dem Build-Prozess. Dieser Ansatz erforderte jedoch das Deaktivieren der regulären NDK-Build-Aufgaben und die Definition benutzerdefinierter Aufgaben.
Mit der Einführung des experimentellen Plugins von Gradle (com.android.tools.build:gradle- experimentell:0.4.0) können Sie jetzt Dateien basierend auf Mustern vom NDK-Build ausschließen. Verwenden Sie dazu die folgende Syntax:
android.sources { main { jni.source { srcDirs = ["~/srcs/jni"] exclude "**/win.cpp" } } }
Dadurch können Sie bestimmte Dateien ausschließen, z. B. solche, die für andere Plattformen (z. B. iOS, WinRT) gedacht sind, während Sie in Ihrem NDK-Build auf Android abzielen.
Wenn Sie ein debuggbares Setup benötigen, besteht eine Problemumgehung darin, eine statische Bibliothek mit ndk-build und Verknüpfung zu erstellen Bestücken Sie es mit den notwendigen Gegenständen, um die erforderlichen Symbole bereitzustellen. Dieser Ansatz erfordert die Aufteilung Ihrer nativen Quellen in plattformspezifische und plattformunabhängige Dateien.
In Ihrer build.gradle-Datei:
task buildStaticLib(type: Exec, description: 'Compile Static lib via NDK') { commandLine "$ndkBuild", "$staticLibPath", "NDK_PROJECT_PATH=~/srcs", "NDK_OUT=$ndkOut", "APP_ABI=$appAbi", "APP_STL=gnustl_static" } tasks.all { task -> if (task.name.startsWith('link')) { task.dependsOn buildStaticLib } } model { android.ndk { moduleName = "hello-jni" abiFilters += "$appAbi".toString() ldFlags += "$staticLib".toString() ldLibs += "log" cppFlags += "-std=c++11" } android.sources { main.jni.source { srcDirs = ["~/srcs/jni"] } } }
In ~/srcs/Android.mk:
LOCAL_PATH := $(call my-dir)/.. include $(CLEAR_VARS) LOCAL_MODULE := staticLib LOCAL_SRC_FILES := HelloJni.cpp LOCAL_CPPFLAGS += -std=c++11 include $(BUILD_STATIC_LIBRARY)
Alternativ können Sie die Verwendung eines externen Tools wie CMake oder Buck zur Verwaltung in Betracht ziehen Erstellen Sie Ihren nativen Code-Erstellungsprozess und integrieren Sie ihn in Gradle. Dieser Ansatz bietet mehr Flexibilität und Kontrolle über den Kompilierungs- und Verknüpfungsprozess.
Das obige ist der detaillierte Inhalt vonKann ich LOCAL_SRC_FILES innerhalb des ndk {} DSL in Android Gradle definieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!