как получить текущий выбранный вкус продукта в файле app / build.gradle - PullRequest
0 голосов
/ 04 января 2019

Например, у меня есть ароматы area1 и area2, но только у area2 есть зависимость google gms, и я просто хочу применить плагин gms к area2, поэтому мне нужно определить текущие ароматы как area == 'area2', очевидно, что это не может быть успешным, так какможно мне сделать?

flavorDimensions "area"
productFlavors {
    area1 {
        dimension "area"
        applicationId 'com.sample.area1'
    }
    area2 {
        dimension "area"
        applicationId 'com.sample.area2'
    }
}
dependencies {
   area2Implementation 'com.google.android.gms:play-services-auth: 16.0.1'
}
if(area == 'area2') {
  apply plugin: 'com.google.gms.google-services'
}

Ответы [ 2 ]

0 голосов
/ 09 января 2019

Я нашел решение:

gradle.taskGraph.whenReady { taskGraph ->
    def tasks = taskGraph.getAllTasks()
        for(task in tasks) {
        if(task.getName().startsWith('assembleArea2')) {
            apply plugin: 'com.google.gms.google-services'
            break
        }
    }
}
0 голосов
/ 04 января 2019

Просто добавьте следующую android.applicationVariants.all конфигурацию в свой блок Android:

android {

    // Flavor definitions here
    productFlavors {
        // ...
    }

    android.applicationVariants.all { variant ->

        if (variant.flavorName == "area2") {
            apply plugin: 'com.google.gms.google-services'
        }
    }
}

==== Обновлено 01.07.2009 ====

Просто реализуйте вышеуказанный блокandroid.applicationVariants.all выполняется для всех вариантов сборки каждый раз (т. е. если у вас есть 2 типа сборки плюс 3 варианта, это будет затронуто всеми 6 вариантами).И на самом деле это подготовка различных конфигураций для отдельных вариантов для последующей сборки.

Таким образом, для достижения цели нам нужно применить плагин на этапе сборки.Не уверен, что есть лучший способ, но мне удалось сделать что-то хитрое, например:

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

Я поместил это в конец файла Gradle, вне блока Android (где изначально находился блок «apply plugin»)является).Также обратите внимание, что вам нужно иметь первый символ ключевого слова flavour в в верхнем регистре , потому что он является частью строки имени задачи, такой как [:app:assembleArea2Debug]], если вы используете println, чтобы проверить это в консоли Gradle.

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