Buscar..


Observaciones

Los sabores de producto admiten las mismas propiedades que defaultConfig esto se debe a que defaultConfig realmente pertenece a la clase ProductFlavor. Esto significa que puede proporcionar la configuración básica para todos los sabores en el bloque defaultConfig {} , y cada sabor puede anular cualquiera de estos valores predeterminados, como el pplicationId .

Cómo configurar el archivo build.gradle

android {
    ...
    defaultConfig {...}
    buildTypes {...}
    productFlavors {
        demo {
            applicationId "com.example.myapp.demo"
            versionName "1.0-demo"
        }
        full {
            applicationId "com.example.myapp.full"
            versionName "1.0-full"
        }
    }
}

Constantes de Sabor y Recursos en build.gradle

Puede usar gradle para tener constantes de BuildConfig y valores de res por sabor. Simplemente agregue el valor al sabor que desea admitir.

android {
    defaultConfig {
        resValue "string", "app_name", "Full App"
        buildConfigField "boolean", "isDemo", "false"
    }
    productFlavors {
        demo {
            resValue "String", "app_name", "Demo App"
            buildConfigField "boolean", "isDemo", "true"
        }
        full {
            // use default values
        }
    }
}

Gradle hará toda la fusión / anulación por usted. El código generado también le permitirá ver de dónde provienen los valores, por ejemplo,

<!-- Values from default config. -->
<string name="app_name" translatable="false">Default Name</string>

y

public final class BuildConfig {
    public static final String VERSION_NAME = "1.0";
    // Fields from product flavor: demo
    public static final boolean isDemo = true;
}

Usando la Dimensión del Sabor

Cuando la aplicación se basa en más de un criterio, en lugar de crear muchos sabores, puede definir las dimensiones del sabor.

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

Ejemplo:

flavorDimensions("dimA", "dimB")

productFlavors {

    row1 {
        ...
        dimension = "dimA"
    }
    row2 {
        ...
        dimension = "dimA"
    }
    row3 {
         ...
        dimension = "dimA"
    }

    col1 {
        ...
        dimension = "dimB"
    }
    col2 {
        ...
        dimension = "dimB"
    }
    col3 {
         ...
        dimension = "dimB"
    }
}

Esta configuración producirá 18 (3 3 2) variantes (si tiene los 2 tipos de compilación estándar: debug y release ). Se crearán las siguientes variantes de compilación:

row1-col1-debug 
row1-col2-debug 
row1-col3-debug 
row1-col1-release
row1-col2-release
row1-col3-release

row2-col1-debug 
row2-col2-debug 
row2-col3-debug 
row2-col1-release
row2-col2-release
row2-col3-release

row3-col1-debug 
row3-col2-debug 
row3-col3-debug 
row3-col1-release
row3-col2-release
row3-col3-release

El orden de la dimensión está definido por android.flavorDimensions y las unidades cuyo sabor reemplaza al otro , lo que es importante para los recursos cuando un valor en un sabor reemplaza un valor definido en un sabor de prioridad más baja.

La dimensión de sabor se define con mayor prioridad primero. Así que en este caso:

dimA > dimB > defaultConfig

También hay una carpeta de origen de "combinación de sabor" disponible cuando se utiliza más de una dimensión de sabor. Por ejemplo src/flavor1Flavor2/ .

  • Tenga en cuenta que esto es para todas las combinaciones de todas las dimensiones.
  • Su prioridad es más alta que los conjuntos de fuentes de un solo sabor, pero más baja que los tipos de compilación.

Añadir dependencias para los sabores.

Puede agregar diferentes dependencias para un sabor de producto específico.

Solo use la <flavorName>Compile 'group:name:xyz' :

android {
    ...    
    productFlavors {
        flavor1 {
           //.....
        }
        flavor2 {
           //.....
        }
    }
}

...
dependencies {

    compile 'com.android.support:appcompat-v7:24.2.0'
   
    // Add a dependency only for flavor1
    flavor1Compile 'group:name:x.y.z'

    // Add a dependency only for flavor2
    flavor2Compile 'group:name:x.y.z'
} 

Ejemplo de desarrollo y producción de sabores de productos

productFlavors {
        // Define separate dev and prod product flavors.
        dev {
            // dev utilizes minSDKVersion = 21 to allow the Android gradle plugin
            // to pre-dex each module and produce an APK that can be tested on
            // Android Lollipop without time consuming dex merging processes.
            minSdkVersion 21
        }
        prod {
            // The actual minSdkVersion for the application.
            minSdkVersion 15
        }
    }


Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow