2015-12-10 2 views
0

Я нахожусь на ранних этапах миграции андроид проекта Gradle, используя экспериментальный плагин 0.4.0Gradle использует различные задачи/аргументы для каждого типа сборки

В рамках процесса сборки у меня есть ряд скрипты, которые должны выполняться до компиляции моего кода/сборки apk. Аргументы или задачи сами по себе будут отличаться для сборки отладки или выпуска.

Я изо всех сил пытаюсь найти прямой способ достичь этого.

Я все это отбросил до простого проекта приветствия, когда я это понял.

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, на основе создания или отладки?

Извините, если мне не хватает чего-то очевидного, я довольно новичок в использовании градиента.

ответ

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 
} 
Смежные вопросы