2015-02-05 9 views
8

Nel mio codice ho determinati modelli tutti derivanti da una base di codice. Per ogni modello voglio aggiungere dimensioni specifiche. Utilizzando dimensioni sapore e sapori dei prodotti che ho raggiunto questo codice:Combinazioni di prodotti specifici per Android Gradle

flavorDimensions "template", "color" 

productFlavors { 

    templateA { 
     applicationId "com.templatea" 
     versionCode 1 
     versionName "1.0.0" 

     flavorDimension "template" 
    } 


    templateB { 
     applicationId "com.templateb" 
     versionCode 1 
     versionName "1.0.0" 

     flavorDimension "template" 
    } 

    templateC { 
     applicationId "com.templatec" 
     versionCode 1 
     versionName "1.0.0" 

     flavorDimension "template" 

    } 

    blue { 
     applicationId "com.blue" 
     versionCode 1 
     versionName "1.0.0" 

     flavorDimension "color" 
    } 

    green { 
     applicationId "com.green" 
     versionCode 1 
     versionName "1.0.0" 

     flavorDimension "color" 
    } 

    orange { 
     applicationId "com.orange" 
     versionCode 1 
     versionName "1.0.0" 

     flavorDimension "color" 
    }  

che dà il risultato (ho ignorato i buildtypes):

templateABlue

templateAGreen

templateAOrange

templateBBlue templateBGreen

templateBOrange templateCBlue

templateCGreen

templateCOrange

Naturalmente questo è il comportamento previsto, ma vorrei ottenere qualcosa di simile:

TemplateA

templateBBlue

templateBOrange

templateC

templateCGreen

Così ogni modello deriva da una base codice principale e ogni modello può avere diverse varianti derivanti dalla loro base di codice. Esiste un modo per specificare quali combinazioni di dimensioni sapore possono essere utilizzate o un modo per escludere le combinazioni che non desidero? Per essere chiari, ogni modello può funzionare senza specificare un colore.

Spero che la mia domanda sia chiara. Grazie in anticipo.

risposta

6

È possibile utilizzare Gradle variantFilter per escludere alcune configurazioni

Ad esempio:

productFlavors { 

    templateB { 
     applicationId "com.templateb" 
     versionCode 1 
     versionName "1.0.0" 

     flavorDimension "template" 
    } 

    templateC { 
     applicationId "com.templatec" 
     versionCode 1 
     versionName "1.0.0" 

     flavorDimension "template" 

    } 

    blue { 
     applicationId "com.blue" 
     versionCode 1 
     versionName "1.0.0" 

     flavorDimension "color" 
    } 
} 

android.variantFilter { variant -> 
    if(variant.getFlavors().get(0).name.equals('templateC') 
      && variant.getFlavors().get(1).name.equals('blue')) { 
     variant.setIgnore(true); 
    } 
} 
+0

che funziona come un fascino. Grazie, Vincent! –

Problemi correlati