Android Studio:如何在产品风格中排除 google-services 模块?

12

在我的Android项目中,有几个产品口味:

buildTypes {
    release {}
    debug {}
    staging {}
}

productFlavors {
    freeVersion {}
    proVersion {}
    partnerVersion {}
}

另外,我使用Google Analytics:

apply plugin: 'com.google.gms.google-services'

dependencies {
    compile 'com.google.android.gms:play-services-analytics:8.4.0'
}

如何在其中一个中排除google-services?例如,在:

freeVersion {}

我之前没有做过这个,但是Gradle插件用户指南可能对你有帮助。 - iSandeep
4个回答

15

另一种解决方案是禁用google-services插件添加的任务 - 在这里,如果flavorName不是"freeVersion",则启用该任务,但是这个逻辑可以明显更新为查看变体的buildType。

apply plugin: 'com.google.gms.google-services'

// must be after the plugin is applied otherwise no tasks will be found
android.applicationVariants.all { variant ->
    def googleTask = tasks.findByName("process${variant.name.capitalize()}GoogleServices")
    googleTask.enabled = !"freeVersion".equals(variant.flavorName)
}

1
在我看来,这应该是被接受的答案。如果你无法识别它,你也可以将flavorName打印到构建控制台窗口中。 - Thomas Sunderland

13
请注意使用freeCompile和声明一个变量flavor,以有条件地应用插件。
apply plugin: 'com.android.application'

def flavor

android {

    ....

    ....

    productFlavors {
        free {
            applicationId "com.anandbibek.builditbigger.free"
            flavor = "free"
        }
        paid {
            applicationId "com.anandbibek.builditbigger.paid"
            flavor = "paid"
        }
    }
}

dependencies {

    // Added for AdMob
    freeCompile 'com.google.firebase:firebase-ads:9.6.1'

    compile 'com.android.support:appcompat-v7:24.2.1'
    compile 'com.google.code.findbugs:jsr305:2.0.1'

}
if(flavor == "free") {
    apply plugin: 'com.google.gms.google-services'
}

请确保将google-services.json文件放在特定风格的文件夹中。在我的情况下,我只将它放在app/src/free中。当您在主项目gradle文件中使用classpath 'com.google.gms:google-services:3.0.0'时,就可以使用此功能。


3
这个方法不再起作用,因为该值将始终被设置为最后定义的口味 :-( - Kelevandos
对我来说仍然有效。flavor变量的值是在Gradle任务运行时决定的。也许你正在运行两个flavors并在稍后访问该变量? - anandbibek
1
我尝试记录它,实际上所有三种类型都被依次调用,最终值总是设置在最后一个模块中的那个值 :( 底部的if代码只被调用一次,但是会更改这三个值 :( - Kelevandos
我不是gradle任务的专家,但我的做法是使用AssembleFreeRelease获取apk,然后再点击AssemblePaidRelease。你可以在Android Studio右侧的gradle窗口中找到可点击的任务。 - anandbibek
我最近尝试过这个方法,但对我也没有用。@anandbibek 似乎是对的,该值在单个 gradle 同步中被分配了两次,因此 "flavor" 总是被赋予了最后一个分配的值。有人找到了其他解决方案吗? - Naveen Dissanayake
最近Gradle的更改可能重构了它的处理方式。必须进一步调查最新的插件。 - anandbibek

0
尝试了这些和其他示例后,没有一个解决方案对我起作用。我想这些回答可能有点过时,考虑到答案是2018年的,而且Gradle已经发生了很多变化,特别是从Groovy迁移到Kotlin。最终,对我起作用的代码如下:
val variantsWithoutFirebase = arrayListOf(
    "variantDebug", "variantStaging", "variantRelease"
)
afterEvaluate {
    android.applicationVariants.all { _ ->
        project.tasks.filter { task ->
            variantsWithoutFirebase.any { task.name.contains(it, true) }
        }.map { task ->
            if (
                task.name.contains("GoogleServices") ||
                task.name.contains("uploadCrashlyticsMapping")
            ) {
                // Remove google services plugin
                tasks.findByName(task.name)?.enabled = false
                println("Disable task: ${task.name}")
            }
        }
        false
    }
}

-2

我最初误读了问题。要排除免费版本,您将使用proVersionCompile和partnerVersionCompile,并使用所需的依赖项来排除freeVersion。

dependencies {
    proVersionCompile 'com.google.android.gms:play-services-analytics:8.4.0'
    partnerVersionCompile 'com.google.android.gms:play-services-analytics:8.4.0'
}

这是一个与多种味道和google-services.json有关的问题。使用apply plugin com.google.gms:google-services:2.0.0-alpha3。然后它支持您将google-services.json文件放置在每个flavor目录中。app/src/ freeVersion/google-services.json proVersion/google-services.json partnerVersion/google-services.json - Joopkins
从官方指南中翻译: 将以下依赖项添加到您项目级别的 build.gradle 文件中: classpath 'com.google.gms:google-services:2.0.0-alpha5' 在应用程序级别的 build.gradle 文件中添加插件: apply plugin: 'com.google.gms.google-services' - user3634297
请查看此链接和JSON文件信息:https://developers.google.com/android/guides/google-services-plugin?hl=en - Joopkins
我认为我误解了这个问题,认为它涉及到依赖关系,而不是插件。我不确定是否有一种方法可以设置特定于Flavor的插件,除非设置自定义Gradle任务和首选项。 - Joopkins
这并不是一个明确的答案,但是可以给你提供一个例子,让你了解如何在Gradle中仅应用于一个Flavor。 - Joopkins
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接