我想制作类似(伪代码)的东西:
if (BuildType == "release"){
apply plugin: 'testfairy'
} else if (BuildType == "debug"){
apply plugin: 'io.fabric'
}
这个想法是基于构建类型,应用(或不应用)插件。怎么做?
答案 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'
}