2015-12-10 56 views
0

我在遷移的Android項目到搖籃,用實驗插件的早期階段是0.4.0搖籃使用不同的任務/參數每個構建類型

作爲構建過程的一部分,我有很多的在編譯我的代碼/構建apk之前應該運行的腳本。調試或發佈版本的參數或任務本身會有所不同。

我正在努力尋找一個簡單的方法來實現這一點。

我已經把所有事情都帶回了一個簡單的hello世界項目,而我知道了這一點。

buildscript { 
    repositories { 
     jcenter() 
    } 

    dependencies { 
     classpath 'com.android.tools.build:gradle-experimental:0.4.0' 
    } 
} 

apply plugin: 'com.android.model.application' 

model { 
    android { 
     compileSdkVersion = 23 
     buildToolsVersion = "23.0.2" 
    } 

    android.buildTypes { 
     debug { 
      // 
     } 
     release { 
      //runProguard, sign etc. 
     } 
    } 

    android.productFlavors { 
     create("free") 
     { 
      applicationId = "com.example.app.free" 
      versionName = "1.0-free" 
     } 
     create("full") 
     { 
      applicationId = "com.example.app.full" 
      versionName = "1.0-full" 
     } 
    } 
} 

repositories { 
    jcenter() 
} 

dependencies { 
    compile 'joda-time:joda-time:2.7' 
} 

task runScript(type: Exec) { 
    executable "sh" 
    args "-c", "echo SomeScriptHere" 
} 

tasks.withType(JavaCompile) { 
    compileTask -> compileTask.dependsOn runScript 
} 

task wrapper(type: Wrapper) { 
    gradleVersion = '2.5' 
} 

理想我想基於構建沒有產生各種應用程序的類型由buildType(不productFlavor)本所要求的任務區分。

是否可以指定任務只應在發佈版或調試版上運行?

或者是有可能根據被釋放或調試版本定義不同的參數用於我的runScript任務?

道歉,如果我失去了一些明顯的東西,我很新使用gradle。

回答

0

使用onlyIf()會是一個選擇gradle docs here但不必定義屬性顯得尷尬尤其是作爲一個項目變得更大,更復雜。

ZXStudio有一個很好的博客帖子/示例here,而不是使用屬性或規則將迭代現有任務並基於buildType/flavor創建新任務。

因此,對於我原來的問題,答案意味着刪除上面的runScript任務並替換tasks.withType(JavaCompile),如下所示:

也可以擴展以匹配構建風格並適當地創建任務。

tasks.withType(JavaCompile) { 
    def newTaskName = "runScript_" + name; 
    def isDebug = false; 

    if(name.contains("Debug")) 
    { 
     isDebug = true; 
    } 

    //Create a new task 
    tasks.create(newTaskName, Exec) { 
     if(isDebug) 
     { 
      executable "sh" 
      args "-c", "echo this is a DEBUG task" 
     } 
     else 
     { 
      executable "sh" 
      args "-c", "echo this is a RELEASE task" 
     } 
    } 

    dependsOn newTaskName 
}