在模块中发现重复类com.google.android.gms.internal.firebase_messaging.zza。

9

在 Android 编译过程中出现以下错误,请帮忙解决。

"Duplicate class com.google.android.gms.internal.firebase_messaging.zza found in modules jetified-firebase-iid-19.0.0-runtime.jar (com.google.firebase: firebase-iid: 19.0.0) and jetified-firebase-messaging-22.0.0-runtime.jar (com.google.firebase:firebase-messaging:22.0.0)"

7个回答

16
在build.gradle文件中:
implementation "com.google.firebase:firebase-iid:21.1.0"

这可能有效,但不是最佳选择。版本2.2.0.0有重大变化,建议修复问题而不是添加此依赖项。他们删除了已弃用的FirebaseInstanceId,并将其替换为Firebase安装。https://firebase.google.com/support/release-notes/android#messaging_v22-0-0 - Aegir

5

以上答案都不正确,也没有一个能解决问题。问题出在传递依赖项上。 你需要检查哪些库引起了问题,并进行类似以下操作:

implementation 'com.google.firebase:firebase-messaging:22.0.0'
implementation ('com.google.firebase:firebase-iid:21.1.0') {
    transitive = true
}

3

BOM 31.x目前存在这个问题。

请参见此问题:
https://github.com/firebase/firebase-android-sdk/issues/4206

已通过以下问题解决,但尚未正式发布:
https://github.com/firebase/firebase-android-sdk/pull/4225

评论:
尚未解决,31.0.1只包含修复Crashlytics崩溃错误的补丁。这就是为什么此问题仍然处于打开状态。团队将制定一个解决方案来关闭此问题,然后发布一个新版本,并在发布说明中指出已解决该问题。 https://firebase.google.com/support/release-notes/android - 在此处

当前的解决方法是在新的BOM版本发布之前显式添加iid版本:

implementation platform('com.google.firebase:firebase-bom:31.0.0')

implementation 'com.google.firebase:firebase-functions'
implementation 'com.google.firebase:firebase-messaging'
implementation 'com.google.firebase:firebase-iid:21.1.0'

3
我使用Firebase Android BoM解决了这个问题。
在我的情况下,问题取决于消息函数的共存。
因此,从这个方面来看:
implementation 'com.google.firebase:firebase-messaging:22.0.0'
implementation 'com.google.firebase:firebase-functions-ktx:20.0.0'

到这个:
implementation platform('com.google.firebase:firebase-bom:28.2.1')
implementation 'com.google.firebase:firebase-functions-ktx'
implementation 'com.google.firebase:firebase-messaging'

1
我正在使用版本为 31.0.0 的 BoM,但仍然存在问题。 - X09
对我来说一样,我使用31.0.2。@X09,你解决了吗? - chrisonline

2

使用 react-native-push-notification ^3.1.9,我遇到了相同的错误。

解决方法:

在项目的 build.gradle 中:

buildscript {
    ext {
        googlePlayServicesVersion = "17.0.0"
        firebaseMessagingVersion = "20.1.0"
        firebaseVersion = "20.1.0"

        // other settings
    }
 // other settings
}

在项目/app/build.gradle文件中:

dependencies {
    implementation "com.google.firebase:firebase-messaging:20.1.0"
    // other implementations
}

原因: react-native-push-notification 包指定依赖于 firebase-messaging:+,要求获取最新版本。因此,gradle 上传了最新的 com.google.firebase:firebase-messaging:22.x.x,其中声明了已经存在于 firebase-iid 中的类。

2

我也遇到了同样的问题。

我通过重新定义我的依赖项实现来解决它,像这样:


在 build.gradle 中:

implementation 'com.google.firebase:firebase-analytics:19.0.0'
implementation 'com.google.firebase:firebase-auth:17.0.0'
implementation 'com.google.firebase:firebase-messaging:22.0.0'

请注意我的buildscript配置:com.android.tools.build:gradle:4.2.1

然后,清理并重新构建项目。

您能分享更多有关您的设置的信息吗?


我将所有Firebase的npm模块更新到最新版本并修复了问题。这些包包括“messaging”、“IId”、“dynamic-links”和“app”。 - Sanj Ediris

1

如果你不想使用 firebase-bom,因为你不信任 firebase 来保持所有适当的版本检查,则可以删除重复项。

  1. 运行 ./gradlew app:dependencies(或者替换 app 为你的模块)
  2. 搜索 iid:19.0.0(或者任何让你出现问题的版本)
  3. 向上滚动列表,查看库的来源。

你应该会看到像这样的东西 \--- com.google.firebase:firebase-iid:19.0.0

  1. 继续向下滚动,直到找到依赖和模块来源,标记为 + ,例如 (+--- com.google.firebase:firebase-ml-vision)
  2. 在你的项目中找到该依赖并删除重复的 iid
api("com.google.firebase:firebase-ml-vision:$version") {
    exclude group: 'com.google.firebase', module: 'firebase-iid'
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接