После рассмотрения ситуации и поиска обходного пути, похоже, что 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())
}
}
}
Надеюсь, это соответствует вашим требованиям.