Android / Gradle:根据构建类型有条件地应用插件

时间:2016-03-16 15:15:56

标签: android gradle android-gradle build.gradle gradle-plugin

我想制作类似(伪代码)的东西:

if (BuildType == "release"){
    apply plugin: 'testfairy'
} else if (BuildType == "debug"){
    apply plugin: 'io.fabric'
}

这个想法是基于构建类型,应用(或不应用)插件。怎么做?

5 个答案:

答案 0 :(得分:8)

使用Gradle 4.6,以下工作:

if (getGradle().getStartParameter().getTaskRequests().toString().contains("Release")) {
    apply plugin: 'testfairy'
} else if (getGradle().getStartParameter().getTaskRequests().toString().contains("Debug")) {
    apply plugin: 'io.fabric'
}

答案 1 :(得分:5)

基于Stefan Oehme,Gradle核心开发人员,said

  

插件无法仅应用于项目的一部分"。它们是否适用。这会成为一个问题的用例是什么?

所以,答案是这是不可能的。我已经暴露了my use cases这就成了一个问题,我会看到你对此有何看法。

答案 2 :(得分:4)

这是我使用的解决方案。我们的想法是引入一个Env变量,并仅在某些特定的环境中应用该插件。

if (System.getenv("PROJECT_ENV") == "Release") {
    apply plugin: 'your plugin'
}

答案 3 :(得分:0)

还记得maven个人资料吗?您可以使用从gradle-fury借来的这个片段做类似的事情

在您的构建文件中 if (project.hasProperty('profile') && project.profile.split(',').contains("ci")) { //do something }

然后运行它 gradlew -Pprofile=ci

这里有一个完整的例子https://github.com/gradle-fury/gradle-fury/blob/develop/build.gradle

免责声明,我从事暴虐活动。科学

答案 4 :(得分:0)

这是我没有使应用程序崩溃的解决方案。最终以未找到类的异常调用该类时,其他解决方案也崩溃了。

def tasks = gradle.startParameter.taskNames[0] ?: ""
if (tasks.toLowerCase().contains("prod")) {
    println "Firebase-Performance pluign applied..."
    apply plugin: 'com.google.firebase.firebase-perf'
}