Dynamiczne generowanie smaków produktu
Stworzyłem aplikację na Androida, która musi być zbudowana w wielu (30+) smakach.
Moim pomysłem było wygenerowanie różnychproductFlavors
bezpośrednio ze struktury folderów w moimsrc
katalog, ponieważ konfiguracja jest zawsze bardzo podobna (zasadniczo tylko inna nazwa pakietu, nowa ikona programu uruchamiającego i niektóre ciągi znaków).
Thesrc
folder wygląda tak:
└── src
├── flavor1
│ ├── flavor2.keystore
│ ├── res
├── flavor2
│ ├── res
│ ├── flavor2.keystore
└── main
├── AndroidManifest.xml
├── java
└── res
Gdybym musiał ręcznie utworzyć właściwości stopni, wyglądałoby to jakoś tak:
android {
....
productFlavors {
flavor1 {
packageName 'com.example.flavor1'
}
flavor2 {
packageName 'com.example.flavor2'
}
}
}
Za każdym razem staram się zmienićproductFlavors
konfiguracja po jej utworzeniu otrzymuję błąd lub zmiany / dodatki są ignorowane po cichu.
Może to być problem spowodowany przeze mnie, ponieważ moje doświadczenie Gradle / Groovy jest bardzo ograniczone, albo nie jest to możliwe.
Najczęściej otrzymuję błąd, mówiąc toGroupableProductFlavorDsl_Decorated
nie można było manipulować tak, jak chcę.
To, co próbuję zarchiwizować, powinno jakoś wyglądać tak:
android {
....
def flavors = getMyFlavorsFromFileSystem()
productFlavors {
}
flavors.each { name, config ->
productFlavors[name] << config
}
}
Uwaga: Wiem, że to pytanie jest zasadniczoduplikować starszego pytania, na które niestety nigdy nie udzielono odpowiedzi. Ponieważ Gradle jest czymś nowym w świecie Androida, mam nadzieję uzyskać więcej odpowiedzi, ponieważ od ostatniego pytania zadawano pytanie, ponieważ więcej programistów używa teraz Gradle.
Aktualizacja:
Oto kilka bardzo prostych podejść, które próbowałem:
Wariant 1:
android {
productFlavors {
}
productFlavors['flavor1'] << {
packageName "com.example.flavor1"
}
productFlavors['flavor2'] << {
packageName "com.example.flavor2"
}
}
/*
A problem occurred evaluating root project 'MyProject'.
> GroupableProductFlavorDsl with name 'flavor1' not found.
*/
Wariant 2:
android {
productFlavors {
}
productFlavors['flavor1'] = {
packageName "com.example.flavor1"
}
productFlavors['flavor2'] = {
packageName "com.example.flavor2"
}
}
/*
no error, but does not work
*/
Wariant 3:
android {
productFlavors {
}
productFlavors['flavor1'] = [packageName: "com.example.flavor1"]
productFlavors['flavor2'] = [packageName: "com.example.flavor2"]
}
/*
no error, but does not work
*/
Wszystkie z nich jakoSens.