您可能會遇到需要在 gradle.build 的 ndk {} DSL 區塊中定義 LOCAL_SRC_FILES處理包含本機程式碼的 Android Studio 專案時的檔案。雖然目前的 Gradle 插件本身不支援此功能,但有多種方法可以實現類似的功能。
在 Gradle 的早期版本中,您可以透過排除不需要的方法來解決此問題建置過程中的原始檔案。然而,這種方法需要停用常規 NDK 建置任務並定義自訂任務。
引入Gradle 的實驗性插件(com.android.tools.build:gradle-實驗性:0.4.0),您現在可以根據模式從NDK 構建中排除文件。為此,請使用以下語法:
android.sources { main { jni.source { srcDirs = ["~/srcs/jni"] exclude "**/win.cpp" } } }
這允許您在 NDK 建置中針對 Android 時排除特定文件,例如用於其他平台(例如 iOS、WinRT)的檔案。
如果您需要可調試設置,解決方法包括使用 ndk-build 構建靜態庫和將其與必要的對象鏈接以提供所需的符號。這種方法需要將您的原生原始碼拆分為特定於平台和獨立於平台的檔案。
在您的build.gradle 檔案中:
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"] } } }
在~/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)
以上是我可以在 Android Gradle 的 ndk {} DSL 中定義 LOCAL_SRC_FILES 嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!