2014-06-19 5 views
25

Ho una suite di progetti che utilizzano lo stesso modulo, che contiene quasi tutto il codice attuale. Il progetto è di impostazione come:Come posso aggiungere aromi in un modulo con Android Studio?

project/ 
    - app/ 
    - build.gradle 
    - libraries/ 
    - module/ 
     - build.gradle 
    - build.gradle 
    - settings.gradle 

Le dipendenze sono tutte configurato correttamente, e posso creare ed eseguire applicazioni grande, tuttavia posso solo aggiungere sapori al progetto, che non è la soluzione ideale. settings.gradle contiene quanto segue:

include ':app', ':libraries:module' 

Nel file di build.gradle della directory app, ho aggiunto il seguente blocco:

productFlavors { 
    alpha 
    production 
} 

Utilizzando Gradle 0,11, questo si sincronizza e crea assembleAlphaDebug, assemblareAlphaRelease, assemblareProduzioneDebug, assemblareProdotto ionRelease attività. Quando tento di fare questo nel modulo, invece, ottengo l'errore:

No resource found that matches the given name (at 'theme' with value '@style/MyCustomTheme')

nel built app/src/main/AndroidManifest.xml. Per qualche motivo, il modulo non viene creato, quindi il tema personalizzato non funziona. Che cosa sto facendo di sbagliato?

+0

Secondo la mia comprensione anche l'app è un modulo come il "modulo" e il funzionamento dei moduli in qualsiasi modulo funzionerà. Che errore stai ricevendo durante la compilazione del codice. – pyus13

+0

@ pyus13 Se si guarda oltre, l'errore sembra essere un problema nel non trovare una risorsa per il sapore specificato. Ho un tema personalizzato impostato nel manifest dell'app, ma ottengo "Nessuna risorsa trovata che corrisponde al nome specificato (a" tema "con valore" @ style/MyCustomTheme ")'. – Phil

+0

è il tuo modulo è un progetto di libreria. Significa che ha "android-library" o "android" come plugin? – pyus13

risposta

61

Nel build.gradle del modulo biblioteca, avete bisogno di un paio di linee in più per dirgli di esportare i sapori e che costruiscono la variante da utilizzare di default se non specificato quando viene incluso da un altro modulo:

android { 
    defaultPublishConfig "productionRelease" 
    publishNonDefault true 

    productFlavors { 
     alpha { 
     } 
     production { 
     } 
    } 
} 

Il bit publishNonDefault è necessario solo se qualcuno vorrebbe dipendere da qualcosa di diverso dalla variante productionRelease. Presumibilmente questo è il caso se si impostano i multi-sapori nella libreria in primo luogo.

Ora, se si aggiunge una dipendenza da un altro modulo tramite questo nella sua build.gradle:

dependencies { 
    compile project(':module') 
} 

esso dipenderà dalla productionRelease variante per impostazione predefinita. Se desideri dipendere da una variante non predefinita:

dependencies { 
    compile project(path: ':module', configuration:'alphaDebug') 
} 
+0

Risolto il mio problema, grazie! – Phil

+1

Sarebbe possibile dipendere solo dal sapore e non dal tipo di costruzione? –

+0

Suppongo che intendessi il progetto '' '' '' '' – Blundell