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

时间:2016-12-22 09:58:46

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

我正在使用Android Studio 2.2,并设置Gradle通过CMake使用NDK构建c / c ++源代码。

现在我想为buildType" debug"禁用NDK构建。对于buildType"发布"我想保留它。

目标是在构建服务器上编译NDK源代码(使用"发布")但是为开发人员禁用它(使用" 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"?

  2. 禁用NDK构建(externalNativeBuild)
  3. 其他开发人员未安装NDK(local.properties 没有 ndk.dir = PATH_TO_NDK)。这可以配置吗?

  4. 提前致谢

    编辑:

    此externalNativeBuild必须使用&com; android.library' -module配置,而不是com.android.application' -module。

2 个答案:

答案 0 :(得分:3)

以下是我如何解决它。

这样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"
}

答案 1 :(得分:0)

关于#1,如果我理解正确,你想根据buildType做某些事情(或跳过)。如果是这样,您可以查看有关此主题的众多讨论之一,例如:get current buildType

关于#2,你不清楚你想要什么。如果您正在寻找在local.properties中设置NDK路径的替代方法,则可以通过ANDROID_NDK_HOME环境变量进行设置。如果要防止gradle失败,请检查build.gradle脚本的相关位置是否存在ndk.dir(使用properties.getProperty(' ndk.dir'))。