¿Cómo aplicar el plugin a un solo sabor en gradle?
Tengo un multi-sabor, multi-build-typed android proyecto y quiero integrar el plugin NewRelic. Pero tengo que aplicar sólo para uno de los clientes, por lo tanto, sólo para un sabor de producto.
NewRelic utiliza la instrumentación y el plugin generaría código en otros sabores si apliqué el plugin allí, y eso no está permitido para nosotros.
Así que mi pregunta es: ¿Cómo puedo utilizar el comando apply plugin: something
en el archivo gradle para ser aplicado a sólo uno de mis sabores?
- La aplicación se bloquea en onCreate debido a la excepción newrelic
- New Relic - java.io.IOException: El archivo existe
- Error de ejecución para la tarea ': app: processReleaseGoogleServices'. > Ningún cliente coincidente encontrado para el nombre del paquete
- Nueva clase de reliquia no encontrada ... Ni siquiera uso reliquia nueva
- Nuevo error Relic Android con gradle
- Nueva reliquia no funciona (gradle + estudio androide)
- Error al detectar la instrumentación New Relic. Error en la aplicación android
- Proguard config para newrelic en la aplicación android?
- NoClassDefFoundError en aplicaciones que no tienen instalado newrelic
- Definir variable –
def fl
-
Initialize variable in you Flavors (y / o builds)
productFlavors { freeFlavour { (...) fl = "free" } paidFlavour { (...) fl = "paid" } }
-
Usar si declaración –
if (fl == "free") { apply plugin: something }
Utilice este código:
if (!getGradle().getStartParameter().getTaskRequests() .toString().contains("Develop")){ apply plugin: 'com.google.gms.google-services' }
He encontrado una solución, pero no es la mejor hasta ahora. Así que ya no estoy seguro de que lo que quería hacer inicialmente es posible. La evaluación del archivo gradle y la elección del sabor y tipo de construcción correctos se encuentra en diferentes fases de la construcción gradle, así que lo que he hecho es:
Utilizo un parámetro de construcción desde la línea de comandos. Cuando ese paramerer es verdadero, aplico el complemento, cuando no está ahí, también lo aplico (para la compilación IDE). Utilizo Jenkins, así que podría escribir ese parámetro en el trabajo de la estructura.
Archivo build.gradle:
// First we have to attach a task to the project, which will be running first gradle.projectsEvaluated { preBuild.dependsOn(applyNewRelicByProperty) } // Then check on the parameter, which comes from the command line task applyNewRelicByProperty { if(!project.hasProperty('compileNewRelic')) { // NewRelic on: 'compileNewRelic' property not set, so running from IDE. apply plugin: 'newrelic' } else if(project.hasProperty('compileNewRelic') && project.getProperties().get('compileNewRelic').equals('true')) { // NewRelic on: 'compileNewRelic' property is set and it is 'true'. apply plugin: 'newrelic' } else { // NewRelic off println("No NewRelic") } }
Y tienes que ejecutar el gradle construir por esto:
assembleYourApp -PcompileNewRelic=true