例如,我有area1和area2口味,但只有area2具有谷歌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'
}
答案 0 :(得分:0)
只需在Android块中添加以下android.applicationVariants.all
配置:
android {
// Flavor definitions here
productFlavors {
// ...
}
android.applicationVariants.all { variant ->
if (variant.flavorName == "area2") {
apply plugin: 'com.google.gms.google-services'
}
}
}
====更新了7/1/2019 ====
只需意识到上面的android.applicationVariants.all
块每次都会针对所有构建变体执行(即,如果您有2种构建类型和3种口味,那么6种变体都会被击中)。实际上,这是为各个变体准备不同的配置以供以后构建。
因此,为了达到目的,我们需要在构建阶段应用插件。不知道是否有更好的方法,但是我设法完成了一些棘手的事情,例如:
if (getGradle().getStartParameter().getTaskRequests().toString().contains("Area2")) {
apply plugin: 'com.google.gms.google-services'
}
我把它放在Gradle文件的末尾,在Android块之外(最初是“ apply plugin”块)。还要注意,您需要在大写中使用风味关键字的第一个字符,因为如果您在gradle控制台中使用println来将其作为任务名称字符串的一部分,例如[:app:assembleArea2Debug]]
。>
答案 1 :(得分:0)
我找到了解决方法:
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
}
}
}