Kein passender Client für Paketnamen gefunden (Google Analytics) - mehrere productFlavors & buildTypes [geschlossen]


383

Kontext:

Ich versuche, Google Analytics für meine App einzurichten. (mit 4 benutzerdefinierten buildTypesund mehr als ein paar productFlavors)

Es funktioniert gut, wenn ich das auswähle Build Variant, auf das applicationIdgesetzt ist com.my.app.package.name(der Paketname, der beim Generieren des verwendet wird google-services.json). Aber meine anderen Geschmacksrichtungen haben andere Anwendungs-IDs.

Ich folgte dem offiziellen Devguide , um es einzurichten.

Fehler, den ich bekomme, wenn eine andere Build-Variante ausgewählt wird Build Variants Tab(die einen anderen applicationId(Paketnamen) hat, ist wie folgt:

Fehler: Ausführung für Aufgabe ': app: processAllcategoriesDebugfreeGoogleServices' fehlgeschlagen.

Für den Paketnamen 'com.my.app.package.name.debug' wurde kein passender Client gefunden.

Erläuterung der Fehlermeldung:

Im Aufgabennamen in der obigen Fehlermeldung Debugfreeist meine Gewohnheit buildTypeund Allcategorieseine meiner productFlavors.

Ich verstehe den Fehler und weiß, dass der Paketname sich von dem unterscheidet, den ich beim Generieren des JSON verwendet habe, aber genau das versuche ich zu umgehen.

Problem:

Jetzt google-services.jsonbefindet sich der appOrdner im Ordner, und daher kann ich sie nicht für jeden Produktgeschmack trennen, indem ich sie in den geschmacksspezifischen Quellensatzordner lege.

Fragen:

  1. Meine Gewohnheit byildTypezum Debuggen von Suffixen .debugan applicationId(Paketname). Gibt es eine Möglichkeit, wie ich es mit dem machen kann, google-services.jsondas meine Version hat applicationId(dh ohne das Suffix .debug) ?
  2. Gibt es eine Möglichkeit, mehrere Produktvarianten in derselben google-services.jsonDatei zu konfigurieren, ohne separate Dateien und Aufgaben zum Kopieren der erforderlichen Datei in einen appOrdner zu verwenden ? Ich weiß, dass dies taskwie in diesem Beitrag erwähnt möglich ist . Gibt es eine einfachere Möglichkeit, nur eine Datei zu haben oder die richtige Datei basierend auf der Gradle-Konfiguration auszuwählen?
  3. Ich sehe, dass das package_nameFeld in google-services.jsonden Paketnamen hat com.my.app.package.name. Kann ich mehrere Paketnamen manuell hinzufügen, um für alle Build-Varianten zu arbeiten? Wenn ja, wie geht das? In den Dokumentationen konnten keine Anweisungen gefunden werden.

1
Haben Sie speziell für Ihre dritte Frage eine Lösung gefunden?
Kumpel

Ich bin in ähnlichen Situationen. Ich benötige Analytics-Unterstützung nur für eine der Prod-Release-Versionen. Ich könnte die zusätzliche Abhängigkeit auf Prod-Flavour beschränken, aber es wird immer noch nach dem richtigen Paket als Teil der Son-Datei gesucht. Irgendein Vorschlag !
CoDe

1
Ich stehe auch vor dem gleichen Problem. Lassen Sie mich wissen, ob jemand die Lösung dafür findet.
Deepanshu Sinha

Antworten:


381

Überprüfen Sie Ihren Paketnamen auf Ihrer google-services.json. Er sollte mit Ihrem lokalen Paketnamen Ihrer App übereinstimmen

Beispiel

"client_info": {
    "mobilesdk_app_id": "1:6596814400689:android:65d6f25f5006145",
    "android_client_info": {
      "package_name": "com.my.app.package.name"
    }

In diesem Fall lautet mein lokaler Paketname com.my.app.package.name, daher habe ich auch meinen Paketnamen in google-services.json mit meinem lokalen Paketnamen geändert


google-services.json ist eine Datei !!! innerhalb eines App-Verzeichnisses. Sollte diese Datei mit Hilfe des Windows Explorers finden (zum Beispiel). Sollte diese Datei mit dem üblichen Editor bearbeiten.
user_MGU

Um

12
Nein ... wir alle wissen, dass google-services.json in dieser Ausgabe ungültig ist ... Wir möchten, wie dieses Problem in einer Build-Varianten-Situation gelöst werden kann !!
MJ Studio

Willkommen Yudi Karma
Muhammed Fasil

Wenn sich Ihre Aktivität in einem Unterpaket befindet, z. B.: Com.example.aaron.myproject22.Activities ...., müssen Sie in google-services.json den Paketnamen der client_info in com.example.aaron.myproject22 ändern Sie haben das Plugin "com.google.gms.google-services" am Ende von build.grade (Modul-App)
angewendet

224

Ich habe es gefunden:

Die Datei google-services.json befindet sich im Allgemeinen im Verzeichnis app /, aber ab Version 2.0.0-alpha3 der Plugin-Unterstützung wurde für Build-Typen hinzugefügt , wodurch die folgende Verzeichnisstruktur gültig wird:

app/src/
    main/google-services.json
    dogfood/google-services.json
    mytype1/google-services.json
    ...

Quelle

Quelle 2


16
Gibt es eine Möglichkeit, die Analyse für einen Build-Typ einfach zu deaktivieren? Ich möchte es für Debug deaktivieren? Ich dachte, es wäre deaktiviert, wenn ich keine Google Services-Datei hinzufüge, aber selbst wenn ich es deaktiviere, fragt es immer noch nach der Google Services-Datei.
Gokhan Arik

2
Was wäre der Unterschied zwischen den einzelnen Josn-Dateien, die in den einzelnen Geschmacksrichtungen hinzugefügt wurden?
Android

2
Gibt es eine Möglichkeit, Google-Dienste in einem Modul zu verwenden (das zwei Apps gemeinsam nutzen) ... weil ich nicht einmal eine Gradle-Synchronisierung durchführen kann, ohne eine Google-Dienstdatei für dieses Paket zu haben ... sollte die eingebettete App den JSON bereitstellen, aber nicht das Modul. ist das irgendwie möglich?
Georg

99

Für den Paketnamen 'com.tf' wurde kein passender Client gefunden. Ich bin mir ziemlich sicher, dass der "Paketname" in google-services.json nicht mit Ihrer "applicationId" in app gradle übereinstimmt.

App Gradle:

defaultConfig {
        applicationId "com.tf" //replace with the package_name in google-services.json =
        minSdkVersion 23
        targetSdkVersion 26
        versionCode 7
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }

google-services.json

"client_info": {
        "mobilesdk_app_id": "1:23978655351:android:2b2fece6b961cc70",
        "android_client_info": {
          "package_name": "in.ac.geu.debug"
        }
      },

Lösung : Stellen Sie einfach sicher, dass package_nameund applicationIdidentisch sein müssen.


4
Der Autor fragte nach einer Problemumgehung. Sie haben verschiedene Build-Typen mit unterschiedlichen applicationId
Dmitry Guselnikov

Sie haben die gültigste Lösung gegeben. Ein dickes Lob Mann !!
Devansh Sadhotra

Der application idIn-App-Gradle hat es geschafft
BlackPearl

69

Stellen Sie sicher, dass Ihr Paketname in der Datei "google-services.json" mit dem Paketnamen Ihrer Apps übereinstimmt.


4
häufiges Problem beim Verzweigen eines Repos für ein neues Projekt.
Zapnologica

1
Ja, wenn beide Paketnamen nicht gleich sind, als es nicht funktioniert
Priya

63

Ich habe die Lösung gefunden:

Wir müssen zwei "Apps" im Firebase-Projekt erstellen und können dann die JSON-Datei von einer beliebigen App herunterladen (ich habe sie von der aromatisierten App heruntergeladen). Es enthält die Daten für beide Apps. Wir können die JSON-Datei einfach in das Stammverzeichnis der App kopieren.

Quelle: https://firebase.googleblog.com/2016/08/organizing-your-firebase-enabled-android-app-builds.html


10
Dies ist die beste Antwort, da alle Produktaromen von einer JSON-Datei abgedeckt werden können. Keine Notwendigkeit, andere Quellensätze zu erstellen.
Tash Pemhiwa

2
Bitte beachten Sie, dass Sie die Apps im selben Projekt erstellen müssen. Die Projektübersicht in der oberen linken Ecke enthält ein Einstellungssymbol. Drücken Sie darauf und es öffnet sich die Registerkarte Allgemein, scrollen Sie nach unten und unter dem Abschnitt Ihre Apps gibt es eine Schaltfläche App
hinzufügen

Das größte Problem tritt auf, wenn Sie vergessen, Ihre google-service.json zu ändern und sie an prod zu senden.
Edgar Khimich

36

Sie müssen google-services.jsonin app/dir platzieren. Und für jeden Build-Typ sollte sich ein entsprechender Director im app/srcOrdner befinden.

Zum Beispiel, wenn Sie Release und Debug haben:

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

In allen google-services.json-Dateien sollten Sie die korrekte Angabe package_nameentsprechend dem Build-Typ angeben .

Zum Beispiel sollte es im Debug-Verzeichnis so sein {com.myapp}.debug


5
Anscheinend können Sie sogar einfach das Element des Hauptsatzes im "client"Array von ' duplizieren (ein Komma zwischen die Elemente einfügen) und nur den "package_name"Wert des neuen Elements ändern , um das .debugSuffix aufzunehmen. Dann wieder aufbauen. Es hat bei mir auf AS 2.3.3 funktioniert.
et_l

36

Dieser Fehler tritt auf, wenn in Ihrem Projekt eine Google Services Json-Datei heruntergeladen wurde, deren Paketname nicht mit dem Paketnamen Ihres Projekts übereinstimmt .

Kürzlich den Paketnamen des Projekts umbenannt?

Es werden alle Klassen aktualisiert, jedoch nicht die Gradle-Datei . Überprüfen Sie also, ob Ihr Paketname in Ihrem Gradle korrekt ist, und möglicherweise auch Manifest.


1
Danke, es war hilfreich
Sirwan Rahimi

32

Wann immer Sie erstellen oder aktualisieren package nameStellen Sie sicher, dass Ihr Paketname genau gleich ist [Groß- und Kleinbuchstaben sind wichtig]

Führen Sie den folgenden Schritt aus.

1). Check applicationIdin App Level gradleDatei,

2). Checken Sie package_nameIhre google-services.jsonDatei ein,

3). Checken Sie packageIhre AndroidManifestDatei ein

und zur vollständigen Bestätigung stellen Sie sicher, dass der Name Ihres Arbeitspaketverzeichnisses, dh ("com.example.app"), ebenfalls identisch ist.


2
Danke Bro, es hat bei mir funktioniert. In der Gradle-Datei auf App-Ebene war mein Paket anders. Als ich es geändert habe, hat es bei mir
funktioniert

Willkommen kommen @fazil
Ravi Vaniya

Sie müssen das packageManifest (und alle Dateien in allen Paketen) applicationIdnicht ändern , da sich die App-ID ändert.
CoolMind

22

Fügen Sie dem Anwendungspaket in Gradle zunächst ein Suffix hinzu:

yourFlavor {
   applicationIdSuffix "yourFlavor"
}

Dadurch wird Ihr Paket benannt

com.domain.yourapp.yourFlavor

Gehen Sie dann unter Ihrem aktuellen Projekt zu Firebase und fügen Sie eine weitere Android-App mit diesem Paketnamen hinzu.

Ersetzen Sie dann die vorhandene Datei google-services.json durch die neue, die Sie mit der neuen App generieren.

Dann erhalten Sie etwas, das mehrere Abschnitte "client_info" enthält. Sie sollten also so etwas haben:

"client_info": {
    "mobilesdk_app_id": "YOUR APP INFO",
    "android_client_info": {
      "package_name": "com.domain.yourapp"
    }
  }

"client_info": {
    "mobilesdk_app_id": "YOUR APP INFO - will be different then other app info",
    "android_client_info": {
      "package_name": "com.domain.yourapp.yourFlavor"
    }
  }

Das ist die richtige Antwort! Sie benötigen beide Apps (IDs) in der Datei google-services.json.
Bojan Hrnkas

das ist der Weg. +1, hier ist eine alte Diskussion , die sich auf dieses Problem bezieht
lasec0203

Einfach und unkompliziert.
Umair

20

Überprüfen Sie, ob client_idund package_namein google-services.json ein korrekter Wert entsprechend Ihrem Paketnamen vorhanden ist.

Sie sollten die erwähnte Datei mit dem entsprechenden Paketnamen im Feld client_idund in das Flavours-Verzeichnis einfügen package_name.


20

1.Prüfen Paketname und Anwendungs - ID sollte gleich sein

2.Überprüfen google-services.json, der im App-Ordner verfügbar ist


18

Stellen Sie sicher, dass Sie ApplicationId in der Gradle-Datei umbenennen, nachdem Sie Ihr Paket umbenannt haben


2
Rettete mich. Vielen Dank.
VipulKumar

Ich
bin

1
Vielen Dank! das hat mein Problem gelöst.
Riddhi

Mein Problem wurde auch gelöst!
Kanagalingam

17

Öffnen Sie Ihre Google-services.json-Datei und suchen Sie in der Datei nach diesem Abschnitt:

"client": [
{
  "client_info": {
    "mobilesdk_app_id": "1:857242555489:android:46d8562d82407b11",
    "android_client_info": {
      "package_name": "com.example.duke_davis.project"
    }
  }

Überprüfen Sie, ob das Paket mit Ihrem Paketnamen übereinstimmt. Meins war anders, also habe ich es geändert und es hat funktioniert.


Arbeitete :) Danke
Solution Spirit

11

Ich komme von React Native, aber ich denke, dass dies auch für diese Frage gilt. Konkretisieren.

android/app/build.gradleSuchen Sie in der Datei nach applicationId(innerhalb android, defaultConfig)

und stellen Sie sicher, dass dieser Wert der gleiche ist

client[0]client_info.android_client_info.package_name

als der Wert innerhalb google-services.json.


Ich auch, danke, das ist am zutreffendsten
Jason Sebring

9

Sie müssen auch den Paketnamen in ändern google-services.json


8

Wenn Ihr Paketname in der Datei Google-services.json in Ordnung ist, wechseln Sie zur Datei gradle.properties. Ändern Sie dann Ihre APPLICATION_ID = "com.yourpackage.name"


5

Ich denke, Sie haben die Firebase-JSON-Datei "google-services" .json mit der neuen Datei hinzugefügt. Stellen Sie sicher, dass Sie eine neue Datei erstellen. Überprüfen Sie den Link zum Erstellen einer JSON-Datei aus Firebase und sie sollte mit Ihrem Paketnamen übereinstimmen

Zweitens: Wenn Sie den Paketnamen ändern, verwenden Sie die Option "Im Pfad ersetzen", wenn Sie mit der rechten Maustaste unter Dateien klicken, wenn Sie das Projekt aus der Dropdown-Liste auswählen. Sie müssen im gesamten Projekt nach dem Paketnamen suchen und diesen ersetzen!

Hoffe das hilft !


4

Wenn nichts davon für einen von euch funktioniert hat, war mein Problem mit einem Paketnamen, der nicht mit einem 'com' begann. hat es geändert, jetzt funktioniert es.

Ich hoffe, das hilft


arbeitete für mich, danke
Hasan Shouman

4
android {
    compileSdkVersion 27
    defaultConfig {
        applicationId "com.package.name"
        minSdkVersion 19
        targetSdkVersion 27
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }

Stellen Sie sicher, dass die Anwendungs-ID von Gradle.app mit Ihrem Paketnamen übereinstimmt. Mein Problem war dies und ich löste es auf diese Weise


3

Gehen Sie in Ihr Projektverzeichnis und erstellen Sie Ordner im Pfad app / src, in denen Ihre Produktvarianten benannt sind (z. B. Alpha, Beta, Store oder wie auch immer Ihre Geschmacksrichtung lautet). Kopieren Sie dann Ihre Datei google-services.json in jeden Ordner. Vergessen Sie nicht, das Feld "Paketname" in der von Ihnen untergeordneten Datei "google-services.json" der einzelnen Produktvarianten zu ändern.


3

Gehen Sie zur Datei google-services.json und überprüfen Sie im Client-Teil den Paketnamen und vergleichen Sie ihn mit dem Namen des App-Pakets. Wenn sie unterschiedlich sind, ändern Sie den Namen des Client-Pakets entsprechend dem Namen Ihres App-Pakets. Es hat bei mir funktioniert. Viel Glück.

google-services.json file-> "package_name": "com.example.application.tracker"

App-Paketname-> Paket "com.example.application.tracker";


2

Ich habe es gelöst, indem ich zwei Quellensätze erstellt habe, einen kostenlosen und einen kostenpflichtigen. Beide Ordner enthalten den erforderlichen Java-Code und die erforderlichen Ressourcendateien, die an die Anforderungen der jeweiligen Version angepasst werden. Beispielsweise möchten Sie AdMob-Code im bezahlten Code sowohl aus Java-Klassen als auch aus Layoutdateien entfernen.


2

Ich habe das gleiche Problem gelöst, indem ich die Datei erneut synchronisiert habe google-services.json.

Extras> Firebase> Mit Firebase verbinden> Synchronisieren


wo hast du das gemacht Was ersetzt es genau? Bildschirmfoto?
Nasenbaer

Sie können dies in Android Studio tun (das Firebase-Plugin muss aktiviert sein). Es aktualisiert die Datei google-services.json.
Nabin Bhandari

2

Ich habe das gleiche Problem gelöst, hier ist eine einfache Lösung: Wenn Sie eine Firebase- Verbindung erstellen , befolgen Sie diese Richtlinien:

  • Fügen Sie Ihren Anwendungsnamen in firebase hinzu

  • Fügen Sie Ihren Anwendungspaketnamen hinzu (schreiben Sie denselben Paketnamen, den Sie in der App verwenden).

  • Wenn Firebase die Datei google-services.json erstellt, laden Sie sie einfach herunter und fügen Sie sie in Ihren App-Ordner ein

  • Synchronisiere dein Projekt Problem ist gelöst :)

    Vielen Dank


2

Ich bekomme dieses Problem auch, wenn ich den Paketnamen meiner Anwendung ändere.

Suchen Sie in Ihrem Android Studio-Projekt die Datei "google-services.json". Öffne es. und überprüfen Sie, ob der Paketname Ihrer Anwendung mit dem in dieser Datei angegebenen übereinstimmt.

Der Paketname Ihrer Anwendung und der Paketname in der Datei "google-services.json" müssen identisch sein.


1

Dies bedeutet, dass Ihre Datei google-services.json entweder nicht zu Ihrer Anwendung gehört (Haben Sie google-services.json für eine andere App heruntergeladen?). Um dies zu lösen, gehen Sie wie folgt vor:

1: Melden Sie sich bei Firebase an und öffnen Sie Ihr Projekt. 2: Klicken Sie auf das Symbol Einstellungen und wählen Sie Projekteinstellungen. 3: Wählen Sie auf der Karte Ihre Apps den Paketnamen der App aus, für die Sie eine Konfigurationsdatei benötigen, aus der Liste. 4: Klicken Sie auf google-services.json. Fügen Sie nach Abschluss des Downloads die neue Datei google-services.json zu Ihrem Projektstammordner hinzu und ersetzen Sie die vorhandene. Oder löschen Sie einfach die alte. Es ist ganz normal, die Datei google-services.json für Ihr erstes Projekt herunterzuladen und dann anzunehmen oder zu vergessen, dass diese spezielle Datei google-services.json nur für Ihr aktuelles Projekt zugeschnitten ist, da keine andere, da alle Projekte einen eindeutigen Paketnamen haben.


1

Prüfen Sie, ob applicationIdSuffixin Ihrer App build.gradle Datei. Überprüfen Sie, ob Text mit Ihrem Text verknüpft ist applicationId. Wenn ja, entfernen Sie es.


1

Sie können dies tun, um dieses Problem zu lösen.

Geben Sie hier die Bildbeschreibung ein


3
Dadurch wird das Problem maskiert, anstatt es zu lösen. Weitere Antworten finden Sie in anderen Antworten.
Vadim Kotov

Bitte verwenden Sie Code anstelle eines Screenshots. In meinem Fall ist Ihre Antwort gut, da ich nur ein "Modell" eines Anwendungsklons erstellen möchte.
user2078023

-1

Nur einfach. Melden Sie sich von Android Studio ab und schließen Sie es vollständig. Öffnen Sie Android Studio erneut und melden Sie sich erneut bei Android Studio an.

Versuchen Sie dann, über die Android Studio-IDE eine Verbindung zu Firebase herzustellen. Dieses Verfahren hat bei mir funktioniert.


Dies funktioniert nicht, wenn google-services.json vorhanden ist. Wir müssen google-services.json löschen, wenn es existiert.
Dika

Dies funktioniert einmal, nachdem Sie den Paketnamen in der JSON-Datei geändert haben. Bevor Sie diesen speichern, müssen Sie das Android Studio schließen, die JSON-Datei speichern und das Studio neu starten.
Anish Kumar

-1

Es ist einfach, dies zu lösen: Stellen Sie einfach sicher, dass der Paketname in Ihrer app / build.gradle-Datei mit dem Paketnamen in Ihrer App Manifest-Datei übereinstimmt. und stellen Sie sicher, dass der Paketname korrekt ist. Das sollte das lösen

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.