Android Studio:如何在产品风味中排除谷歌服务模块?

问题描述 投票:0回答:4

在我的 Android 项目中,有几种产品风格:

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

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

另外,我使用谷歌分析:

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

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

如何在其中之一中排除谷歌服务?例如,在:

freeVersion {}
java android gradle android-productflavors
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)
}

12
投票

请注意使用

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'
时,此功能可用。


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 以及所需的依赖项来排除免费版本。

dependencies {
    proVersionCompile 'com.google.android.gms:play-services-analytics:8.4.0'
    partnerVersionCompile 'com.google.android.gms:play-services-analytics:8.4.0'
}
© www.soinside.com 2019 - 2024. All rights reserved.