如何在 Gradle NDK 构建中获得要编译的文件的白名单
How to have a white list of files to be compiled in Gradle NDK build
我需要将 Android 应用程序从 Ant 转换为 Gradle。此应用程序使用跨平台 C++ 库。对于 Ant,我们使用 make (.mk) 文件来决定编译哪些文件来创建 JNI 库。我正在尝试使用新的实验性 Gradle 版本 (gradle-experimental:0.7.0-rc1) 来做一些与 Ant 正在做的事情相当的事情,并将我编译的文件列入白名单。
问题是根据documentation,这是做不到的。
sources.main {
jni {
source {
include "someFile.cpp" // This is ignored.
}
}
}
有人对此有解决方法吗?
一个相对简单的方法是继续使用现有的 .mk makefile 并从 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 的 "Project Structure" 对话框(文件 -> 项目结构)中设置 NDK 安装路径,或者通过设置 ANDROID_NDK_HOME
环境变量命令行。
我需要将 Android 应用程序从 Ant 转换为 Gradle。此应用程序使用跨平台 C++ 库。对于 Ant,我们使用 make (.mk) 文件来决定编译哪些文件来创建 JNI 库。我正在尝试使用新的实验性 Gradle 版本 (gradle-experimental:0.7.0-rc1) 来做一些与 Ant 正在做的事情相当的事情,并将我编译的文件列入白名单。
问题是根据documentation,这是做不到的。
sources.main {
jni {
source {
include "someFile.cpp" // This is ignored.
}
}
}
有人对此有解决方法吗?
一个相对简单的方法是继续使用现有的 .mk makefile 并从 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 的 "Project Structure" 对话框(文件 -> 项目结构)中设置 NDK 安装路径,或者通过设置 ANDROID_NDK_HOME
环境变量命令行。