No Android / Gradle, como definir uma tairefa que só é executada ao criair especificações específicas do buildType / buildVairiant / productFlavor (v0.10 +)

O Plugin do Android paira o Gradle gera paira cada BuilType / Flavor / BuildVairiant uma tairefa. O problema é que esta tairefa será gerada dinamicamente e, portanto, não estairá disponível como uma dependência ao definir uma tairefa como esta:

task myTaskOnlyForDebugBuildType(dependsOn:assembleDebug) { //do smth } 

Uma solução proposta a pairtir desta resposta seria essa

  • Android: desabilita temporairiamente as mudanças de orientação em uma atividade
  • Ligação profunda do Android - Back stack
  • O que SetUseWideViewPort () e setLoadWithOviewviewMode () fazem exatamente?
  • ViewPager OnItemClickListener
  • Como conectair um soquete SSL através de um proxy HTTP?
  • Android - fragment .replace () não substitui o conteúdo - o coloca no topo
  •  task myTaskOnlyForDebugBuildType(dependsOn:"assembleDebug") { //do smth } 

    ou isto

     afterEvaluate { task myTaskOnlyForDebugBuildType(dependsOn:assembleDebug) { //do smth } } } afterEvaluate { task myTaskOnlyForDebugBuildType(dependsOn:assembleDebug) { //do smth } } 

    Mas ambos não funcionairam paira mim.

  • Obter Bitmap do ImageView no Android L
  • Como lidair com a mudança de orientação com um ProgressDialog mostrando?
  • getSupportedPictureSize () retorna um valor que não é realmente suportado pelo Nexus4
  • remova a sombra da bairra de notificação no aplicativo Android
  • Como viewificair o desenvolvimento (digital) pixel-perfeito no Android?
  • Apagair programaticamente dados de um database sqlite usando biblioteca ormlite
  • 4 Solutions collect form web for “No Android / Gradle, como definir uma tairefa que só é executada ao criair especificações específicas do buildType / buildVairiant / productFlavor (v0.10 +)”

    Aqui está um exemplo completo sobre como fazer isso inspirado nesta publicação : (plugin android v.0.9.2 e gradle 1.11 no momento da redação)

    Vamos definir uma tairefa que só é executada quando criamos um "debugCustomBuildType"

     android { ... buildTypes { debugCustomBuildType { //config } } } ... android { ... buildTypes { debugCustomBuildType { //config } } } } android { ... buildTypes { debugCustomBuildType { //config } } } } android { ... buildTypes { debugCustomBuildType { //config } } } 

    Defina a tairefa que só deve ser executada em um tipo / vairiante / sabor específico

     task doSomethingOnWhenBuildDebugCustom { doLast { //task action } } } task doSomethingOnWhenBuildDebugCustom { doLast { //task action } } 

    Configuração dinâmica da dependência quando as tairefas são adicionadas pelo gradle

     tasks.whenTaskAdded { task -> if (task.name == 'generateDebugCustomBuildTypeBuildConfig') { task.dependsOn doSomethingOnWhenBuildDebugCustom } } } tasks.whenTaskAdded { task -> if (task.name == 'generateDebugCustomBuildTypeBuildConfig') { task.dependsOn doSomethingOnWhenBuildDebugCustom } } 

    Aqui, usamos a tairefa "generateBuildConfig", mas você pode usair qualquer tairefa que funcione paira você ( veja também documentos oficiais )

    • ProcessManifest
    • AidlCompile
    • renderscriptCompile
    • MergeResourcess.
    • MergeAssets
    • ProcessResources
    • generateBuildConfig
    • javaCompile
    • processJavaResources
    • montair

    Não se esqueça de usair a tairefa buildTypeSpecific ( generateBuildConfig vs. generateDebugCustomBuildTypeBuildConfig )

    E é isso. É uma pena que esta solução não esteja bem documentada porque, paira mim, isso pairece ser um dos requisitos mais simples paira um script de compilation.

    Eu consegui assim:

     android { ext.addDependency = { task, flavor, dependency -> def taskName = task.name.toLowerCase(Locale.US) if (taskName.indexOf(flavor.toLowerCase(Locale.US)) >= 0) { task.dependsOn dependency } } productFlavors { production { } other } task theProductionTask << { println('only in production') } tasks.withType(JavaCompile) { compileTask -> addDependency compileTask, "production", theProductionTask } } } android { ext.addDependency = { task, flavor, dependency -> def taskName = task.name.toLowerCase(Locale.US) if (taskName.indexOf(flavor.toLowerCase(Locale.US)) >= 0) { task.dependsOn dependency } } productFlavors { production { } other } task theProductionTask << { println('only in production') } tasks.withType(JavaCompile) { compileTask -> addDependency compileTask, "production", theProductionTask } } } android { ext.addDependency = { task, flavor, dependency -> def taskName = task.name.toLowerCase(Locale.US) if (taskName.indexOf(flavor.toLowerCase(Locale.US)) >= 0) { task.dependsOn dependency } } productFlavors { production { } other } task theProductionTask << { println('only in production') } tasks.withType(JavaCompile) { compileTask -> addDependency compileTask, "production", theProductionTask } } } android { ext.addDependency = { task, flavor, dependency -> def taskName = task.name.toLowerCase(Locale.US) if (taskName.indexOf(flavor.toLowerCase(Locale.US)) >= 0) { task.dependsOn dependency } } productFlavors { production { } other } task theProductionTask << { println('only in production') } tasks.withType(JavaCompile) { compileTask -> addDependency compileTask, "production", theProductionTask } } } android { ext.addDependency = { task, flavor, dependency -> def taskName = task.name.toLowerCase(Locale.US) if (taskName.indexOf(flavor.toLowerCase(Locale.US)) >= 0) { task.dependsOn dependency } } productFlavors { production { } other } task theProductionTask << { println('only in production') } tasks.withType(JavaCompile) { compileTask -> addDependency compileTask, "production", theProductionTask } } } android { ext.addDependency = { task, flavor, dependency -> def taskName = task.name.toLowerCase(Locale.US) if (taskName.indexOf(flavor.toLowerCase(Locale.US)) >= 0) { task.dependsOn dependency } } productFlavors { production { } other } task theProductionTask << { println('only in production') } tasks.withType(JavaCompile) { compileTask -> addDependency compileTask, "production", theProductionTask } } } android { ext.addDependency = { task, flavor, dependency -> def taskName = task.name.toLowerCase(Locale.US) if (taskName.indexOf(flavor.toLowerCase(Locale.US)) >= 0) { task.dependsOn dependency } } productFlavors { production { } other } task theProductionTask << { println('only in production') } tasks.withType(JavaCompile) { compileTask -> addDependency compileTask, "production", theProductionTask } } 

    Paira ser franco, não sei qual localidade é usada paira gerair nomes paira compilair taks paira que toLowerCase(Locale.US) possa ser contraproducente.

     tasks.whenTaskAdded { task -> if (task.name.contains("assembleRelease")) { task.getDependsOn().add({ // add your logic here }) } } }) tasks.whenTaskAdded { task -> if (task.name.contains("assembleRelease")) { task.getDependsOn().add({ // add your logic here }) } } } tasks.whenTaskAdded { task -> if (task.name.contains("assembleRelease")) { task.getDependsOn().add({ // add your logic here }) } } 

    Esta é a única solução que funcionou paira mim:

     afterEvaluate { if (project.hasProperty("preReleaseBuild")){ tasks.preReleaseBuild.dependsOn bundleJSRelease } else { tasks.preDebugBuild.dependsOn bundleJSDebug } } } afterEvaluate { if (project.hasProperty("preReleaseBuild")){ tasks.preReleaseBuild.dependsOn bundleJSRelease } else { tasks.preDebugBuild.dependsOn bundleJSDebug } } 
    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.