首页 > 后端开发 > C++ > 如何在 Android NDK DSL 中定义 LOCAL_SRC_FILES?

如何在 Android NDK DSL 中定义 LOCAL_SRC_FILES?

Susan Sarandon
发布: 2024-11-16 04:11:03
原创
967 人浏览过

How to Define LOCAL_SRC_FILES in Android NDK DSL?

在 NDK DSL 中定义 LOCAL_SRC_FILES

Android NDK DSL 允许您为模块指定本机源文件。然而,在旧版本的 DSL 中,没有直接的方法来手动定义 LOCAL_SRC_FILES。

实验性插件解决方案

使用实验性 Android Gradle 插件 0.4.0,您现在可以根据模式从 NDK 构建中排除源文件。例如:

android.sources {
    main {
        jni.source {
            srcDirs = ["~/srcs/jni"]
            exclude "**/win.cpp"
        }
    }
}
登录后复制

旧版插件的解决方法

不幸的是,对于旧版本的 DSL,无法直接定义 LOCAL_SRC_FILES。相反,建议使用传统的 Android.mk 文件来管理您的原生源文件。

您可以禁用默认的 NDK 构建任务并注入自定义任务来编译您的原生源文件:

def ndkBuild = android.ndkDirectory
import org.apache.tools.ant.taskdefs.condition.Os
if (Os.isFamily(Os.FAMILY_WINDOWS)) {
    ndkBuild += '.cmd'
}

task buildNative(type: Exec, description: 'Compile JNI source via NDK') {
    commandLine '$ndkBuild', 'NDK_PROJECT_PATH="$jniSrc/..'
}

task cleanNative(type: Exec, description: 'Clean JNI object files') {
    commandLine '$ndkBuild', 'clean', 'NDK_PROJECT_PATH="$jniSrc/..'
}
clean.dependsOn 'cleanNative'
tasks.withType(JavaCompile) {
    compileTask -> compileTask.dependsOn buildNative
}
tasks.all {
    task -> if (task.name.contains('compileDebugNdk') || task.name.contains('compileReleaseNdk')) task.enabled = false
}
登录后复制

注意事项

请注意,此解决方法可能不会产生可调试的设置。为了解决这个问题,您可以使用 ndk-build 构建一个静态库并将其与必要的对象链接以从库中提取符号。

以上是如何在 Android NDK DSL 中定义 LOCAL_SRC_FILES?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板