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.

questionAnswers(3)

yourAnswerToTheQuestion