4

更新 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 shrinker和GRPC。

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

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

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

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

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

4

1 回答 1

0

我使用 R8 和 gRPC 浏览了 Firestore 的快速入门示例应用程序,并且没有任何问题,即使使用 com.google.firebase:firebase-firestore:17.0.5 版本(这似乎是您从堆栈跟踪中使用的) . 我认为您可能遇到了https://github.com/firebase/FirebaseUI-Android/issues/1175,这应该在最近的 Firestore 版本中得到修复,例如 17.1.2。(根据他们的发行说明,17.0.5 包含一个错误,不应使用)。如果升级不是一个选项,您应该能够手动将以下内容添加到您的 proguard 规则中,就像在 Firestore快速入门示例中所做的那样:

-dontwarn okio.**

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

于 2018-11-07T21:35:38.360 回答