web-dev-qa-db-fra.com

Erreur: AGPBI: type de programme déjà présent: com.google.Android.gms.auth.api.signin.internal.zzg

Dans mon application Adrdoi, où j'utilise Google Login et Firebase Cloud Messaging, le message d'erreur suivant s'affiche:

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

Cela signifie-t-il que la librairie google auth a déjà été utilisée ailleurs? C'est quoi ça?

8
Ralf Wickum

J'ai eu le même problème.

Changé en changeant

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

à

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

Le problème est survenu après l’ajout du plugin Firebase sur Android 3. 

La version du plugin Android ajoute automatiquement

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

mais nous devons changer la version à 11.2.2

 Error Log

4
Swaminathan

Retournez à la version 11.2.2 de Firebase.

Par exemple:

De:

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

à

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

METTRE À JOUR

Même 11.6.0 de Firebase a été publié, ce problème existe toujours. J'ai découvert en ajoutant 

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

le problème disparaît.

2
JECon

FWIW J'ai eu une erreur similaire avec une bibliothèque différente que j'utilise dans mon application, et la solution pour moi consistait à définir Android.enableD8=false dans gradle.properties.

Ou passer de AGP 3.0.0-beta3 à beta6.

2
Eric

Assurez-vous que toutes les bibliothèques Firebase ont la même version

0
kreker

J'utilisais la méthode de rétrogradation jusqu'à la semaine dernière.

Il y a environ 2 semaines, la série Firebase a la version 15.0.0+, toute personne essayant d'éviter ce bogue devrait envisager de mettre à jour sa dernière version plutôt que de la rétrograder.


Remarque: Certains packages tiers incluent également firebase ou gcm. Vous devez également être conscient de la cohérence de leur version. (comme AccountKit de Facebook)

0
Wesely

Je parlerai au message original qui demandait:

question 1: cela signifie-t-il que l'authentification google lib a déjà été utilisée ailleurs?

Oui, cela signifie que vous avez ajouté deux ou plusieurs modules de code (bibliothèques) portant le même nom de classe complet. Android n'aime pas cela, car il y aurait une ambiguïté quant à celle qui devrait être utilisée.

question 2: ça vient de quoi?

Cela provient de votre code source inclus ou d'une dépendance que vous avez ajoutée.

Le problème que les gens essaient de comprendre est l’origine des classes dupliquées. La première étape la plus facile consiste à exécuter la commande suivante .__:

application gradlew: dépendances

faites ensuite une recherche du nom qu’il dit est dupliqué. Assurez-vous que s'ils proviennent d'un référentiel, ils ont la même version. S'ils ne correspondent pas à la même version, vous avez alors trouvé l'origine de vos doublons. Parfois, cette technique ne révèle pas d'où proviennent les doublons. Si vous incluez une bibliothèque à partir d'un référentiel, vous chargez cette bibliothèque et ses dépendances. Le référentiel contient non seulement le fichier jar, mais également un fichier pom.xml qui définit ses dépendances. La sortie "gradlew app: dependencies" n'indique pas ces dépendances supplémentaires. De plus, chaque dépendance peut avoir des dépendances supplémentaires. Peut-être que gradle a un moyen de traverser les dépendances du référentiel, mais je ne le sais pas, et je ne le pense pas. Dans mon cas, lorsque la cause de l'erreur était similaire, j'ai consulté le fichier pom.xml de certaines bibliothèques de référentiels maven sur lesquelles j'avais une dépendance. Dans mon cas, deux modules de bibliothèque dépendaient de "org.osgi: org.osgi.annotation: 6.0.0" et un module de bibliothèque dépendait de "org.Apache.felix: org.Apache .felix.resolver: 2.0.0 ". Lorsque j'ai consulté le fichier pom.xml pour la bibliothèque de résolveur, j'ai remarqué qu'il dépendait de "org.osgi: osgi.annotation: 6.0.1". Heureusement, il était assez facile pour moi de deviner que celles-ci contenaient des implémentations différentes pour la même classe. Parfois, les noms ne sont pas assez proches pour que vous reconnaissiez qu'ils contiennent des conflits de classes. Si vous vous trouvez dans cette situation, vous devez examiner ces fichiers JAR du référentiel pour savoir s'ils contiennent la classe signalée comme étant déjà existante.

Dans certaines des réponses que j'ai vues ci-dessus, des personnes changeaient de manière ponctuelle des dépendances de mise en œuvre jusqu'à ce qu'elles en trouvent une qui fonctionnait. J'espère que ma réponse vous permettra de mieux comprendre comment trouver les doublons. Ne serait-il pas formidable dans Android Studio de vous dire d'où viennent les classes en conflit?

0
Tom Rutchik