android-gradle
Configurar los sabores del producto
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
}
}