Как получить название аромата из задачи Gradle - PullRequest
0 голосов
/ 17 октября 2019

У меня есть следующая настройка gradle:

apply plugin: 'com.android.application'

def projectName

android {
    ...
    flavorDimensions "project"
    productFlavors {
        demo {
            dimension "project"
        }
        full {
            dimension "project"
        }
    }
    ...
    applicationVariants.all { variant ->
        variant.outputs.all {
            projectName = variant.flavorName
        }
    }
}
...
task myTask(type: Copy) {
    println "flavor name is $projectName"
    ...
}
preBuild.dependsOn myTask

Однако, println не показывает имя флейвора в моей командной строке / терминале. Я что-то пропустил? Я использовал это как ссылку: Как получить текущий вкус в Gradle

1 Ответ

0 голосов
/ 22 октября 2019

После рассмотрения ситуации и поиска обходного пути, похоже, что preBuild не подходит для выполнения вашего требования.

Это будет afterEvaluate блок из контейнера проекта - этоодно решение, которое поможет в вашем случае.

Ваша ссылка Как получить текущую информацию в gradle имеет этот ответ , который может быть полезен для выяснения текущегоВкус продукта , а затем вызов его из applicationVariant был бы весьма полезен. узнать, как:

Определить метод, возвращающий текущий вкус продукта

def getCurrentVariant() {
    Gradle gradle = getGradle()
    String tskReqStr = gradle.getStartParameter().getTaskRequests().toString()

    Pattern pattern;

    if (tskReqStr.contains("assemble"))
        pattern = Pattern.compile("assemble(\\w+)(Release|Debug)")
    else
        pattern = Pattern.compile("generate(\\w+)(Release|Debug)")

    Matcher matcher = pattern.matcher(tskReqStr)

    if (matcher.find()) {
        return matcher.group(1).toLowerCase() // Changing to 2 will return build type, 1 provides product flavor
    } else {
        println "NO MATCH FOUND"
        return "";
    }
}

Затем записать afterEvaluate блок контейнер проекта на уровне приложения build.gradle :

project.afterEvaluate { // This container evaluates after successful sync
    android.applicationVariants.all { variant -> // We can detect all application variants
        variant.outputs.each { output -> // find out each outputs
            def taskName = "Variant -> $output.name"
            def list = output.name.tokenize('-') // Splitting output name by '-'
            println(taskName)
            if (getCurrentVariant().contains(list.get(0))) // Check if current variant matches with particular output variant
                println(getCurrentVariant())
        }
    }
}

Надеюсь, это соответствует вашим требованиям.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...