Подтвердить что ты не робот

Добавьте зависимость к определенному продуктуFlavor и buildType в gradle

Мне интересно, как добавить зависимость к определенному productFlavor и buildType в gradle. Например, у меня есть productFlavor free и тип сборки release, как я могу добавить зависимость от задачи assembleFreeRelease?

Я пробовал много вариантов, но не работает.

Например, я попытался:

task('release', dependsOn: assembleProductionRelease) {
} 
// error: Could not find property 'assembleProductionRelease' on root project 'app'.

Или:

task('release', dependsOn: 'assembleProductionRelease') {
}

Здесь нет ошибки, но задача выполняется для каждого типа аромата и типа, очень запутанная.

4b9b3361

Ответ 1

Эта задача генерируется динамически на основе конфигурации вашего Android-плагина. Во время настройки они пока недоступны. Вы можете отложить создание своей задачи двумя способами:

Подождите, пока не будет оценен проект .

afterEvaluate {
    task yourTask(dependsOn: assembleFreeRelease) {
        println "Your task"
    }
}

Ленько объявляя зависимость задачи как String.

task yourTask(dependsOn: 'assembleFreeRelease') {
    println "Your task"
}

Ответ 4

Ответ Muschko не помог мне, поэтому это мое решение, написанное мной и отправленное мной здесь

Определите задачу, которая должна выполняться только для определенного типа buildType/variant/flavor

task doSomethingOnWhenBuildProductionRelease << {
    //code
}

Важно использовать "< lt;" синтаксис, иначе задача будет автоматически вызываться каждый раз.

Динамически устанавливать зависимость при добавлении задач с помощью gradle

tasks.whenTaskAdded { task ->
    if (task.name == 'assembleProductionRelease') {
        task.dependsOn doSomethingOnWhenBuildProductionRelease 
    }
}

Ответ 5

android {
    ext.addDependency = {
        task, flavor, dependency ->
            def taskName = task.name.toLowerCase(Locale.US)
            if (taskName.indexOf(flavor.toLowerCase(Locale.US)) >= 0) {
                task.dependsOn dependency
            }
    }

    productFlavors {
        production {
        }
        other
    }

    task theProductionTask << {
        println('only in production')
    }

    tasks.withType(JavaCompile) {
        compileTask -> addDependency compileTask, "production", theProductionTask
    }
}

Чтобы быть откровенным, я не знаю, какой язык используется для генерации имен для компиляции taks, поэтому toLowerCase(Locale.US) может быть контрпродуктивным.

Ответ 6

Вот еще один способ, которым я пользовался:

tasks.withType(JavaCompile) {  
    compileTask ->  
    def dependedTaskName = "dependedTask_";  
    if(compileTask.name.contains('Release') {  
      dependedTaskName += "Release";  
    }  
    createTask(dependedTaskName, Exec) {  
     ........  
    }  

    compileTask.dependsOn ndkBuildTaskName  
}  

Другой способ:

tasks.whenTaskAdded { task ->  
    if (task.name == 'generateReleaseBuildTypeBuildConfig') {  
        task.dependsOn doSomethingForReleaseBuild   
    }  
}   

Первый метод является динамическим, а второй - более простым.