我正在使用 Android Studio 2.2 并设置了 Gradle 以通过 CMake 使用 NDK 构建 c/c++ 源代码。
现在我想禁用 buildType“debug”的 NDK 构建。对于 buildType“release”,我想保留它。
目标是让 NDK 源代码在构建服务器上编译(使用“release”),但对开发人员禁用它(使用“debug”)。
这是当前正在使用的 build.gradle 文件:
android {
externalNativeBuild {
cmake {
path "CMakeLists.txt"
}
}
defaultConfig {
externalNativeBuild {
cmake {
arguments "-DANDROID_TOOLCHAIN=clang"
cppFlags "-std=c++14"
}
}
ndk {
abiFilters 'armeabi-v7a', 'x86'
}
}
buildTypes {
release {
externalNativeBuild {
cmake {
arguments "-DANDROID_TOOLCHAIN=clang"
cppFlags "-std=c++14"
}
}
ndk {
abiFilters 'armeabi-v7a'
}
}
}
}
如何为 defaultConfig 或 buildType“debug”禁用 NDK 构建 (externalNativeBuild)?
其他开发者不会安装 NDK(local.properties without ndk.dir=PATH_TO_NDK)。这可以配置吗?
提前致谢
编辑:
此 externalNativeBuild 必须配置为“com.android.library”模块,而不是“com.android.application”模块。
最佳答案
我是这样解决的。
通过这种方式,Gradle 构建适用于安装和未安装 NDK 的开发人员(以及在构建服务器上),这就是我们的目标。
/*
* As soon as Gradle is linked to the externalNativeBuild (cmake / ndkBuild) with a path to
* CMakeLists.txt / Android.mk, the ndk.dir from local.properties file or the ANDROID_NDK_HOME
* environment variable needs to be set, otherwise gradle fails.
* E.g.:
externalNativeBuild {
cmake {
path "CMakeLists.txt"
}
}
*/
// Only enable externalNativeBuild on machines with NDK installed -> valid ndkDir
def ndkDir = project.android.ndkDirectory;
if (ndkDir != null && !ndkDir.toString().isEmpty()) {
externalNativeBuild.cmake.path = "CMakeLists.txt"
}
关于c++ - 如何为某些构建变体禁用 Android NDK 构建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41280368/