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

时间:2018-09-02 12:02:48

标签: android firebase grpc 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库远离混淆?

1 个答案:

答案 0 :(得分:0)

我使用R8和gRPC经历了Firestore的quickstart example app,即使使用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中一样,手动将以下内容添加到您的proguard规则中:

-dontwarn okio.**

(我无法复制您描述的错误,但这似乎是快速入门示例中唯一适用于gRPC依赖项的保护规则)