如何在 Gradle NDK 构建中拥有要编译的文件白名单



我需要将Android应用程序从Ant转换为Gradle。此应用程序使用跨平台C++库。对于 Ant,我们使用 make (.mk) 文件来决定编译哪些文件来创建 JNI 库。我正在尝试使用新的实验性 Gradle 版本 (gradle-experimental:0.7.0-rc1) 来执行与 Ant 正在做的事情相当的操作,并将我编译的文件列入白名单。

问题是根据文档,这无法完成。

    sources.main {
        jni {
            source {
                include "someFile.cpp"  // This is ignored.
            }
        }
    }

有人对此有解决方法吗?

一个相对简单的方法是继续使用你现有的 .mk makefiles,并从 Gradle 调用 ndk-build,如下所示:

// Call external ndk-build(.cmd) script to build the native code
task ndkBuild(type: Exec) {
    def ndkBuildExt = Os.isFamily(Os.FAMILY_WINDOWS) ? ".cmd" : ""
    commandLine "ndk-build${ndkBuildExt}", '-C', file('.').absolutePath,
            '-j', Runtime.runtime.availableProcessors()
}
tasks.withType(JavaCompile) {
    compileTask -> compileTask.dependsOn ndkBuild
}

此方法要求在 Android Studio 的"项目结构"对话框(文件>项目结构)中或通过在命令行上设置 ANDROID_NDK_HOME 环境变量来设置 NDK 安装路径。

最新更新