如何为某些构建变体禁用 Android NDK 构建
How to disable Android NDK build for some build variant
我正在使用 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' 模块。
关于#1,如果我理解正确的话,您想根据 buildType 做(或跳过)某些事情。如果是这样,您可以查看关于此主题的众多讨论之一,例如:get current buildType。
关于#2,你想要的不是很清楚。如果您正在寻找在 local.properties 中设置 NDK 路径的替代方法,您可以通过 ANDROID_NDK_HOME 环境变量进行设置。如果您想防止 gradle 失败,请检查 ndk.dir 是否存在于您的 build.gradle 脚本的相关位置(使用 properties.getProperty('ndk.dir'))。
我是这样解决的。
这种方式 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"
}
我正在使用 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' 模块。
关于#1,如果我理解正确的话,您想根据 buildType 做(或跳过)某些事情。如果是这样,您可以查看关于此主题的众多讨论之一,例如:get current buildType。
关于#2,你想要的不是很清楚。如果您正在寻找在 local.properties 中设置 NDK 路径的替代方法,您可以通过 ANDROID_NDK_HOME 环境变量进行设置。如果您想防止 gradle 失败,请检查 ndk.dir 是否存在于您的 build.gradle 脚本的相关位置(使用 properties.getProperty('ndk.dir'))。
我是这样解决的。
这种方式 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"
}