Внутренняя ошибка в Firestore (0.6.6-dev) из-за GRPC и R8 - PullRequest
0 голосов
/ 02 сентября 2018

После того, как я обновил свои зависимости 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 = ложь
  2. -класс класса io.grpc. ** {*; }

Ни то, ни другое из вышеперечисленных решений мне не показалось интересным.

Я не хочу применять первое решение, поскольку отключение R8 увеличивает размер моего APK на 200 КБ. Где как 2-е решение мне показалось хаком Я не поддерживаю сохранение всей библиотеки, когда один класс вызывает некоторые проблемы.

Теперь вопрос в том, как сделать так, чтобы мое приложение работало с включенным R8 и не позволяло библиотеке grpc держаться подальше от запутывания?

1 Ответ

0 голосов
/ 08 ноября 2018

Я просмотрел пример приложения быстрого запуска Firestore , используя R8 и gRPC, и у меня не было проблем, даже с выпуском com.google.firebase: firebase-firestore: 17.0.5 (который, похоже, вы используете из стека трассировки). Я думаю, что вы, возможно, столкнулись с https://github.com/firebase/FirebaseUI-Android/issues/1175,, который должен быть исправлен в последних выпусках Firestore, например, 17.1.2. (Согласно их заметкам о выпуске , 17.0.5 содержала ошибку и не должна использоваться). Если обновление недоступно, вы можете просто вручную добавить следующее в ваши правила Proguard, как это было сделано в примере быстрого запуска :

-dontwarn okio.**

(я не могу воспроизвести ошибку, которую вы описали, но, похоже, это единственное правило proguard в примере быстрого запуска, которое применимо к зависимости gRPC)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...