Quindi questo è un po 'interessante, non sono sicuro di come impostarlo esattamente in Android Studio. Ho diversi moduli che hanno alcuni componenti riutilizzabili che uso in varie app, tuttavia sarebbe bello iniettare determinati temi nei componenti riutilizzabili usando i sapori. Piuttosto che creare un nuovo sapore per ogni componente per ogni app che scrivo, stavo pensando di avere 1 modulo Temi, che avrebbe un sapore per app che scrivo, che ha schemi di colori ... ecc. Qui è una specie di come lo voglio istituito:Modulo tema Android con sapori
App1: dependencies reusable lib1 reusable lib3 reusable lib4 theme - App1 flavor App2: dependencies reusable lib1 reusable lib2 reusable lib4 theme - App2 flavor
Ora io preferirei se le librerie riutilizzabili potrebbe semplicemente dipendere dal tema senza bisogno di sapere che sapore di costruire, e l'applicazione principale proj nella sua dipendenza dal tema potrebbe fare riferimento al sapore di quell'app (usando questa risposta https://stackoverflow.com/a/24316133/1316346). La ragione di ciò è che ogni modulo riutilizzabile non può avere una singola app nelle sue dipendenze build.gradle o potrebbe rompere altre app che fanno riferimento a esse. È anche noioso dover dare un sapore a ciascun modulo riutilizzabile per ogni app che scrivo. C'è un modo per ottenere qualcosa di simile? Ecco quello che ho provato:
App1 build.gradle:
dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
compile 'com.android.support:appcompat-v7:22.1.1'
compile project(path: ':Theme', configuration: 'app1Release')
compile project(':Lib1')
compile project(':Lib2')
compile project(':Lib4')
}
App2 build.gradle:
dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
compile 'com.android.support:appcompat-v7:22.1.1'
compile project(path: ':Theme', configuration: 'app2Release')
compile project(':Lib1')
compile project(':Lib3')
compile project(':Lib4')
}
Lib1 build.gradle:
dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
compile 'com.android.support:appcompat-v7:22.1.1'
compile project(path: ':Theme')
}
Il problema di questo è non appena Lib1 tenta di accedere a qualsiasi cosa nel tema, si ottiene un errore. In effetti, non crea nemmeno il tema per primo, tenterà di costruire Lib1 prima del tema anche se Lib1 ha una dipendenza (qualcosa di strano con i sapori). Se cambio Lib1 a:
dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
compile 'com.android.support:appcompat-v7:22.1.1'
compile project(path: ':Theme', configuration: 'app1Release')
}
Si lavorerà per app1, ma avrei dovuto sia costantemente cambiarlo prima di costruire ogni app, o fare un sacco di sapori per ogni lib vorrei evitare. Qualcuno ha mai ottenuto qualcosa del genere?
tl; dr Può un riferimento del modulo un sapore di un altro modulo in base al sapore costruito da app riferimento lo stesso modulo
Perché non utilizzi temi reali nelle tue app? Che tipo di valori hai bisogno di passare nei tuoi moduli? Se utilizzi attributi di tema come '? ColorPrimary' nei tuoi moduli puoi usare il semplice Theming senza aromi, puoi anche creare valori personalizzati da includere nel tuo tema –