15

我目前正在试用 Firebase 分析套装,但是,我遇到了一个小问题,我的应用程序同时分布在 google play 和 amazon store(不支持 google play 服务)上,所以对于我想要的 amazon 风味删除对 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'

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

这甚至可能吗?或者至少有什么可以尝试的?

更新:

根据 Steve 的要求,我在我的 Amazon Kindle 平板电脑上尝试使用 Firebase 的版本,即使没有安装 Google Play 服务,它也能正常工作。

4

5 回答 5

12

根据史蒂夫的回答,即使没有 Google Play 服务,Firebase 分析也可以工作。但是我们仍然可以禁用谷歌服务插件的味道。

尝试添加这样的代码:

 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);
                 // For latest gradle plugin use this instead
                 // variant.getVariantData().taskContainer.sourceGenTask.getTaskDependencies().getDependencies().remove(t)
             }
         }
     }
 }

在这里,我为所有名称不包含“flavorName”的风味禁用谷歌服务。您应该修改条件以满足您的要求。请注意,这应该在 apply plugin: 'com.google.gms.google-services'. 希望能帮助到你。

于 2016-09-27T04:38:44.230 回答
9

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

应用插件:'com.google.gms.google-services'

android.applicationVariants.all { 变体 ->
    if (variant.name == 'someVariantNameYouDontwantFirebase') {
        project.tasks.getByName('process' + variant.name.capitalize() + 'GoogleServices').enabled = false
    }
}
于 2018-03-15T16:37:27.787 回答
2

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

于 2016-06-08T08:02:06.833 回答
1

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

因此,如果除了删除由 Google Services 插件添加的 gradle 任务(如 Junyue Cao 的回答中所述)之外,您还想从最终合并的文件中删除与 Firebase 相关的接收器、服务、提供者、使用权限或其他标签AndroidManifest,您可以将节点标记添加到位于应用程序风味、构建配置或构建变体子目录中的 AndroidManifest.xml。

如果节点标记设置为“remove”,则最终合并的 AndroidManifest.xml 中不会出现相应的接收者、服务、提供者、使用权限标签。

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

    <receiver
        android:name="com.google.firebase.iid.FirebaseInstanceIdInternalReceiver"
        tools:node="remove" />

    <receiver
        android:name="com.google.android.gms.measurement.AppMeasurementReceiver"
        tools:node="remove" />

    <receiver
        android:name="com.google.android.gms.measurement.AppMeasurementInstallReferrerReceiver"
        tools:node="remove" />

    <receiver
        android:name="com.google.firebase.iid.FirebaseInstanceIdReceiver"
        tools:node="remove" >
    </receiver>

    <service
        android:name="com.google.android.gms.measurement.AppMeasurementService"
        tools:node="remove" />

    <service
        android:name="com.google.firebase.iid.FirebaseInstanceIdService"
        tools:node="remove"/>

    <provider
        android:name="com.google.firebase.provider.FirebaseInitProvider"
        android:authorities="com.you.yourapp.firebaseinitprovider"
        tools:node="remove"/>
于 2017-06-15T02:53:50.297 回答
0

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

tasks.all {

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

}
于 2018-05-03T15:30:59.063 回答