c++ - 如何为某些构建变体禁用 Android NDK 构建

标签 c++ android-ndk android-gradle-plugin build.gradle gradle-plugin

我正在使用 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'
            }
        }
    }
}
  1. 如何为 defaultConfig 或 buildType“debug”禁用 NDK 构建 (externalNativeBuild)?

  2. 其他开发者不会安装 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/

相关文章:

android - 如何在 Android/Linux 上构建 OpenSSL?

android - 无法添加名称为 'testCompile' 的配置,因为具有该名称的配置已存在

c++ - 销毁对象和释放关联内存有什么区别

c++ - 重新启动流式 OpenAL 源代码?

c++ - 将模板专门化为嵌套类类型

android - 有没有一种简单的方法来检测 jni 在 android 应用程序中的使用?

android - Galaxy Nexus - 安装时选择了错误的 CPU ABI

android - 如何在Gradle最新版本4.1中将本地库添加到产品 flavor

android - 如何在终端中使用不同的 SIGN 凭据构建 apk

c++ - 链接到从源代码构建的 OpenCV 时出现 Cmake 问题