更新了 firebase 依赖并得到重复的 protobuf 类错误

Posted

技术标签:

【中文标题】更新了 firebase 依赖并得到重复的 protobuf 类错误【英文标题】:Updated firebase dependency and got duplicated protobuf classes error 【发布时间】:2020-10-27 01:58:13 【问题描述】:

更新我的一个 Firebase SDK 后出现此错误

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':app:checkDebugDuplicateClasses'.
> 1 exception was raised by workers:
  java.lang.RuntimeException: Duplicate class com.google.protobuf.AbstractMessageLite found in modules jetified-protobuf-javalite-3.11.0.jar (com.google.protobuf:protobuf-javalite:3.11.0) and jetified-protobuf-lite-3.0.1.jar (com.google.protobuf:protobuf-lite:3.0.1)
  Duplicate class com.google.protobuf.AbstractMessageLite$Builder found in modules jetified-protobuf-javalite-3.11.0.jar (com.google.protobuf:protobuf-javalite:3.11.0) and jetified-protobuf-lite-3.0.1.jar (com.google.protobuf:protobuf-lite:3.0.1)
  Duplicate class com.google.protobuf.AbstractMessageLite$Builder$LimitedInputStream found in modules jetified-protobuf-javalite-3.11.0.jar (com.google.protobuf:protobuf-javalite:3.11.0) and jetified-protobuf-lite-3.0.1.jar (com.google.protobuf:protobuf-lite:3.0.1)
  Duplicate class com.google.protobuf.AbstractParser found in modules jetified-protobuf-javalite-3.11.0.jar (com.google.protobuf:protobuf-javalite:3.11.0) and jetified-protobuf-lite-3.0.1.jar (com.google.protobuf:protobuf-lite:3.0.1)
  Duplicate class com.google.protobuf.AbstractProtobufList found in modules jetified-protobuf-javalite-3.11.0.jar (com.google.protobuf:protobuf-javalite:3.11.0) and jetified-protobuf-lite-3.0.1.jar (com.google.protobuf:protobuf-lite:3.0.1)
  Duplicate class com.google.protobuf.BooleanArrayList found in modules jetified-protobuf-javalite-3.11.0.jar (com.google.protobuf:protobuf-javalite:3.11.0) and jetified-protobuf-lite-3.0.1.jar (com.google.protobuf:protobuf-lite:3.0.1)
  Duplicate class com.google.protobuf.ByteBufferWriter found in modules jetified-protobuf-javalite-3.11.0.jar (com.google.protobuf:protobuf-javalite:3.11.0) and jetified-protobuf-lite-3.0.1.jar (com.google.protobuf:protobuf-lite:3.0.1)
...

我的应用现在依赖于protobuf-liteprotobuf-javalite,这会触发重复类错误。

【问题讨论】:

【参考方案1】:

此错误表示您正在为您的项目导入两个使用 Protobuf 的包,其中一个的发行版与另一个冲突。 如果您在 Flutter 上遇到此问题,您可以重新考虑 pubspec.yaml 中依赖项的版本号,并将“any”替换为确切的版本号。 例如,在“依赖项:”下更改:

barcode_scan: any

收件人:

barcode_scan: ^2.0.0

希望我能帮上忙。

【讨论】:

【参考方案2】:

我通过在 Gradle 依赖树中手动搜索并随后更新有问题的 SDK 解决了这个问题。

对于 android,请使用此行

gradle app:dependencies > dependency_tree.txt

或者如果你有一个 gradle 包装器:

./gradlew app:dependencies > dependency_tree.txt

app 是您的项目模块。

然后在dependency_tree.txt 文件中手动搜索proto 以查找有问题的SDK。

【讨论】:

【参考方案3】:

这让我很生气,因为com.google.android.gms:play-services-cast-framework:17.1.0 至少通过com.google.android.gms:play-services-cast-framework:19.0.0 传递地依赖于com.google.protobuf:protobuf-lite:3.0.1,通过它依赖于com.google.android.datatransport:transport-backend-cct:2.0.1com.google.android.datatransport:transport-backend-cct:2.1.0

来自 Spotify 的人对此提出了问题:https://issuetracker.google.com/issues/161831470

【讨论】:

【参考方案4】:

对我来说,我只是降级了我的com.google.firebase:firebase-firestore:21.5.0 -> com.google.firebase:firebase-firestore:21.4.3

【讨论】:

【参考方案5】:

在我的情况下,问题是依赖于 protobuf-liteandroidx.security:security-crypto:1.0.0-alpha02 库,它与 Firebase 使用的 protobuf-java-lite 冲突。更新这个库有帮助。

您可以通过在终端中调用./gradlew app:dependencies 来检查其他库是否依赖于冲突的protobuf-lite。然后 cmd+f 搜索proto

【讨论】:

你说得对,最新的加密库不再依赖于 protobuf dl.google.com/android/maven2/androidx/security/security-crypto/…【参考方案6】:

尝试降级

implementation 'com.google.firebase:firebase-firestore:21.4.3'
implementation 'com.google.firebase:firebase-config:19.1.4'

它适用于

implementation 'androidx.mediarouter:mediarouter:1.1.0'
implementation 'com.google.android.gms:play-services-cast-framework:18.1.0'

【讨论】:

【参考方案7】:

最近,Firebase Android 已从依赖旧的 protobuf-lite 迁移到依赖于 protobuf-javalite (github issue | PR implementing the change)。

您需要同时更新所有受此更改影响的 Firebase SDK,否则旧的 SDK 会将错误的依赖项拉入您的应用。

以下是受影响的 SDK 列表及其支持 protobuf-javalite 的版本

- com.google.firebase:firebase-firestore:21.5.0
- com.google.firebase:firebase-inappmessaging:19.1.0
- com.google.firebase:firebase-inappmessaging-display:19.1.0
- com.google.firebase:firebase-config:19.2.0
- com.google.firebase:firebase-abt:19.1.0
- com.google.firebase:firebase-perf:19.0.8

编辑:将firebase-perf 添加到列表中,因为它传递地依赖于配置并且也需要更新。

【讨论】:

我目前正在使用com.google.firebase:firebase-firestore:21.5.0。据我所知,这是最新版本,但我仍然收到错误。 您是否还依赖于列表中的任何其他 SDK?您需要更新所有这些。 没有。只有com.google.firebase:firebase-firestore:21.5.0。我最终降级到以前的版本。 您的应用程序中的其他非 Firebase 依赖项很可能正在拉取 protobuf-lite 依赖项。在此处查看如何获取您的应用程序的依赖关系树***.com/questions/21645071/…

以上是关于更新了 firebase 依赖并得到重复的 protobuf 类错误的主要内容,如果未能解决你的问题,请参考以下文章

Firebase 核心依赖错误(Flutter/Firebase)

使用 CocoaPods 添加 GeoFire 依赖项

添加 Firebase 依赖项后 Gradle 同步失败:打包 APK 期间文件重复

Flutter Firebase Auth 新更新 [重复]

Typescript:更新 Firebase 函数依赖项时出现编译错误

Firebase,只得到新的孩子[重复]