错误:AGPBI:程序类型已存在:com.google.android.gms.auth.api.signin.internal.zzg

时间:2017-09-18 10:03:40

标签: android firebase firebase-authentication firebase-cloud-messaging

在我使用Google登录和Firebase云消息传递的Adrdoi应用中,我收到以下错误消息:

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

这是否意味着google auth lib已经在其他地方使用过?那是什么?

6 个答案:

答案 0 :(得分:4)

我遇到了同样的问题。

通过更改

进行更改
implementation 'com.google.firebase:firebase-auth:11.0.6'

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

在Android 3上添加firebase插件后发生了这个问题。

Android插件版自动添加

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

但我们需要将版本更改为11.2.2

Error Log

答案 1 :(得分:2)

FWIW我在我的应用中使用了不同的库时出现了类似的错误,而我的解决方法是在gradle.properties中设置android.enableD8=false

或从AGP 3.0.0-beta3升级到beta6。

答案 2 :(得分:2)

返回11.2.2版本的firebase。

例如:

自:

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

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

<强>更新

即使11.6.0的firebase已经发布,这个问题依然存在。我发现了添加

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

问题消失了。

答案 3 :(得分:0)

确保所有firebase库具有相同的版本

答案 4 :(得分:0)

直到上周我才使用降级方法。

大约两周前,Firebase系列发布版本为15.0.0+,任何试图避免此错误的人都应该考虑更新到最新版本而不是降级。

注意:某些第三方软件包还包括firebasegcm,您也应该了解它们的版本是否一致。 (例如来自Facebook的AccountKit

答案 5 :(得分:0)

我将询问原始帖子:

问题1:这是否意味着google auth库已在其他地方使用?

是的,这意味着您添加了两个或两个以上具有相同完全限定类名的代码模块(库)。 Android不喜欢这样做,因为应该使用哪个模棱两可。

问题2:那是什么?

它来自您随附的源代码或您添加的依赖项。

人们试图找出的问题是重复类来自何处。最简单的第一步是发出以下命令 :

gradlew应用程序:依赖项

然后搜索其重复的名称。如果它们来自存储库,请确保它们具有相同的版本。如果它们不是同一版本,那么您已找到重复项的来源。有时,此技术无法揭示重复项的来源。如果包含来自存储库的库,则实际上是在加载该库及其任何依赖项。该存储库不仅具有jar文件,还具有一个pom.xml文件,该文件定义了其依赖项。 “ gradlew app:dependencies”输出未显示那些其他依赖项。另外,每个依赖项可以具有其他依赖项。也许gradle有一种遍历存储库依赖项的方法,但是我不知道如此,我认为没有。就我而言,当我遇到类似的错误原因时,我调查了一些我依赖的Maven存储库库的pom.xml。就我而言,我有两个依赖于“ org.osgi:org.osgi.annotation:6.0.0”的库模块,而我有一个依赖于“ org.apache.felix:org.apache”的库模块。 .felix.resolver:2.0.0“。当我查看解析器库的pom.xml文件时,我注意到它与“ org.osgi:osgi.annotation:6.0.1”有关。幸运的是,我很容易猜到它们包含同一类的不同实现。有时,名称距离不够近,以至于您无法识别它们包含类冲突。遇到这种情况时,您需要查看那些存储库jar,以查看do是否包含被报告为已存在的类。

在我上面看到的一些答案中,人们只是在随意更改实现依赖项,直到找到可行的依赖项为止。希望我的回答可以使您更好地了解如何找到重复项。只是告诉您冲突类来自何处,这在Android Studio中不是很好吗?