Я создал приложение для 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.
Update:
Вот некоторые очень простые подходы, которые я пробовал:
Вариант 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
*/
Все они как Gist.