Android/Gradle: условно применить плагин в зависимости от типа сборки

Я хотел бы сделать что-то вроде (псевдокод):

if (BuildType == "release"){
    apply plugin: 'testfairy'
} else if (BuildType == "debug"){
    apply plugin: 'io.fabric'
}

Идея состоит в том, чтобы на основе типа сборки применять (или нет) плагин. Как это сделать?

4 ответа

Решение

Основанный на Stefan Oehme, разработчике ядра Gradle, он сказал:

Плагины нельзя применять только к "части вашего проекта". Они либо применяются, либо нет. Какой вариант использования, когда это становится проблемой для вас?

Итак, ответ: это невозможно. Я раскрыл мои случаи использования, когда это становится проблемой, и я посмотрю, что привет говорит об этом.

С Gradle 4.6 работает следующее:

if (getGradle().getStartParameter().getTaskRequests().toString().contains("Release")) {
    apply plugin: 'testfairy'
} else if (getGradle().getStartParameter().getTaskRequests().toString().contains("Debug")) {
    apply plugin: 'io.fabric'
}

Вот обходное решение, которое я использовал. Идея состоит в том, чтобы ввести переменную Env и применять плагин только в некоторых конкретных env.

if (System.getenv("PROJECT_ENV") == "Release") {
    apply plugin: 'your plugin'
}

Вот решение, которое не привело к сбою приложения. В других решениях произошел сбой, когда класс, наконец, был вызван с исключением Class not found.

def tasks = gradle.startParameter.taskNames[0] ?: ""
if (tasks.toLowerCase().contains("prod")) {
    println "Firebase-Performance pluign applied..."
    apply plugin: 'com.google.firebase.firebase-perf'
}

Помните мавенские профили? Вы можете сделать что-то подобное, используя этот фрагмент, который был заимствован из ярости

в вашем файле сборки if (project.hasProperty('profile') && project.profile.split(',').contains("ci")) { //do something }

затем запустить его, когдаgradlew -Pprofile=ci

Вот полный пример здесь https://github.com/gradle-fury/gradle-fury/blob/develop/build.gradle

Отказ от ответственности, я работаю над яростью. для науки

Другие вопросы по тегам