it-swarm.com.de

Fehler: AGPBI: Programmtyp bereits vorhanden: com.google.Android.gms.auth.api.signin.internal.zzg

In meiner Adrdoi-App, wo ich Google Login und Firebase Cloud Messaging verwende, erhalte ich folgende Fehlermeldung:

AGPBI: {"kind":"error","text":"Program type already present: com.google.Android.gms.auth.api.signin.internal.zzg","sources":[{}]}

Bedeutet das, dass die google auth lib bereits woanders verwendet wurde? Von was ist das?

8
Ralf Wickum

Ich hatte das gleiche Problem.

Geändert durch Ändern

implementation 'com.google.firebase:firebase-auth:11.0.6'

zu

implementation 'com.google.firebase:firebase-auth:11.2.2'

Das Problem trat auf, nachdem das Firebase-Plugin unter Android 3 hinzugefügt wurde. 

Android Plugin-Version wird automatisch hinzugefügt

implementation 'com.google.firebase:firebase-auth:11.0.6' 

wir müssen jedoch die Version auf 11.2.2 ändern

 Error Log

4
Swaminathan

Gehen Sie zurück zur 11.2.2-Version von Firebase.

Zum Beispiel:

Von:

'com.google.firebase:firebase-core:11.4.0'

zu

'com.google.firebase:firebase-core:11.2.2'

UPDATE

Sogar 11.6.0 von Firebase wurde veröffentlicht, dieses Problem besteht immer noch. Ich fand das Hinzufügen heraus 

compile 'com.google.firebase:firebase-core:11.6.0'    
compile 'com.google.Android.gms:play-services-location:11.6.0'  

problem verschwindet.

2
JECon

FWIW Ich hatte einen ähnlichen Fehler mit einer anderen Bibliothek, die ich in meiner App verwende, und die Problemumgehung für mich war, Android.enableD8=false in gradle.properties festzulegen.

Oder ein Upgrade von AGP 3.0.0-beta3 auf beta6.

2
Eric

Stellen Sie sicher, dass alle Firebase-Bibliotheken dieselbe Version haben

0
kreker

Ich habe bis letzte Woche die Downgrade-Methode verwendet.

Vor etwa 2 Wochen hat die Firebase-Serie die Version 15.0.0+. Alle, die versuchen, diesen Fehler zu vermeiden, sollten ein Update auf die neueste Version und kein Downgrade in Betracht ziehen.


Hinweis: Einige Drittanbieter-Pakete enthalten auch firebase oder gcm. Sie sollten auch deren konsistente Version kennen. (wie AccountKit von Facebook)

0
Wesely

Ich werde mit dem ursprünglichen Beitrag sprechen, der gefragt hat:

frage 1: Bedeutet das, dass die google auth lib bereits woanders verwendet wurde?

Ja, es bedeutet, dass Sie zwei oder mehr Codemodule (Bibliotheken) hinzugefügt haben, die beide denselben vollständig qualifizierten Klassennamen haben. Android mag das nicht, da es eine Unklarheit darüber gibt, welches verwendet werden sollte.

frage 2: Von was ist das?

Es stammt aus dem enthaltenen Quellcode oder einer von Ihnen hinzugefügten Abhängigkeit.

Das Problem, das die Leute haben, versucht herauszufinden, woher die doppelten Klassen kommen. Der einfachste erste Schritt ist, den folgenden Befehl auszugeben :

gradlew app: Abhängigkeiten

suchen Sie dann nach dem Namen, dessen Name doppelt ist. Stellen Sie sicher, dass sie, wenn sie aus einem Repository stammen, dieselbe Version haben. Wenn es sich nicht um dieselbe Version handelt, haben Sie herausgefunden, woher Ihre Duplikate stammen. Manchmal zeigt diese Technik nicht, woher das Duplikat stammt. Wenn Sie eine Bibliothek aus einem Repository einschließen, laden Sie diese Bibliothek und ihre Abhängigkeiten tatsächlich. Das Repository enthält nicht nur die JAR-Datei, sondern auch eine pom.xml-Datei, in der die Abhängigkeiten definiert sind. Die Ausgabe "gradlew app: dependencies" zeigt diese zusätzlichen Abhängigkeiten nicht. Darüber hinaus kann jede Abhängigkeit weitere Abhängigkeiten haben. Vielleicht hat gradle eine Möglichkeit, Repository-Abhängigkeiten zu durchqueren, aber ich weiß es nicht, und ich glaube nicht. In meinem Fall, als ich eine ähnliche Fehlerursache hatte, habe ich in der pom.xml einiger Maven-Repository-Bibliotheken nachgesehen, von denen ich eine Abhängigkeit hatte. In meinem Fall hatte ich zwei Bibliotheksmodule, die eine Abhängigkeit von "org.osgi: org.osgi.annotation: 6.0.0" hatten, und ich hatte ein Bibliotheksmodul, das eine Abhängigkeit von "org.Apache.felix: org.Apache" hatte .felix.resolver: 2.0.0 ". Als ich die pom.xml-Datei für die Resolver-Bibliothek sah, stelle ich fest, dass sie von "org.osgi: osgi.annotation: 6.0.1" abhängig war. Zum Glück fiel es mir leicht zu erraten, dass diese verschiedene Implementierungen für dieselbe Klasse enthielten. Manchmal sind die Namen nicht nahe genug, um zu erkennen, dass sie Klassenkonflikte enthalten. Wenn Sie in diese Situation geraten, müssen Sie in diese Repository-Gläser schauen, um zu sehen, ob die Klasse die Klasse enthält, die als bereits vorhanden gemeldet wird.

In einigen der Antworten, die ich oben gesehen habe, haben die Leute die Implementierungsabhängigkeiten nur adhoc verändert, bis sie eine gefunden haben, die funktioniert. Ich hoffe, meine Antwort gibt Ihnen einen besseren Einblick, wie Sie die Duplikate finden können. Wäre es nicht großartig in Android Studio, dass Sie gerade gesagt haben, woher die konfliktreichen Klassen kommen?

0
Tom Rutchik