google-services.json für verschiedene ProdukteFlavors

Update: GCM ist veraltet, verwenden Sie FCM

Ich implementiere das neue Google Cloud Messaging gemäß den Handbüchern auf der Google Developers-Seite

Ich habe es erfolgreich ausgeführt und getestet. Aber mein Problem ist jetzt, dass ich verschiedene ProduktFlavors mit unterschiedlichen applicationId / packageName und unterschiedlicher GCM Projekt Identifikation habe. Die /app/google-services.json google-services.json muss im Ordner /app/google-services.json nicht im Ordner /app/google-services.json .

Gibt es eine Möglichkeit, die Konfiguration von google-services.json für viele Varianten anders zu gestalten?

Google hat die Unterstützung für Flavors in Version 2.0 des Play Services-Plugins integriert. Seit dieser Version des gradle plugin com.google.gms:google-services:2.0.0-alpha3

du kannst das

 app/src/ flavor1/google-services.json flavor2/google-services.json 

Version 3.0.0 des Plugins wird an diesen Stellen nach der JSON-Datei suchen (wenn Sie einen Flavor1 und einen Buildtyp debug ):

 /app/src/flavor1/google-services.json /app/src/flavor1/debug/google-services.json /app/src/debug/google-services.json /app/src/debug/flavor1/google-services.json /app/google-services.json 

Dies funktionierte für mich sogar mit FlavorDimensions. Ich habe frei und bezahlt in einer Dimension und Mock & Prod in der anderen Dimension. Ich habe auch 3 BuildTypes: Debug, Release und Staging. So sieht es in meinem Projekt für die FreeProd-Variante aus:

Bildbeschreibung hier eingeben

Wie viele google-services.json-Dateien hängen von den Eigenschaften Ihres Projekts ab, aber Sie benötigen mindestens eine JSON-Datei für jedes Google-Projekt.

Wenn Sie weitere Informationen dazu benötigen, was dieses Plugin mit diesen json-Dateien macht, finden Sie hier https://github.com/googlesamples/google-services/issues/54#issuecomment-165824720

Link zu den offiziellen Dokumenten: https://developers.google.com/android/guides/google-services-plugin

Und schauen Sie sich die neueste Version dieses Plugins an: https://bintray.com/android/android-tools/com.google.gms.google-services/view

UPDATE: Die folgende Erklärung gilt für ein Android Studio-Projekt mit einem Firebase-Projekt und verschiedenen Firebase-Apps in diesem Projekt. Wenn Sie unterschiedliche JSON-Dateien für verschiedene Firebase-Apps in verschiedenen Firebase-Projekten innerhalb desselben Android Studio-Projekts verwenden möchten (oder wenn Sie nicht wissen, wo der Unterschied liegt), klicken Sie hier. .

Sie benötigen eine Firebase-App pro Android-Anwendungs-ID (normalerweise Paketname). Es ist üblich, eine Anwendungs-ID pro Gradle-Build-Variante zu haben (Dies ist wahrscheinlich, wenn Sie Gradle-Build-Typen und Gradle-Build-Varianten verwenden)


Bei Google Services 3.0 und der Verwendung von Firebase ist es nicht erforderlich, unterschiedliche Dateien für verschiedene Varianten zu erstellen. Das Erstellen von verschiedenen Dateien für verschiedene Geschmacksrichtungen kann nicht klar oder einfach sein, wenn Sie productFlavours und Build-Typen haben, die sich zusammensetzen.

In derselben Datei haben Sie alle Konfigurationen, die Sie für all Ihre Build-Typen und -Arten benötigen.

In der Firebase-Konsole müssen Sie eine App pro Paketnamen hinzufügen. Stellen Sie sich vor, Sie haben zwei Varianten (dev und live) und zwei Build-Typen (debug and release). Abhängig von Ihrer Konfiguration, aber wahrscheinlich haben Sie 4 verschiedene Paketnamen wie:

  • com.stackoverflow.example (live – release)
  • com.stackoverflow.example.dev (live – dev)
  • com.stackoverflow.example.debug (debug – release)
  • com.stackoverflow.example.dev.debug (debug – dev)

Sie benötigen 4 verschiedene Android-Apps in der Firebase-Konsole. (Auf jedem müssen Sie die SHA-1 für Debug und Live für jeden Computer, den Sie verwenden, hinzufügen)

Wenn Sie die Datei google-services.json herunterladen, spielt es eigentlich keine Rolle, von welcher App Sie sie herunterladen. Sie enthalten alle die gleichen Informationen, die sich auf alle Ihre Apps beziehen.

Jetzt müssen Sie diese Datei in App-Ebene (app /) suchen.

Bildbeschreibung hier eingeben

Wenn Sie diese Datei öffnen, sehen Sie, dass sie alle Informationen für alle Paketnamen enthält.

Ein Schwachpunkt ist das Plugin. Um es zum Laufen zu bringen, müssen Sie das Plugin am Ende Ihrer Datei finden. Also diese Linie ..

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

… muss unten auf der App build.gradle-Datei stehen.

Für die meisten der hier genannten gilt es auch für frühere Versionen. Ich hatte nie verschiedene Dateien für verschiedene Konfigurationen, aber jetzt mit der Firebase-Konsole ist einfacher, weil sie eine einzige Datei mit allem, was Sie für alle Ihre Konfigurationen benötigen, zur Verfügung stellen.

  • Firebase-Dokumente
  • Firebase Cloud Messaging
  • Firebase-Konsole

Schrieb einen mittleren Beitrag zu diesem Thema.

Hatte das ein ähnliches Problem (BuildTypes statt Flavors), und reparierte es so.

Nutzen Sie das Abhängigkeitsmanagementsystem von Gradle. Ich habe zwei Aufgaben erstellt, switchToDebug und switchToRelease . Erfordern, dass switchToRelease immer switchToRelease wird, dass switchToRelease auch ausgeführt wird. Gleiches zum Debuggen.

 def appModuleRootFolder = '.' def srcDir = 'src' def googleServicesJson = 'google-services.json' task switchToDebug(type: Copy) { def buildType = 'debug' description = 'Switches to DEBUG google-services.json' from "${srcDir}/${buildType}" include "$googleServicesJson" into "$appModuleRootFolder" } task switchToRelease(type: Copy) { def buildType = 'release' description = 'Switches to RELEASE google-services.json' from "${srcDir}/${buildType}/" include "$googleServicesJson" into "$appModuleRootFolder" } afterEvaluate { processDebugGoogleServices.dependsOn switchToDebug processReleaseGoogleServices.dependsOn switchToRelease } 

BEARBEITEN: Verwenden processReleaseFlavorGoogleServices Aufgabe processReleaseFlavorGoogleServices / processReleaseFlavorGoogleServices , um sie auf einer Pro-Flavor-Ebene zu ändern.

Nun, ich stoße auf das gleiche Problem und konnte keine perfekte Lösung finden. Es ist nur ein Workaround. Ich frage mich, wie Google nicht über Aromen nachgedacht hat …? Und ich hoffe, dass sie bald eine bessere Lösung vorschlagen werden.

Was mache ich:

Ich habe zwei Geschmacksrichtungen, in jeder habe ich die entsprechenden google-services.json: src/flavor1/google-services.json und src/flavor2/google-services.json .

Dann, in Buildgrodle, kopiere ich die Datei je nach Geschmack in das app/ Verzeichnis:

 android { // set build flavor here to get the right gcm configuration. //def myFlavor = "flavor1" def myFlavor = "flavor2" if (myFlavor.equals("flavor1")) { println "--> flavor1 copy!" copy { from 'src/flavor1/' include '*.json' into '.' } } else { println "--> flavor2 copy!" copy { from 'src/flavor2/' include '*.json' into '.' } } // other stuff } 

Einschränkung: Sie müssen myFlavor jedes Mal, wenn Sie für einen anderen Geschmack arbeiten möchten, manuell in Großbuchstaben ändern (weil er fest codiert ist).

Ich habe viele Möglichkeiten ausprobiert, um den aktuellen Build-Flavour wie afterEvaluate zu bekommen … konnte bis jetzt keine bessere Lösung bekommen.

Update, Eine andere Lösung: ein google-services.json für alle Geschmacksrichtungen:

Sie können auch verschiedene Paketnamen für jeden Geschmack haben und dann müssen Sie in der Google Developer Console nicht zwei verschiedene Apps für jeden Geschmack erstellen, sondern nur zwei verschiedene Kunden in derselben App. Dann haben Sie nur eine google-services.json , die Ihre beiden Clients enthält. Dies hängt natürlich davon ab, wie Sie das Backend Ihrer Aromen implementieren. Wenn sie nicht getrennt sind, wird diese Lösung Ihnen nicht helfen.

Laut der Antwort von ahmed_khan_89 können Sie Ihren Code in Produktaromen kopieren.

 productFlavors { staging { applicationId = "com.demo.staging" println "Using Staging google-service.json" copy { from 'src/staging/' include '*.json' into '.' } } production { applicationId = "com.demo.production" println "Using Production google-service.json" copy { from 'src/production/' include '*.json' into '.' } } } 

Dann müssen Sie die Einstellungen nicht manuell ändern.

Die Datei google-services.json benötigt keine Benachrichtigungen. Fügen Sie einfach eine Variable für jeden Geschmack in Ihrer build.gradle-Datei hinzu:

 buildConfigField "String", "GCM_SENDER_ID", "\"111111111111\"" 

Verwenden Sie diese Variable BuildConfig.GCM_SENDER_ID anstelle von getString (R.string.gcm_defaultSenderId) während der Registrierung:

 instanceID.getToken(BuildConfig.GCM_SENDER_ID, GoogleCloudMessaging.INSTANCE_ID_SCOPE, null); 

Ich verwende die Datei “google-services.json”, die hier erstellt wurde: https://developers.google.com/mobile/add?platform=android&cntapi=gcm&cnturl=https:%2F%2Fdevelopers.google.com%2Fcloud-messaging % 2Fandroid% 2Fclient & cntlbl = Fortfahren% 20Addieren% 20GCM% 20Support &% 3Fkonfiguriert% 3Dtrue

In der JSON-Struktur gibt es ein JSON-Array namens Clients. Wenn Sie mehrere Varianten haben, fügen Sie einfach die verschiedenen Eigenschaften hier hinzu.

 { "project_info": { "project_id": "PRODJECT-ID", "project_number": "PROJECT-NUMBER", "name": "APPLICATION-NAME" }, "client": [ { "client_info": { "mobilesdk_app_id": "1:PROJECT-NUMBER:android:HASH-FOR-FLAVOR1", "client_id": "android:PACKAGE-NAME-1", "client_type": 1, "android_client_info": { "package_name": "PACKAGE-NAME-1" } }, "oauth_client": [], "api_key": [], "services": { "analytics_service": { "status": 1 }, "cloud_messaging_service": { "status": 2, "apns_config": [] }, "appinvite_service": { "status": 1, "other_platform_oauth_client": [] }, "google_signin_service": { "status": 1 }, "ads_service": { "status": 1 } } }, { "client_info": { "mobilesdk_app_id": "1:PROJECT-NUMBER:android:HASH-FOR-FLAVOR2", "client_id": "android:PACKAGE-NAME-2", "client_type": 1, "android_client_info": { "package_name": "PACKAGE-NAME-2" } }, "oauth_client": [], "api_key": [], "services": { "analytics_service": { "status": 1 }, "cloud_messaging_service": { "status": 2, "apns_config": [] }, "appinvite_service": { "status": 1, "other_platform_oauth_client": [] }, "google_signin_service": { "status": 1 }, "ads_service": { "status": 1 } } } ], "client_info": [], "ARTIFACT_VERSION": "1" } 

In meinem Projekt verwende ich die gleiche Projekt-ID und wenn ich den zweiten Paketnamen in der obigen URL hinzufüge, liefert Google mir eine Datei mit mehreren Clients in den JSON-Daten.

Entschuldigung für die kompakten JSON-Daten. Ich konnte es nicht richtig formatieren …

Wir haben einen anderen Paketnamen für Debug-Builds (* .debug), also wollte ich etwas, das auf Flavor und BuildType basiert, ohne etwas Flavor-bezogenes in das Pattern von processDebugFlavorGoogleServices schreiben zu müssen.

Ich habe in jedem Flavor einen Ordner namens “google-services” erstellt, der sowohl die Debug-Version als auch die Release-Version der JSON-Datei enthält:

Bildbeschreibung hier eingeben

Fügen Sie im Abschnitt buildTypes Ihrer Gradle-Datei Folgendes hinzu:

  applicationVariants.all { variant -> def buildTypeName = variant.buildType.name def flavorName = variant.productFlavors[0].name; def googleServicesJson = 'google-services.json' def originalPath = "src/$flavorName/google-services/$buildTypeName/$googleServicesJson" def destPath = "." copy { if (flavorName.equals(getCurrentFlavor()) && buildTypeName.equals(getCurrentBuildType())) { println originalPath from originalPath println destPath into destPath } } } 

Es wird automatisch die richtige JSON-Datei im Stammverzeichnis Ihres App-Moduls kopieren, wenn Sie die Build-Variante wechseln.

Fügen Sie die beiden aufgerufenen Methoden hinzu, um den aktuellen Typ und den aktuellen Buildtyp im Stammverzeichnis von build.gradle abzurufen

 def getCurrentFlavor() { Gradle gradle = getGradle() String tskReqStr = gradle.getStartParameter().getTaskRequests().toString() Pattern pattern; if( tskReqStr.contains( "assemble" ) ) pattern = Pattern.compile("assemble(\\w+)(Release|Debug)") else pattern = Pattern.compile("generate(\\w+)(Release|Debug)") Matcher matcher = pattern.matcher( tskReqStr ) if( matcher.find() ) { println matcher.group(1).toLowerCase() return matcher.group(1).toLowerCase() } else { println "NO MATCH FOUND" return ""; } } def getCurrentBuildType() { Gradle gradle = getGradle() String tskReqStr = gradle.getStartParameter().getTaskRequests().toString() if (tskReqStr.contains("Release")) { println "getCurrentBuildType release" return "release" } else if (tskReqStr.contains("Debug")) { println "getCurrentBuildType debug" return "debug" } println "NO MATCH FOUND" return ""; } 

Das ist es, Sie müssen sich keine Gedanken über das Entfernen / Hinzufügen / Ändern von Aromen aus Ihrer Gradle-Datei machen, und es wird automatisch das debug oder das Release google-services.json bekommen.

Firebase unterstützt jetzt mehrere Anwendungs-IDs mit einer google-services.json-Datei.

Dieser Blogbeitrag beschreibt es im Detail.

Sie erstellen ein übergeordnetes Projekt in Firebase, das Sie für alle Ihre Varianten verwenden. Sie erstellen dann separate Android-Anwendungen in Firebase unter diesem Projekt für jede Anwendungs-ID, die Sie haben.

Wenn Sie alle Ihre Varianten erstellt haben, können Sie eine google-services.json herunterladen, die alle Ihre Anwendungs-IDs unterstützt. Wenn es relevant ist, die Daten separat zu sehen (z. B. Absturzberichte), können Sie dies mit einem Dropdown-Menü ändern.

Basierend auf der Antwort von ZakTaccardi, und wenn Sie nicht möchten, dass ein einzelnes Projekt für beide build.gradle , fügen Sie dies am Ende Ihrer build.gradle Datei hinzu:

 def appModuleRootFolder = '.' def srcDir = 'src' def googleServicesJson = 'google-services.json' task switchToStaging(type: Copy) { outputs.upToDateWhen { false } def flavor = 'staging' description = "Switches to $flavor $googleServicesJson" delete "$appModuleRootFolder/$googleServicesJson" from "${srcDir}/$flavor/" include "$googleServicesJson" into "$appModuleRootFolder" } task switchToProduction(type: Copy) { outputs.upToDateWhen { false } def flavor = 'production' description = "Switches to $flavor $googleServicesJson" from "${srcDir}/$flavor/" include "$googleServicesJson" into "$appModuleRootFolder" } afterEvaluate { processStagingDebugGoogleServices.dependsOn switchToStaging processStagingReleaseGoogleServices.dependsOn switchToStaging processProductionDebugGoogleServices.dependsOn switchToProduction processProductionReleaseGoogleServices.dependsOn switchToProduction } 

Sie benötigen die Dateien src/staging/google-services.json und src/production/google-services.json . Ersetzen Sie die Geschmacksnamen für die von Ihnen verwendeten.

Ich habe festgestellt, dass das Google-Dienste- Plugin für Projekte, die GCM hinzufügen möchten, ziemlich nutzlos ist. Es erzeugt nur die folgende Datei, die einfach Ihre Projekt-ID als String-Ressource hinzufügt:

 < ?xml version="1.0" encoding="utf-8"?>   111111111111  

Es scheint, dass Sie es nur benötigen, wenn Sie den Beispielcode direkt aus dem Handbuch ” Cloud Messaging für Android” kopieren. Hier ist die Beispielzeile:

 String token = instanceID.getToken(getString(R.string.gcm_defaultSenderId), GoogleCloudMessaging.INSTANCE_ID_SCOPE, null); 

Lösung

Wenn Sie in der Lage sein möchten, API-Projekte für verschiedene getToken() oder Produktvarianten zu wechseln, können Sie einfach Ihre eigenen Konstanten definieren und beim Aufruf der getToken() API die entsprechende auswählen.

 private static final String SENDER_ID = "111111111111"; private static final String SANDBOX_SENDER_ID = "222222222222"; String token = instanceID.getToken( BuildConfig.DEBUG ? SENDER_ID : SANDBOX_SENDER_ID, GoogleCloudMessaging.INSTANCE_ID_SCOPE, null); 

Für Produktaromen

Der obige Code funktioniert, um zwischen Debug- und Release-Builds zu wechseln. Für Produktaromen würden Sie unterschiedliche API-Schlüssel in einer Java-Quelldatei definieren und die Dateien in das entsprechende Produktaromaverzeichnis einfügen. Als Referenz: Gradel Build Varianten

Es ist kein zusätzliches Gradle Scripting erforderlich.

Google hat begonnen, einen anderen Paketnamen im Namen von “android_client_info” hinzuzufügen. Es sieht wie folgt aus in google-services.json

 "android_client_info": { "package_name": "com.android.app.companion.dev" } 

Die folgenden Schritte reichen aus, um die Auswahl von google-services.json zu ändern.

  1. Habe 2 Geschmacksrichtungen
  2. Fügen Sie der Google Analytics-Konfigurationsseite das Paket eines neuen Entwickler-Flavors hinzu und laden Sie google-services.json herunter.
  3. Beachten Sie, dass in der neuen Konfigurationsdatei beide Paket-IDs Ihres Flavors vorhanden sind
  4. Bereite einen deiner Geschmacksrichtungen vor.

Das ist es!..

1.) Was macht google-services.json wirklich?

Folgen Sie diesem: https://stackoverflow.com/a/31598587/2382964

2.) Wie wirkt sich die Datei google-services.json auf Ihr Android Studio-Projekt aus?

Folgen Sie diesem: https://stackoverflow.com/a/33083898/2382964

kurz für die zweite URL, wenn Sie google-services.json in Ihrem Projekt hinzufügen, muss ein automatisch generierter google-services Ordner für die debug Variante in diesem Pfad vorhanden sein

 app/build/generated/res/google-services/debug/values/values.xml 

3.) Was tun, um es zu schaffen?

Fügen Sie die google-services-abhängigkeit in project_level build.gradle hinzu. Sie können auch version 3.0.0 wenn Sie app_compact library verwenden.

 // Top-level build.gradle file classpath 'com.google.gms:google-services:2.1.2' 

jetzt in app_level build.gradle müssen Sie am unteren Rand hinzufügen.

 // app-level build.gradle file apply plugin: 'com.google.gms.google-services' 

4.) Wo google-service.json Datei in Ihrer Struktur zu setzen.

Fall 1.) Wenn du keinen build_flavor hast, lege ihn einfach in den /app/google-service.json Ordner.

Fall 2.) wenn Sie mehrere build_flavor haben und Sie verschiedene-verschiedene google_services.json Dateien in app/src/build_flavor/google-service.json .

Fall 3.) wenn Sie mehrere build_flavor haben und Sie haben eine einzelne google_services.json Datei in app/google-service.json .

Das Ziel des Google-Services-Plugins ist es, die Integration von Google-functionen zu vereinfachen.

Da es nur android-resources aus der Datei google-services.json generiert, negiert die zu komplizierte Gradle-Logik diesen Punkt, denke ich.

Wenn also die Google-Dokumente nicht sagen, welche Ressourcen für bestimmte Google-functionen benötigt werden, würde ich vorschlagen, die JSON-Datei für jeden relevanten Buildtyp / Flavor zu generieren, zu sehen, welche Ressourcen vom Plugin generiert werden und diese Ressourcen dann manuell platzieren in ihre jeweiligen src / buildtypeORflavor / res Verzeichnisse.

Löschen Sie anschließend die Verweise auf das Google-Services-Plug-in und die JSON-Datei und Sie sind fertig.

Für detaillierte Informationen über die functionsweise von google-services gradle-plugin siehe meine andere Antwort:

https://stackoverflow.com/a/33083898/433421

Vereinfachung was @Scotti sagte. Sie müssen Multiples-Apps mit unterschiedlichen Paketnamen für ein bestimmtes Projekt erstellen, abhängig von der Produktgestaltung.

Angenommen, Ihr Projekt ist ABC mit unterschiedlichen Produktaromen X, Y, wobei X den Paketnamen com.x und Y den Paketnamen com.y hat. Dann müssen Sie in der Firebase-Konsole ein Projekt ABC erstellen, in dem Sie zwei Apps erstellen müssen mit den Paketnamen com.x und com.y. Dann müssen Sie die Datei google-services.json herunterladen, in der es 2 Client-Info-Objekte gibt, die diese Pakete enthalten und Sie werden gut gehen.

Snippet des JSons würde so etwas sein

 { "client": [ { "client_info": { "android_client_info": { "package_name": "com.x" } { "client_info": { "android_client_info": { "package_name": "com.y" } ] } 

Sie haben viele Geschmack, so dass Sie viele Unterschied Paket-ID haben, richtig? Also, gehen Sie einfach auf die Seite, auf der Sie Ihre JSON-Datei einrichten und generieren, und konfigurieren Sie sie für jeden Paketnamen. Alles wird zur json Datei hinzugefügt.

Ich bin sehr faul, jetzt ein Bild zu posten, aber im Grunde:

  • Rufen Sie https://developers.google.com/mobile/add auf
  • Plattform wählen
  • Wähle deine App aus
  • WICHTIG : Geben Sie den Namen Ihres Flavor-Pakets in das Feld “Android-Paketname” ein.
  • … fahre fort, deine Konfigurationsdatei zu erhalten. Lade es herunter!

Wenn Sie die Datei konfigurieren, können Sie sehen, dass Google Ihnen den Server API Key + Sender ID anzeigt. Und es ist das gleiche für alle Pakete (Aromen)

Am Ende brauchen Sie nur eine JSON-Datei für alle Geschmacksrichtungen.

Noch eine Frage, die Sie testen müssen, wenn Sie sich registrieren, um ein Registrierungs-Token zu erhalten, prüfen Sie, ob es sich um einen Unterschied für jede Geschmacksrichtung handelt. Ich berühre es nicht, aber es sollte anders sein. Zu spät jetzt und ich so müde 🙂 Hope it help!

Hey Friends sucht auch nach Namen nur in Kleinbuchstaben, dann bekommst du diesen Fehler nicht

AKTUALISIERT:

In Bezug auf Firebase Setup mit Build-Varianten, lesen Sie bitte dieses Blog, das detaillierte statementen hat.

Ich verwende derzeit zwei GCM-Projekt-IDs im selben App-Paket. Ich habe den google-service.json meines ersten GCM-Projekts angelegt, aber ich wechsle vom ersten zum zweiten, indem ich nur die SENDER_ID ändere:

  String token = instanceID.getToken(SENDER_ID,GoogleCloudMessaging.INSTANCE_ID_SCOPE, null); 

(An dieser Stelle denke ich, dass die google-services.json nicht zwingend ist)

Inspiriert von @ ahmed_khan_89 Antwort oben. Wir können das direkt in der Datei speichern.

 android{ // set build flavor here to get the right Google-services configuration(Google Analytics). def currentFlavor = "free" //This should match with Build Variant selection. free/paidFull/paidBasic println "--> $currentFlavor copy!" copy { from "src/$currentFlavor/" include 'google-services.json' into '.' } //other stuff } 

Platzieren Sie Ihre “google-services.json” -Datei unter app / src / flavours bzw. in build.gradle der App, unter android add unter code

 gradle.taskGraph.beforeTask { Task task -> if (task.name ==~ /process.*GoogleServices/) { android.applicationVariants.all { variant -> if (task.name ==~ /(?i)process${variant.name}GoogleServices/) { copy { from "/src/${variant.flavorName}" into '.' include 'google-services.json' } } } } } 

In der Tat, Just one one google-services.json in MyApp/app/ Verzeichnis ist gut, keine Notwendigkeit für zusätzliche Skript mit com.google.gms:google-services:3.0.0 . Aber achten Sie darauf, die Datei google-services.json aus dem App-Verzeichnis MyApp/app/src/flavor1/res/ zu MyApp/app/src/flavor1/res/ , um den Fehlertyp Execution failed for task ':app:processDebugGoogleServices'. > No matching client found for package zu vermeiden Execution failed for task ':app:processDebugGoogleServices'. > No matching client found for package Execution failed for task ':app:processDebugGoogleServices'. > No matching client found for package