android android-studio gradle newrelic android-productflavors

android - ¿Cómo aplicar el plugin a solo un sabor en Gradle?



android-studio newrelic (3)

Tengo un proyecto android de múltiples sabores y multi-build-typed y quiero integrar el plugin NewRelic. Pero tengo que aplicarlo solo para uno de los clientes, por lo tanto, solo para un sabor de producto.
NewRelic usa instrumentación y el complemento generaría código en otros sabores si apliqué el complemento allí, y eso no está permitido para nosotros.

Entonces mi pregunta es: ¿cómo puedo usar el apply plugin: something en el archivo Gradle para aplicarlo a solo uno de mis sabores?


  1. Definir variable - def fl
  2. Inicializar variable en tus sabores (y / o compilaciones)

    productFlavors { freeFlavour { (...) fl = "free" } paidFlavour { (...) fl = "paid" } }

  3. Usar declaración if -

    if (fl == "free") { apply plugin: something }


Encontré una solución, pero hasta ahora no es la mejor. Entonces ya no estoy seguro, que lo que quería hacer inicialmente es posible. La evaluación del archivo gradle y la elección del tipo correcto de sabor y compilación se realiza en diferentes fases de la compilación gradle, por lo que lo que he hecho es:

Yo uso un parámetro de compilación desde la línea de comando. Cuando ese parámetro es verdadero, aplico el complemento, cuando ni siquiera está allí, también lo aplico (para IDE build). Uso Jenkins, así que podría escribir ese parámetro en el trabajo de construcción.

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 la compilación gradle de esta manera:

assembleYourApp -PcompileNewRelic=true


Usa este código:

if (!getGradle().getStartParameter().getTaskRequests() .toString().contains("Develop")){ apply plugin: ''com.google.gms.google-services'' }