android - pasteleria - Cómo establecer diferentes ID de aplicación para cada combinación de sabores usando saborDimensiones?
lista de combinacion de sabores (2)
Finalmente logré resolver esto. Creo que la solución es elegante (aunque el código real podría ser mucho mejor escrito por alguien con un conocimiento maravilloso).
Solución para configurar una ID de aplicación específica para cada sabor combinado:
flavorDimensions "price", "dataset"
productFlavors {
free { flavorDimension "price" }
paid { flavorDimension "price" }
dataset1 { flavorDimension "dataset" }
dataset2 { flavorDimension "dataset" }
}
android.variantFilter { variant ->
def flavorString = ""
def flavors = variant.getFlavors()
for (int i = 0; i < flavors.size(); i++) {
flavorString += flavors[i].name;
}
if(flavorString.equalsIgnoreCase("freeDataset1")) {
variant.getDefaultConfig().applicationId "com.beansys.freeappdataset1"
}
if(flavorString.equalsIgnoreCase("freeDataset2")) {
variant.getDefaultConfig().applicationId "com.beansys.freedataset2"
}
if(flavorString.equalsIgnoreCase("paidDataset1")) {
variant.getDefaultConfig().applicationId "com.beansys.dataset1paid"
}
if(flavorString.equalsIgnoreCase("paidDataset2")) {
variant.getDefaultConfig().applicationId "com.beansys.mypaiddataset2"
}
}
Tengo una vieja aplicación de Android que estoy tratando de migrar al sistema de compilación de Android gradle. La aplicación está actualmente construida en una configuración de proyectos múltiples y publicada como cuatro aplicaciones diferentes (dos conjuntos de datos diferentes incluidos y versiones gratuitas / pagas para ambos conjuntos de datos). Logré alejarme de la configuración de proyectos múltiples utilizando flavorDimensions (anteriormente llamado flavorGroups), pero no puedo encontrar la manera de configurar un Id de aplicación diferente para cada combinación de sabores.
Dado que las versiones de la aplicación ya están publicadas, necesito mantener el mismo ID de aplicación como lo tienen actualmente. Debido a la forma en que se realizó el nombre original del paquete, no puedo usar simplemente la combinación flavor-buildtype con "packageNameSuffix" (que hubiera sido una gran opción si se tratara de una aplicación no publicada).
https://stackoverflow.com/a/20956353/4177090 está respondiendo cómo usar diferentes carpetas de origen para combinaciones de sabores, pero no cómo (si es posible) establecer una configuración específica para cada combinación en el archivo de compilación.
Fragmento de archivo de compilación de Gradle:
flavorDimensions "price", "dataset"
productFlavors {
free { flavorDimension "price" }
paid { flavorDimension "price" }
dataset1 { flavorDimension "dataset" }
dataset2 { flavorDimension "dataset" }
}
Me gustaría tener algo como lo siguiente en mi archivo de compilación de gradle (observe cómo mi nomenclatura es poco lógica, y por eso no puedo usar packageNameSuffix):
freeDataset1 { applicationId "com.beansys.freeappdataset1" }
freeDataset2 { applicationId "com.beansys.freedataset2" }
paidDataset1 { applicationId "com.beansys.dataset1paid" }
paidDataset2 { applicationId "com.beansys.mypaiddataset2" }
La solución propuesta por Fredrik dejó de funcionar después de actualizar Android Studio a 1.0.2 (y el complemento gradle a 1.0.0), así que tuve que agregar los siguientes cambios, actuales desde el complemento de Gradle 1.3.1:
flavorDimensions "price", "dataset"
productFlavors {
free { dimension "price" }
paid { dimension "price" }
dataset1 { dimension "dataset" }
dataset2 { dimension "dataset" }
}
android.applicationVariants.all { variant ->
def mergedFlavor = variant.mergedFlavor
switch (variant.flavorName) {
case "freeDataset1":
mergedFlavor.setApplicationId("com.beansys.freeappdataset1")
break
case "freeDataset2":
mergedFlavor.setApplicationId("com.beansys.freedataset2")
break
case "paidDataset1":
mergedFlavor.setApplicationId("com.beansys.dataset1paid")
break
case "paidDataset2":
mergedFlavor.setApplicationId("com.beansys.mypaiddataset2")
break
}
}