5

我目前正在尝试使用Firebase分析套装,但是,我遇到了一个小问题,我的应用分布在Google Play和Amazon商店(它不支持谷歌播放服务),所以对于亚马逊的风味我想要将依赖关系移除到Firebase(我已经知道该怎么做),但是,我还需要移除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:[email protected]') { 
     transitive = true; 
    } 
} 

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

但是,我需要删除仅是亚马逊的味道插件。

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

UPDATE:

按照史蒂夫的要求,我就去尝试对我的亚马逊Kindle平板电脑与火力地堡的版本,它的工作即使你没有谷歌播放安装在他们的服务。

回答

1

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

+0

我继续尝试,反正,它不能发送数据,因为它不能产生实例ID它需要它,并且从我收集的是因为它需要Google Play服务才能生成该实例(所有亚马逊设备默认情况下都没有安装,您需要将其卸载才能使其正常工作)。 –

+0

这实际上对分析的收集没有影响。 –

+0

好吧,我会尝试插入它到今晚的提琴手只是为了确保数据正在低谷。谢谢。 –

7

根据Steve的回答,Firebase分析工具即使没有Google 也可以播放服务。但我们仍然可以禁用 风格的Google服务插件。

试加这样的代码:

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); 
      } 
     } 
    } 
} 

在这里,我禁用谷歌服务,他们的名字 不包含“flavorName”所有口味。您应该修改条件以符合您的要求 。 并注意这应该在 apply plugin: 'com.google.gms.google-services'之后加上。希望能帮助到你。

+2

这似乎没有删除由firebase(INTERNET,WAKE_LOCK,C2D_MESSAGE等)自动添加的权限。还有什么我要添加到构建文件? –

+0

嗨天使,也许我们应该删除这些口味的播放服务依赖关系,并确保播放服务没有用于这些口味。 –

+0

最终,我使用了这里推荐的方法来删除播放服务 - http://stackoverflow.com/a/39761871/908821 –

0

这是可能的,因为一些谷歌的Play服务库仍然需要包含在免费的火力味,一些火力相关条目最终在决赛中合并AndroidManifest.xml中。

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

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

例如,以下是您可能添加到AndroidManifest的内容。XML在项目的假想“nofirebase”味源目录(应用程序/ src目录/ nofirebase /):

<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"/> 
相关问题