如何在Android级配置中获取当前的buildType

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (47)

我想基于当前的buildType在Android Gradle项目中动态添加依赖项。我知道我可以在依赖中指定buildType

compile project(path: ':lib1', configuration: 'debug')

但是,如何使用当前的buildType来指定要导入的库的哪个变体,以便调试版或发布版自动导入库的调试版或发行版变体?我想要的是这样的(其中currentBuildType是包含当前使用的buildType的名称的变量):

compile project(path: ':lib1', configuration: currentBuildType)

我想要导入的库项目已经设置publishNonDefault true,所以所有buildType都已发布。

提问于
用户回答回答于

在Gradle的配置阶段,我无法找到一种干净的方式来获取当前的构建类型。相反,我为每种构建类型分别定义依赖关系,如下所示:

debugCompile project(path: ':lib1', configuration: 'debug')
releaseCompile project(path: ':lib1', configuration: 'release')

如果你有很多构建类型和许多项目依赖关系,这可能会变得非常冗长,但可以添加一个函数来使依赖项成为一行。你需要把它添加到你的主Gradle构建文件中:

subprojects {
    android {
        dependencies.metaClass.allCompile { dependency ->
            buildTypes.each { buildType ->
                "${buildType.name}Compile" project(path: ":${dependency.name}", configuration: buildType.name)
            }
        }
    }
}

然后你可以像这样在你的Gradle模块中添加项目依赖项:

allCompile project(':lib1')

用户回答回答于

添加一个任务,该任务取决于调用后的每个assembleXxx任务和属性设置

ext {
    currentConfig = ""
}
task generateConfigProperty(dependsOn: 'installDebug') {

    android.applicationVariants.all { variant ->
        variant.outputs.each { output ->

            def taskName = "taskindicate$output.name"
            task "$taskName"() << {
                project.ext.set("currentConfig", "$output.name")
            }
            output.assemble.dependsOn "taskindicate$output.name"
        }
    }

}

task getConfig(dependsOn: ['installDebug', 'generateConfigProperty']) << {
    println("My config is $currentConfig")
}

扫码关注云+社区