28

我有一個多風格,多構建類型的android項目,我想集成NewRelic插件。但我必須僅將其應用於其中一個客戶,因此僅適用於一種產品風味。
NewRelic使用插件,如果我在那裏插入插件,插件會生成其他類型的代碼,這對我們來說是不允許的。如何將插件僅應用於Gradle中的一種風格?

所以我的問題是:我怎樣才能在gradle文件中使用apply plugin: something命令只應用於我的其中一種口味?

回答

4

我找到了一個解決方案,但它不是迄今爲止最好的解決方案。 所以我不再確定,我最初想做的事情是可能的。 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 
+0

這並不爲我今天的工作。顯然,即使在評估項目之前,'build.gradle'解析器也會查找'apply'語句,從而使'if'檢查無效。 – Sebastiano

11
  1. 定義變量 - def fl
  2. 初始化變量,你香精(和/或建造)

    productFlavors { 
    
          freeFlavour { 
           (...) 
           fl = "free" 
          } 
    
          paidFlavour { 
           (...) 
           fl = "paid" 
          } 
         } 
    
  3. 使用if語句 -

    if (fl == "free") { apply plugin: something }

+5

這似乎並不奏效。在我的情況下(假設我正在調用assembleFree),兩個塊都被執行,所以fl的值是最後聲明的flavor的名稱。任何其他想法? – daemontus

14

使用此代碼:

if (!getGradle().getStartParameter().getTaskRequests() 
     .toString().contains("Develop")){ 
    apply plugin: 'com.google.gms.google-services' 
} 
+0

此代碼有效。但是你需要注意味道名的第一個字母應該是大寫字母 –

相關問題