Gruppieren weniger SourceSets mit genau derselben Konfiguration

Sagen wir, ich habe die folgendensourceSets:

sourceSets {
    flavor1 {
        assets.srcDirs = ['repo-assets/flavor1']
        res.srcDirs = ['repo-res/flavor1']
    }
    flavor2 {
        assets.srcDirs = ['repo-assets/flavor2']
        res.srcDirs = ['repo-res/flavor2']
    }
    flavor3 {
        assets.srcDirs = ['repo-assets/flavor1']
        res.srcDirs = ['repo-res/flavor1']
    }
    flavor4 {
        assets.srcDirs = ['repo-assets/flavor2']
        res.srcDirs = ['repo-res/flavor2']
    }
}

Falls du bemerkstflavor1 undflavor3 habe das gleiche srcDirs und @ auflavor2 undflavor4.

Trying Possibility # 1

Ich habe versucht herauszufinden, ob es einen Weg gibt, die Redundanz zu vermeiden, indem ich so etwas benutze:

sourceSets {
    flavor1, flavor3 {
        assets.srcDirs = ['repo-assets/flavor1']
        res.srcDirs = ['repo-res/flavor1']
    }
    flavor2, flavor4 {
        assets.srcDirs = ['repo-assets/flavor2']
        res.srcDirs = ['repo-res/flavor2']
    }
}

Das oben genannte funktioniert nicht (bereits ausprobiert). Auf der Suche nach etwas Ähnlichem, damit ich nur einen gemeinsamen Satz von @ bereitstellen kasourceDirs für eine Reihe von Aromen. Hat jemand versucht, etwas Ähnliches zu tun und kann ein paar Hinweise geben?

Trying Possibility # 2

Hat der Name vonsourceSets Müssen die gleichen sein wie die von Aromen?

Kann ich das @ nennsourceSets separat und ordnen Sie sie dannproductFlavors so was

productFlavors {
    flavor1 {
      sourceset = "src1"
    }
    flavor2 {
      sourceset = "src2"
    }
    flavor3 {
      sourceset = "src1"
    }
    flavor4 {
      sourceset = "src2"
    }
}

sourceSets {
    src1 {
    }
    src2 {
    }
}
Trying Possibility # 3

Können die Sourcesets über Tasks dynamisch zugewiesen werden, um dasselbe zu erreichen?

AKTUALISIERE

Douglas's Antwort Art half mir sehr nah an das, was ich suchte schließlich (Reduzierung des Codes in build.gradle). Er benutzte die Möglichkeit Nr. 3 oben. Vielen Dank, Douglas! Jede bessere Alternative von Kopfgeldjägern ist immer noch willkommen (etwas näher an den Möglichkeiten Nr. 1 und Nr. 2 oben). Wenn nichts aufkommt, ist Douglas bereits Kopfgeld, wenn die Frist endet, da ich seine Antwort akzeptiert habe. Aber ich werde trotzdem optimistisch bleiben, eine bessere Alternative zu finden.

Antworten auf die Frage(6)

Ihre Antwort auf die Frage