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"/> 
相關問題