Я создал приложение для 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
*/
Все они представлены в виде Gist.
src/
вручную или они созданы где-то еще. Если они не создаются вручную, не могли бы вы опубликовать тот фрагмент кода, который создает структуру папок. Спасибо. 08.12.2014