¿Cómo fijar el applicationId diferente para cada combinación del sabor usando flavorDimensions?
Tengo y la vieja aplicación de androide que estoy intentando emigrar al androide gradle construya el sistema. Actualmente, la aplicación está integrada en una configuración de proyectos múltiples y se publica como cuatro aplicaciones diferentes (dos conjuntos de datos diferentes incluidos y versiones gratuitas / pagas para ambos conjuntos de datos). He logrado alejarme de la configuración de varios proyectos mediante el uso de flavorDimensions (anteriormente llamado flavorGroups), pero no puedo averiguar cómo establecer una applicationId diferente para cada combinación de sabor.
Dado que las versiones de la aplicación ya están publicadas, necesito mantener la misma aplicación que tienen actualmente. Debido a cómo mi paquete original que nombraba fue hecho, no puedo utilizar simplemente la combinación del sabor-buildtype con "packageNameSuffix" (que habría sido una gran opción si era una aplicación inédita).
- 0% de cobertura de código en las pruebas de café exprés con JaCoCo y Gradle
- Gradle - heredar el sabor del producto
- Puntos de interrupción no reciben éxito en Android Studio
- No se encontró com.android.support:support-v13:19.0.0
- Edificio Gradle tarda una eternidad después de actualizar a Java 8
Https://stackoverflow.com/a/20956353/4177090 está respondiendo a 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 gradle (observe cómo unlogic mi nombre es, por lo que no puedo usar packageNameSuffix):
freeDataset1 { applicationId "com.beansys.freeappdataset1" } freeDataset2 { applicationId "com.beansys.freedataset2" } paidDataset1 { applicationId "com.beansys.dataset1paid" } paidDataset2 { applicationId "com.beansys.mypaiddataset2" }
- ¿Cómo cambiar algún valor en el archivo .java de build.gradle?
- Especificar versionCode en android / gradle proyectos raíz del proyecto build.gradle
- Gradle Sync no terminará después de la actualización 0.4.6
- Grails / Gradle prueba falla en CI no localmente
- Después de actualizar - Error: No se pudo encontrar: com.google.android.gms: play-services: 5.2.8
- ¿Cómo usar diferentes versiones de la misma dependencia de gradle en diferentes módulos de Android Studio?
- ¿Cómo suprimir la advertencia específica de Lint para la función obsoleta de Android?
- "Error: No se pudo completar la ejecución de Gradle. Causa: El daemon de generación de Gradle desapareció inesperadamente (puede haber sido destruido o puede haber caído) "
La solución propuesta por Fredrik dejó de funcionar después de actualizar Android Studio a 1.0.2 (y gradle plugin a 1.0.0) así que tuve que añadir los siguientes cambios, actuales como de gradle plugin 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 } }
Finalmente logré resolver esto. Creo que la solución es elegante (aunque el código real podría muy probablemente ser escrito mucho más agradable por alguien con conocimiento groovy).
Solución para establecer una aplicación específicaId 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" } }