android - 由于 GRPC 和 R8,Firestore (0.6.6-dev) 出现内部错误

标签 android firebase grpc android-r8

更新我的 Firebase 依赖项后,我的应用程序停止运行。崩溃报告显示了这个日志:

java.lang.RuntimeException: Internal error in Firestore (0.6.6-dev).
at com.google.firebase.firestore.g.b.a(com.google.firebase:firebase-firestore@@17.0.5:324)
at com.google.firebase.firestore.g.d.run(com.google.firebase:firebase-firestore@@17.0.5)
at android.os.Handler.handleCallback(Handler.java:751)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6165)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:888)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:778)
 Caused by: java.lang.AbstractMethodError: abstract method "b.d.g.z$d b.d.g.z$d.a(int)"
at b.d.g.u.a(GeneratedMessageLite.java:1319)
at b.d.c.a.y.a(com.google.firebase:firebase-firestore@@17.0.5:8440)
at b.d.c.a.y$a.a(com.google.firebase:firebase-firestore@@17.0.5:6589)
at com.google.firebase.firestore.f.n.b(com.google.firebase:firebase-firestore@@17.0.5:689)
at com.google.firebase.firestore.c.N.a(com.google.firebase:firebase-firestore@@17.0.5:152)
at com.google.firebase.firestore.c.w.b(com.google.firebase:firebase-firestore@@17.0.5:82)
at com.google.firebase.firestore.c.O.a(com.google.firebase:firebase-firestore@@17.0.5:479)
at com.google.firebase.firestore.c.V.run(com.google.firebase:firebase-firestore@@17.0.5)
at com.google.firebase.firestore.c.u.a(com.google.firebase:firebase-firestore@@17.0.5:117)
at com.google.firebase.firestore.c.O.a(com.google.firebase:firebase-firestore@@17.0.5:474)
at com.google.firebase.firestore.b.f.a(com.google.firebase:firebase-firestore@@17.0.5:165)
at com.google.firebase.firestore.b.o.a(com.google.firebase:firebase-firestore@@17.0.5:79)
at com.google.firebase.firestore.b.r.c(com.google.firebase:firebase-firestore@@17.0.5:132)
at com.google.firebase.firestore.b.w.run(com.google.firebase:firebase-firestore@@17.0.5)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:428)
at java.util.concurrent.FutureTask.run(FutureTask.java:237)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:272)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
at com.google.firebase.firestore.g.b$a.run(com.google.firebase:firebase-firestore@@17.0.5:190)
at java.lang.Thread.run(Thread.java:761)

由于日志没有对我的源代码的任何类引用,我试图找出依赖关系。

终于明白了,问题出在R8收缩器和GRPC上。

下面是上述问题的解决方案:

  1. android.enableR8=false
  2. -保持类 io.grpc.** { *;

以上两种解决方案对我来说都不是很有趣。

我不想应用第一个解决方案,因为禁用 R8 会使我的 APK 大小增加 200 KB。第二个解决方案对我来说看起来很糟糕。当单个类引起问题时,我不赞成保留整个库。

现在的问题是如何让我的应用程序在启用 R8 的情况下工作,而不是让 grpc 库远离混淆?

最佳答案

我浏览了 Firestore 的 quickstart example app使用 R8 和 gRPC 并且没有任何问题,即使使用 com.google.firebase:firebase-firestore:17.0.5 版本(这似乎是您从堆栈跟踪中使用的)。我想你可能遇到了 https://github.com/firebase/FirebaseUI-Android/issues/1175 ,应该在最近的 firestore 版本中修复,例如 17.1.2。 (根据他们的 release notes ,17.0.5 包含一个错误,不应使用)。如果升级不是一个选项,您应该能够像在 Firestore 中所做的那样手动将以下内容添加到您的混淆器规则中 quickstart example :

-dontwarn okio.**

(我无法重现您描述的错误,但这似乎是快速入门示例中唯一适用于 gRPC 依赖项的混淆器规则)

关于android - 由于 GRPC 和 R8,Firestore (0.6.6-dev) 出现内部错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52136819/

相关文章:

java - 如何在kotlin中使用lambda进行匿名内部类替换

android - 图像无法在 Android 7.0 (API 24) 上呈现

java - 闲置数小时后打开应用程序时出现黑屏

javascript - 如何在firebase中创建两个onCreate函数

websocket - Firebase 的延迟是否足够低,可以用于实时 MMOG 而不是套接字?

c++ - grpc c++称为CompletionQueue关闭,但是当有未决事件时,CompletionQueue.next永远被阻止

android - 唤醒锁和 FLAG_KEEP_SCREEN_ON 的区别?

android - DialogFragment getActivity() 在 fragment 处理其他数据后返回 null

go - 在struct上定义的Golang gRPC数据库序列化 key 格式

c# - 使用 C# 的 gRPC - "2 UNKNOWN: Stream remove"