studio productflavors now must flavors flavor example configurar belong all android-studio gradle android-gradle build.gradle android-productflavors

android-studio - productflavors - flavors android example



Las dimensiones del sabor de Android Studio Gradle construyen variantes que no funcionan correctamente (1)

Tengo dos dimensiones de una aplicación, llame luego verde y azul. Solo habrá estas dos dimensiones, pero una cantidad ilimitada de sabores de productos. Así es como lo estoy configurando en Gradle.

flavorDimensions "green", "blue" productFlavors { one { applicationId "com.app.green.one" versionCode 1 versionName "1.0.0.1"; flavorDimension = "green" } two { applicationId "com.app.blue.two" versionCode 6 versionName "1.0.1"; flavorDimension = "blue" } }

Pero luego, después de sincronizar Gradle, en la pestaña de variantes de compilación todo lo que veo es oneTwoDebug y oneTwoRelease, donde debería ver greenOneDebug greenOneRelease, blueTwoDebug, blueTwoRelease

En teoría quiero extenderlo para que sea algo así.

one { applicationId "com.app.green.one" versionCode 1 versionName "1.0.0.1"; flavorDimension = "green" } two { applicationId "com.app.blue.two" versionCode 6 versionName "1.0.1"; flavorDimension = "blue" } three { applicationId "com.app.green.three" versionCode 1 versionName "1.0.0.1"; flavorDimension = "green" } four { applicationId "com.app.blue.four" versionCode 6 versionName "1.0.1"; flavorDimension = "blue" }

En este caso, las dimensiones representan el "tipo" de aplicación, y luego los sabores son más para las organizaciones que se pueden agregar.

** EDITAR Tenía la configuración incorrecta para gradle como se señala aquí, es una descripción más precisa de lo que tengo

flavorDimensions "type", "organization" productFlavors { blue { applicationId "com.app.blue" flavorDimension = "type" versionCode 6 versionName "1.0.1"; } red { applicationId "com.app.red" flavorDimension = "type" versionCode 1 versionName "1.0.0.1"; } company1 { flavorDimension = "organization" } company2 { flavorDimension = "organization" } }

Hasta ahora esto funciona, así que puedo crear directorios de código fuente de Java para alternar tipos, pero ¿y si quiero archivos de configuración específicos de la organización, también creo directorios de código fuente de Java para cada organización?


Creo que entendiste mal el concepto de saborDimension.

Una dimensión de sabor es algo así como una categoría de sabor y cada combinación de un sabor de cada dimensión producirá una variante.

En su caso, debe definir una dimensión de sabor llamada "tipo" y otra dimensión llamada "organización". Producirá, para cada sabor en la dimensión "organización" todo el posible "tipo" (o la formulación dual: para cada "tipo" producirá una variante para cada organización).

Las dimensiones del sabor definen el producto cartesiano que se utilizará para producir variantes.

EDITAR : Voy a tratar de ilustrar con el código de pseudo-gradle:

Definamos algunos "tipo": bronce, plata y oro.

Definamos algunas organizaciones: customerA, customerB, customerC

Todos ellos son productFlavors , pero pertenecen a 2 dimensiones diferentes:

flavorDimensions("type_line", "organization") productFlavors { gold { ... dimension = "type_line" } silver { ... dimension = "type_line" } bronze { ... dimension = "type_line" } customerA { ... dimension = "organization" } customerB { ... dimension = "organization" } customerC { ... dimension = "organization" } }

Esta configuración producirá 18 (3 * 3 * 2) variantes (si tiene los 2 tipos de compilación estándar: depuración y lanzamiento):

gold-customerA-debug; oro-customerA-release; gold-customerB-debug; oro-customerB-release; gold-customerC-debug; gold-customerC-release;

silver-customerA-debug; plata-cliente-liberación; silver-customerB-debug; plata-customerB-release; silver-customerC-debug; plata-customerC-release;

... (igual para el bronce)

Tenga en cuenta que el nombre de la dimensión es totalmente arbitrario y no tiene impacto en los nombres de variantes.

Las dimensiones del sabor son muy poderosas, pero si las usas demasiado: resulta en una explosión exponencial del número de variantes (una tarea de limpieza posterior a la construcción puede ser útil para eliminar una variante inútil o sin sentido)