Динамически генерируемый вкус продукта
Я создал приложение для Android, которое должно быть встроено во многие (более 30) разновидностей.
Моя идея заключалась в том, чтобы генерировать разныеproductFlavors
прямо из структуры папок в моемsrc
каталог, так как конфигурация всегда очень похожа (в основном, просто другое имя пакета, новая иконка запуска и некоторые строки изменяются).
src
папка выглядит так:
└── src
├── flavor1
│ ├── flavor2.keystore
│ ├── res
├── flavor2
│ ├── res
│ ├── flavor2.keystore
└── main
├── AndroidManifest.xml
├── java
└── res
Если бы мне пришлось создавать свойства gradle вручную, это выглядело бы примерно так:
android {
....
productFlavors {
flavor1 {
packageName 'com.example.flavor1'
}
flavor2 {
packageName 'com.example.flavor2'
}
}
}
Каждый раз, когда я пытаюсь изменитьproductFlavors
Конфигурация после ее создания я получаю либо ошибку, либо изменения / дополнения игнорируются молча.
Это может быть проблемой, вызванной мной, потому что мой опыт Gradle / Groovy очень ограничен, или это невозможно.
Я в основном получаю ошибку, говоря, чтоGroupableProductFlavorDsl_Decorated
нельзя манипулировать так, как я хочу.
То, что я пытаюсь архивировать, должно как-то выглядеть так:
android {
....
def flavors = getMyFlavorsFromFileSystem()
productFlavors {
}
flavors.each { name, config ->
productFlavors[name] << config
}
}
Примечание: Я знаю, что этот вопрос в основномдублировать старого вопроса, на который, к сожалению, так и не был дан ответ. Поскольку Gradle является своего рода новинкой в мире Android, я надеюсь получить больше ответов, так как со времени последнего вопроса был задан вопрос, потому что сейчас все больше разработчиков используют Gradle.
Обновить:
Вот несколько очень простых подходов, которые я попробовал:
Вариант 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.
*/
Вариант 2:
android {
productFlavors {
}
productFlavors['flavor1'] = {
packageName "com.example.flavor1"
}
productFlavors['flavor2'] = {
packageName "com.example.flavor2"
}
}
/*
no error, but does not work
*/
Вариант 3:
android {
productFlavors {
}
productFlavors['flavor1'] = [packageName: "com.example.flavor1"]
productFlavors['flavor2'] = [packageName: "com.example.flavor2"]
}
/*
no error, but does not work
*/
Все они какСуть.