您可能会遇到需要在 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)
或者,您可以考虑使用外部工具,例如CMake 或 Buck 来管理您的本机代码构建过程并将其与 Gradle 集成。这种方法为编译和链接过程提供了更大的灵活性和控制力。
以上是我可以在 Android Gradle 的 ndk {} DSL 中定义 LOCAL_SRC_FILES 吗?的详细内容。更多信息请关注PHP中文网其他相关文章!