在更新了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。
以下是解决上述问题的办法:
在我看来,上述两种解决方案都不是真正有趣的。
我不想应用第一种解决方案,因为禁用R8会使我的APK大小增加200 KB。在我看来,第二个解决方案看上去是个黑客。我不赞成在一个班级引起一些问题时保留整个图书馆。
现在的问题是如何使我的应用程序在启用R8的情况下工作,而不让grpc
库避免混淆?
发布于 2018-11-07 13:35:38
我使用R8和gRPC浏览了firestore的R8和gRPC,没有任何问题,即使是com.google.firebase:firebase-firestore:17.0.5版本(这似乎是您从堆栈跟踪中使用的)。我认为您可能遇到了https://github.com/firebase/FirebaseUI-Android/issues/1175,应该在最近的防火墙版本中修复它,例如17.1.2。(根据他们的发布说明,17.0.5包含一个bug,不应该使用)。如果升级不是一个选项,您应该能够手动地将以下内容添加到您的保护规则中,就像在Firestore quickstart示例中所做的那样
-dontwarn okio.**
(我无法重现您所描述的错误,但这似乎是快速启动示例中唯一适用于gRPC依赖项的保护规则)
https://stackoverflow.com/questions/52136819
复制