我正在开发一个Android应用程序,它必须使用gRPC和Firestore。但是,当我从'io.grpc'组依赖项(例如io.grpc:grpc-okhttp:1.7.0)和firestore依赖项(com.google.firebase:firebase-firestore:11.4.2)中添加了一个模块时构建gradle配置,我得到一个构建错误“无法合并dex”。使用'stacktrace'构建选项后,我发现问题是
Multiple dex files define Lio/grpc/internal/OobChannel$5;
如果firestore使用grpc-core模块,可能会发生这种情况,但是在树依赖项中没有一个类似的,我使用[androidDependencies] gradle任务。我试图像这样排除io.grpc:
implementation ('com.google.firebase:firebase-firestore:11.4.2') {
exclude group: 'io.grpc'
}
但是也有同样的错误。然后我想如果我从grpc模块依赖项中排除所有'io.grpc。'传递依赖项,并为内部类添加grpc-core。通过这种方式,我为测试
编写了丑陋的依赖项implementation 'com.google.firebase:firebase-firestore:11.4.2'
implementation('io.grpc:grpc-okhttp:1.7.0') {
exclude group: 'io.grpc'
}
implementation('io.grpc:grpc-protobuf-lite:1.7.0') {
exclude group: 'io.grpc'
}
implementation('io.grpc:grpc-stub:1.7.0') {
exclude group: 'io.grpc'
}
implementation 'io.grpc:grpc-core:1.7.0'
成功编译时我感到很惊讶,但是在启动应用程序之后,它崩溃了java.lang.RuntimeException:Firestore中的内部错误(0.6.6-dev)
Caused by: java.lang.NoSuchMethodError: No static method zzcyc()Lio/grpc/ManagedChannelProvider; in class Lio/grpc/ManagedChannelProvider; or its super classes (declaration of 'io.grpc.ManagedChannelProvider' appears in /data/app/com.zipr.test-2/split_lib_dependencies_apk.apk)
我使用gradle 3.0.0-rc1启用multidex支持。我删除了.gradle,构建目录,清理了重建项目,但我仍然有构建错误。我该怎么做才能解决这个问题?
答案 0 :(得分:4)
由于各种因素限制了我们在Google上构建Android SDK的方式,因此Firestore会在其自身内部编写gRPC副本。不幸的是,这是漏洞而且您正在遇到影响:11.4.2 Firestore SDK与任何外部gRPC不兼容: - (。
这实际上是Firestore Android SDK的首要问题,对不起,您已经遇到过它。