2015-05-21 4 views
5

Scenario: abbiamo un'app Android con alcuni componenti opzionali diversi che vorremmo poter includere/escludere in base alle esigenze e alle licenze del cliente. È possibile includere progetti specifici basati su un parametro di costruzione e senza creare tutte le permutazioni come sapori di build?Include progetto in gradle build

./gradlew assembleRelease -PincludeFeatureA=true -PincludeFeatureB=false 

ho pensato che avrei potuto fare qualcosa di simile in dipendenze:

dependencies { 
    if(includeFeatureA){ 
    compile project(':featureAEnabled')  
    } else { 
    compile project(':featureADisabled') 
    } 
} 

Ma questo non sembra funzionare.

Aggiornamento: Considerando il numero di funzionalità commutabili, l'uso di varianti di build esplicite per ogni permutazione è complicato.

Ad esempio, dato 3 caratteristiche Toggle-in grado, io non voglio avere a costruire sapori come questo:

Feature1 
Feature1-Feature2 
Feature1-Feature3 
Feature1-Feature2-Feature3 
Feature2 
Feature2-Feature3 
... 

risposta

5

La soluzione per il mio scenario è stato quello di spostare il if dichiarazione fuori dalle dipendenze:

Supponendo che la riga di comando:

gradlew assembleRelease -PincludeFeatureA 

All'inizio del build.gradle progetto, includo in questo modo:

def featureA_Proj=':featureA_NotIncluded' 

Poi ho un compito come questo:

task customizeFeatureA(){ 
    if(project.hasProperty('includeFeatureA')){ 
     println 'Including Feature A' 
     featureA_Proj=':featureA' 
    } 
} 

Infine, sotto le dipendenze, ho appena includono:

dependencies{ 
    include(featureA_Proj) 
} 
+0

Cosa succede se -PincludeFeatureA non viene fornito? – digitizedx

+0

Quindi il codice nel blocco "if" viene saltato – Ken

2

Utilizzare Build Variants. È possibile abilitare o disabilitare dipendenze sui progetti basati su di essi È anche possibile utilizzare asset separati o codice sorgente con essi.

+0

Aggiornato la mia domanda per quello che sto cercando di evitare. Ho familiarità con le varianti di costruzione, ma quando hai più di un paio di funzionalità modificabili, diventano ingombranti. Forse, c'è un modo per generare le varianti al momento della compilazione .. – Ken