Подтвердить что ты не робот

NoClassDefFoundError на com.google.android.gms.internal.firebase-perf.zzw

Полученные номера отчета о сбоях от Firebase Crashlytics. Я думаю, это связано с firebase-perf.

Fatal Exception: java.lang.NoClassDefFoundError: com.google.android.gms.internal.firebase-perf.zzw
   at com.google.firebase.perf.metrics.Trace.start(Unknown Source:44)
   at com.google.android.gms.internal.firebase-perf.zze.onActivityStarted(Unknown Source:48)
   at android.app.Application.dispatchActivityStarted(Application.java:205)
   at android.app.Activity.onStart(Activity.java:1150)

Уже используется новейшая версия Firebase и сервисов Google Play.

Он не падает на устройствах в Firebase Test Lab. Но ~ 1% пользователей сталкиваются с этой проблемой.

Связано ли это с отсутствием ядра GMS? Если да, то как правильно обращаться с ним, не вызывая сбоев на этих устройствах?

--- Обновить ---

проект build.gradle

buildscript {
    repositories {
        google()
        maven {
            url 'https://maven.fabric.io/public'
        }
        jcenter()

    }

    dependencies {
        classpath 'com.android.tools.build:gradle:3.3.0-alpha04'
        classpath 'com.google.gms:google-services:4.0.1' // google-services plugin
        classpath 'com.google.firebase:firebase-plugins:1.1.5'
        classpath 'io.fabric.tools:gradle:1.25.4'
    }
}

allprojects {
    repositories {
        google()
        jcenter()
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}
4b9b3361

Ответ 1

Поддержка Firebase только что подтвердила, что это ошибка. Они работают над этим прямо сейчас (хотя они еще не смогли воспроизвести его). Поэтому мы должны ожидать, что это будет исправлено в будущем выпуске Firebase.

Ответ 2

Отказ от ответственности: это не исчерпывающие решения проблемы, но это должно разблокировать вас на данный момент. Мы рассмотрим комплексное решение, как мы это выясним.

Следуя комментариям @mike_haney (я также участвую в команде Firebase Performance), по всем признакам это, по-видимому, несколько разных проблем, связанных с multidex (каждый из которых, вероятно, имеет другое решение), что приводит к ошибке ClassDefNotFound.

Проблема 1 - Неустранимая исключение: java.lang.NoClassDefFoundError: com.google.android.gms.internal.firebase-perf.zzw в сборках сборки (firebase-perf: 16.1.0)

Решение. Это невозможно воспроизвести, но теория такова, что класс com.google.android.gms.internal.firebase-perf.zzw (имя только для класса firebase-perf 16.1.0) должен присутствовать в главном dex файл в зависимости от версии ОС, на которой работает приложение. Похоже, что это приводит к сбою в отношении определенных устройств/вариантов ОС, которые не поддерживают MultiDex на уровне OS. Если вы видите эту катастрофу в дикой природе, выполните шаги, описанные в документации по Android, чтобы добавить класс в основной файл. (Я буду следить за лучшей документацией на нашем конце, но, надеюсь, это разблокирует вас сейчас!)

Проблема 2 - исключение ClassDefNotFound при использовании Instant Run

Решение. Это проблема с тем, как многозадачность/предварительная дешифрация выполняется при использовании мгновенного запуска, и похоже, что этот процесс лишает некоторые классы, необходимые для работы Firebase. Если вы включили multidex (и во многих случаях Instant Run делает это автоматически), либо minify AND proguard (показано ниже), либо отключите полностью.

android {
    buildTypes {
        debug {
            minifyEnabled true
            useProguard true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            multiDexKeepProguard file('multidex-config.pro')
        }
    }
}