Динамически генерируемый вкус продукта

Я создал приложение для 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

*/

Все они какСуть.

Ответы на вопрос(3)

Ваш ответ на вопрос