我有一個多風格,多構建類型的android項目,我想集成NewRelic插件。但我必須僅將其應用於其中一個客戶,因此僅適用於一種產品風味。
NewRelic使用插件,如果我在那裏插入插件,插件會生成其他類型的代碼,這對我們來說是不允許的。如何將插件僅應用於Gradle中的一種風格?
所以我的問題是:我怎樣才能在gradle文件中使用apply plugin: something
命令只應用於我的其中一種口味?
我有一個多風格,多構建類型的android項目,我想集成NewRelic插件。但我必須僅將其應用於其中一個客戶,因此僅適用於一種產品風味。
NewRelic使用插件,如果我在那裏插入插件,插件會生成其他類型的代碼,這對我們來說是不允許的。如何將插件僅應用於Gradle中的一種風格?
所以我的問題是:我怎樣才能在gradle文件中使用apply plugin: something
命令只應用於我的其中一種口味?
我找到了一個解決方案,但它不是迄今爲止最好的解決方案。 所以我不再確定,我最初想做的事情是可能的。 gradle文件評估和正確的味道和構建類型的選擇是在gradle構建的不同階段,所以我所做的是:
我使用命令行中的構建參數。當參數設置爲true時,我應用插件,當它甚至不在那裏時,我也應用它(用於IDE構建)。 我使用Jenkins,所以我可以在構建作業中編寫該參數。
的build.gradle文件:
// First we have to attach a task to the project, which will be running first
gradle.projectsEvaluated {
preBuild.dependsOn(applyNewRelicByProperty)
}
// Then check on the parameter, which comes from the command line
task applyNewRelicByProperty {
if(!project.hasProperty('compileNewRelic')) {
// NewRelic on: 'compileNewRelic' property not set, so running from IDE.
apply plugin: 'newrelic'
} else if(project.hasProperty('compileNewRelic') && project.getProperties().get('compileNewRelic').equals('true')) {
// NewRelic on: 'compileNewRelic' property is set and it is 'true'.
apply plugin: 'newrelic'
} else {
// NewRelic off
println("No NewRelic")
}
}
而且你必須通過這個來運行gradle這個身材:
assembleYourApp -PcompileNewRelic=true
def fl
初始化變量,你香精(和/或建造)
productFlavors {
freeFlavour {
(...)
fl = "free"
}
paidFlavour {
(...)
fl = "paid"
}
}
使用if語句 -
if (fl == "free") { apply plugin: something }
這似乎並不奏效。在我的情況下(假設我正在調用assembleFree),兩個塊都被執行,所以fl的值是最後聲明的flavor的名稱。任何其他想法? – daemontus
使用此代碼:
if (!getGradle().getStartParameter().getTaskRequests()
.toString().contains("Develop")){
apply plugin: 'com.google.gms.google-services'
}
此代碼有效。但是你需要注意味道名的第一個字母應該是大寫字母 –
這並不爲我今天的工作。顯然,即使在評估項目之前,'build.gradle'解析器也會查找'apply'語句,從而使'if'檢查無效。 – Sebastiano