2017-04-26 2 views
0

Mein Android-Projekt verschiedene Produkte Aromen konfiguriert hat:Wie bestimmte Gradle-Aufgaben filtern und ausführen?

productFlavors { 
    devtracking { 
     dimension trackingFlavorDimension 
    } 

    livetracking { 
     dimension trackingFlavorDimension 
    } 

    stagingwebservice { 
     dimension webserviceFlavorDimension 
    } 

    livewebservice { 
     dimension webserviceFlavorDimension 
    } 

    playstore { 
     dimension brandDimension 
    } 

    fdroid { 
     dimension brandDimension 
    } 
} 

Wie kann ich eine Aufgabe schreiben, die release Build für den devtracking Geschmack nur baut? Der "Filter" ist fertig - wie kann ich die gefilterten Aufgaben tatsächlich ausführen? Beachten Sie, dass der "Filter" gerade zur Konfigurationszeit ausgeführt wird.

task assembleDevtrackingRelease { 
    description "Assembles all Devtracking release builds." 
    group = "Build" 
    android.applicationVariants.all { variant -> 
     if (variant.name.contains("DevtrackingRelease")) { 
      println(variant.name) 
      // TODO Execute this variant 
     } 
    } 
} 

Antwort

0

Mit großer Hilfe von Selvin und mirceanis komme ich endlich mit dieser Lösung:

// Creates a parent task for a set of sub tasks. 
// Sub tasks are collected based on the given task name part. 
def createVariantBatchTask(taskNamePart, taskPrefix = "assemble", taskGroup = "Build") { 
    String taskName = "${taskPrefix}${taskNamePart.capitalize()}" 
    Task task = tasks.create(taskName) 
    task.description "${taskPrefix.capitalize()}s all $taskName builds." 
    task.group taskGroup 

    android.applicationVariants.all { variant -> 
     if (variant.name.toLowerCase().contains(taskNamePart.toLowerCase())) { 
      Task variantTask = tasks.findByName("${taskPrefix}${variant.name.capitalize()}") 
      if (variantTask != null) { 
       task.dependsOn variantTask 
      } 
     } 
    } 
} 

createVariantBatchTask("devtrackingRelease") 
createVariantBatchTask("devtrackingDebug") 

Mögliche Verbesserungen: Bewegen in eine Klasse benutzerdefinierte Aufgabe in buildSrc.

0
task installDevtrackingReleaseFlavors() { 
    android.applicationVariants.all { v -> 
     if (v.name.endsWith('DevtrackingRelease')) { 
      String name = v.name.capitalize() 
      dependsOn "install$name" 
     } 
    } 
} 
+0

Ich möchte keine 'Installation' Aufgabe. Ich möchte es nicht automatisch ausführen, wenn ich './gradlew Tasks 'aufruft. – JJD

+1

es sieht aus wie ein guter Track ... ändern zu Assembly Assembly dann diese Aufgabe sollte alle 'assembleXXXXXXDevtrackingRelease' Aufgaben ausführen ... diese Antwort scheint wie Kopie von [Gradle Rezepte für Android-Code] (https://books.google.pl /books?id=10pODAAAQBAJ&pg=PA79&lpg=PA79&dq=android.applicationVariants.all+%7B+v + -% 3E + if + (v.name.endsWith() +% 7B + Zeichenfolge + Name +% 3D + v.name.capitalize() + DependsOn + $ name installieren +% 7D +% 7D & source = bl & OTS = qKM0lIEMhK & sig = iknp-r56E9kfKSFRLaqPc2OH4hE & hl = pl & sa = X & ved = 0ahUKEwjNzu__5sHTAhXJ1xQKHScECh8Q6AEIIzAA # v = OnePage & q & f = false) ohne Änderung für Ihre requeriments – Selvin

+0

ich verstehe nicht: die Linie führt die Variante bestimmte Aufgabe? Außerdem gibt das Ebook an, dass ich einen "doLast" -Block hinzufügen muss, um Befehle auszuführen. – JJD

Verwandte Themen