我可以禁用特定风味的Firebase插件吗?

时间:2016-06-08 05:12:16

标签: android firebase android-gradle gradle-plugin firebase-analytics

我目前正在试用Firebase分析套装,但是,我遇到了一个小问题,我的应用程序分发在google play和amazon商店(它不支持google play服务),所以对于亚马逊风味我想删除对Firebase的依赖(我已经知道该怎么做),但是,我还需要删除Firebase插件,这样它在构建时不会抛出异常。

这就是我现在所拥有的:

productFlavors {
    google {
        applicationId 'google app id'
    }
    amazon {
        applicationId 'amazon app id'
    }
}

dependencies {
    googleCompile 'com.google.firebase:firebase-analytics:9.0.0'
    amazonCompile 'com.amazonaws:aws-android-sdk-mobileanalytics:2.2.12'
    amazonCompile('com.crashlytics.sdk.android:crashlytics:2.5.1@aar') {
        transitive = true;
    }
}

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

但是,我只有在亚马逊风味的情况下才需要删除插件。

这甚至可能吗?或者至少有一些我能尝试的东西吗?

更新

根据史蒂夫的要求,我去亚马逊Kindle平板电脑上尝试使用Firebase的版本,即使你没有安装Google Play服务,它也能正常运行。

5 个答案:

答案 0 :(得分:10)

根据Steve的回答,即使没有Google,Firebase分析也能正常运行  游戏服务。但我们仍然可以禁用谷歌服务插件  矫味剂。

尝试添加以下代码:

'->
  

在这里,我禁用谷歌服务的所有口味的名称   不包含“flavorName”。您应该修改条件以适应   你的要求。 请注意,这应该在之后添加    apply plugin: 'com.google.gms.google-services' android.applicationVariants.all { variant -> if (!variant.name.contains("flavorName")) { project.tasks.each { t -> if (t.name.contains("GoogleServices")) { // Remove google services plugin variant.getVariantData().resourceGenTask.getTaskDependencies().values.remove(t); } } } } 。希望它有所帮助。

答案 1 :(得分:4)

我终于得到了一个使用新gradle的版本。使用gradle 4.6,构建工具3.0.1,google-services插件3.1.1

进行测试
apply plugin: 'com.google.gms.google-services'

android.applicationVariants.all { variant ->
    if (variant.name == 'someVariantNameYouDontwantFirebase') {
        project.tasks.getByName('process' + variant.name.capitalize() + 'GoogleServices').enabled = false
    }
}

答案 2 :(得分:2)

虽然Firebase没有正式支持没有Google Play服务的设备,但Google Analytics实际上应该在这些设备上运行,因此您可能实际上不需要在Amazon版本中禁用Firebase(或删除插件)。你试过了吗?

答案 3 :(得分:0)

有可能因为某些Google Play服务库仍然需要包含在中,而且没有基于firebase的风格,因此一些与firebase相关的条目最终会出现在最终合并的AndroidManifest.xml中。

因此,除了删除Google服务插件添加的gradle任务(如Junyue Cao的回答中所述)之外,您还想删除与Firebase相关的接收者,服务,提供者,使用权限或其他标签。在最终合并的AndroidManifest中,您可以将node markers添加到位于应用程序的flavor,build config或build variant子目录中的AndroidManifest.xml中。

如果节点标记设置为“remove”,则相应的receiver,service,provider,uses-permission标签将不会出现在最终合并的AndroidManifest.xml中。

例如,您可以在项目假设的'nofirebase'风味源目录dir(app / src / nofirebase /)中添加到AndroidManifest.xml中:

listTwo

答案 4 :(得分:0)

上面的答案我收到的错误是任务不存在(?它是在构建期间生成的?)。对我有用的是简单地要求任务纠正自己。就我而言,我在UAT构建中禁用了Fabric。

tasks.all {

        if (it.name.contains("Uat") && (
                it.name.contains("GoogleServices") ||
                it.name.contains("fabric"))
        ){
            it.enabled = false
        }

}
相关问题