Generando dinámicamente sabores de producto.

He creado una aplicación para Android que debe compilarse en muchos (30+) sabores.

Mi idea fue generar los diferentes.productFlavors directamente desde la estructura de carpetas en misrc Directorio, ya que la configuración siempre es muy similar (básicamente, solo otro nombre de paquete, un nuevo icono de iniciador y algunas cadenas cambian).

lossrc carpeta se ve así:

└── src
    ├── flavor1
    │   ├── flavor2.keystore
    │   ├── res
    ├── flavor2
    │   ├── res
    │   ├── flavor2.keystore    
    └── main
        ├── AndroidManifest.xml
        ├── java
        └── res

Si tuviera que crear las propiedades de gradle a mano, se vería así:

android {

    ....

    productFlavors {
        flavor1 {
            packageName 'com.example.flavor1'
        }
        flavor2 {
            packageName 'com.example.flavor2'
        }
    }

}

Cada vez que trato de cambiar elproductFlavors configuración después de su creación recibo un error o los cambios / adiciones se ignoran silenciosamente.
Este podría ser un problema causado por mí, porque mi experiencia con Gradle / Groovy es muy limitada, o esto no es posible.

Principalmente me equivoco, diciendo queGroupableProductFlavorDsl_Decorated No podría ser manipulado como yo quiero.

Lo que estoy tratando de archivar debería tener este aspecto:

android {

    ....

    def flavors = getMyFlavorsFromFileSystem()

    productFlavors {

    }

    flavors.each { name, config ->
        productFlavors[name] << config
    }

}

Nota: Sé que esta pregunta es básicamente unaduplicar De una pregunta más antigua, que lamentablemente nunca fue contestada. Dado que Gradle es algo nuevo en el mundo de Android, espero obtener más respuestas ya que desde la última vez que se hizo la pregunta, ya que más desarrolladores están usando Gradle ahora.

Actualizar:

Aquí algunos enfoques muy simples que probé:

Variante 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.

*/

Variante 2:

android {

    productFlavors {

    }

    productFlavors['flavor1'] = {
        packageName "com.example.flavor1"
    }

    productFlavors['flavor2'] = {
        packageName "com.example.flavor2"
    }
}

/*

no error, but does not work

*/

Variante 3:

android {

    productFlavors {

    }

    productFlavors['flavor1'] = [packageName: "com.example.flavor1"]

    productFlavors['flavor2'] = [packageName: "com.example.flavor2"]
}

/*

no error, but does not work

*/

Todos ellos comoEsencia.

Respuestas a la pregunta(3)

Su respuesta a la pregunta