Эта страница была переведа с помощью Cloud Translation API.
Switch to English

Обновление до Firebase Crashlytics SDK

Теперь вы можете настроить Crashlytics в своем приложении с помощью нового официального Firebase Crashlytics SDK, который предлагает улучшенные API, которые более согласованы с другими продуктами Firebase и более интуитивно понятны в использовании. В этом руководстве описывается, как перейти на новый SDK из Fabric Crashlytics SDK. В нем описываются изменения, которые происходят с новыми API-интерфейсами, причины изменений и способы обновления кода, если это необходимо.

Если вы недавно перенесли приложение из Fabric, посмотрите, как обновление до Firebase Crashlytics SDK влияет на ваши данные анализа сбоев .

Прежде чем вы начнете

SDK Firebase Crashlytics использует AndroidX в качестве зависимости, поэтому, если ваше приложение использует более старые версии библиотеки поддержки приложений, сначала перенесите приложение на AndroidX .

Шаг 1. Добавьте файл конфигурации Firebase

Добавьте в приложение файл конфигурации Firebase Android:

  1. Откройте настройки вашего проекта. На карточке Ваши приложения выберите имя пакета приложения, для которого вам нужен файл конфигурации.
  2. Нажмите Загрузить google-services.json, чтобы получить файл конфигурации Firebase Android.
    • Вы можете снова загрузить файл конфигурации Firebase Android в любое время.
    • Убедитесь, что в конфигурационный файл не добавлены дополнительные символы, например (2) .
  3. Переместите файл конфигурации в каталог модуля (уровня приложения) вашего приложения.

Шаг 2. Добавьте SDK Firebase Crashlytics

  1. На корневом уровне вашего приложения (на уровне проекта) build.gradle :
    • Замените репозиторий Maven от Fabric репозиторием Google Maven.
    • Замените плагин Fabric Gradle плагином Firebase Crashlytics Gradle.
    buildscript {
      // ...
    
      repositories {
        // ...
    
        // Remove Fabric's Maven repository.
        maven { url 'https://maven.fabric.io/public' }
    
        // Add Google's Maven repository (if it's not there already).
        google()
      }
    
      dependencies {
        // ..
    
        // Add the Google Services Gradle plugin (if it's not there already).
        classpath 'com.google.gms:google-services:4.3.3'
    
        // Remove the Fabric Gradle plugin.
        classpath 'io.fabric.tools:gradle:1.31.2'
    
        // Add the Firebase Crashlytics Gradle plugin.
        classpath 'com.google.firebase:firebase-crashlytics-gradle:2.3.0'
      }
    }
  2. В build.gradle уровня build.gradle замените плагин Fabric на плагин Firebase Crashlytics:
    apply plugin: 'com.android.application'
    
    // Apply the Google Services plugin (if it's not there already).
    apply plugin: 'com.google.gms.google-services'
    
    // Remove the Fabric plugin.
    apply plugin: 'io.fabric'
    
    // Add the Firebase Crashlytics plugin.
    apply plugin: 'com.google.firebase.crashlytics'
    .
  3. Наконец, добавьте SDK Firebase Crashlytics. В build.gradle уровне build.gradle замените устаревший SDK Fabric Crashlytics на новый Firebase Crashlytics SDK. Убедитесь, что вы добавили версию 17.0.0 или более позднюю (с 15 ноября 2020 г. это необходимо для отображения отчетов о сбоях в консоли Firebase).
    dependencies {
      // Remove the Fabric Crashlytics SDK.
      implementation 'com.crashlytics.sdk.android:crashlytics:2.10.1'
    
      // Add the Firebase Crashlytics SDK.
      implementation 'com.google.firebase:firebase-crashlytics:17.2.1'
    
      // Recommended: Add the Google Analytics SDK.
      implementation 'com.google.firebase:firebase-analytics:17.5.0'
    }

Необязательный шаг : настройка отчетов о сбоях NDK

Firebase Crashlytics предлагает отчеты о сбоях для приложений, созданных с помощью Android Native Development Kit (NDK). Чтобы обнаружить собственные сбои и сообщить о них:

  1. В build.gradle уровня build.gradle замените зависимость Fabric NDK на зависимость Firebase Crashlytics NDK. Затем добавьте расширение nativeSymbolUploadEnabled и убедитесь, что nativeSymbolUploadEnabled флаг nativeSymbolUploadEnabled . Это позволяет вашему приложению обрабатывать и загружать собственные символы в Crashlytics, чтобы вы могли просматривать трассировки стека с правильно обозначенными символами на панели инструментов Crashlytics .
    dependencies {
      // Remove the Fabric NDK dependency.
      implementation 'com.crashlytics.sdk.android:crashlytics-ndk:2.1.1'
    
      // Add the Firebase Crashlytics NDK dependency.
      implementation 'com.google.firebase:firebase-crashlytics-ndk:17.2.1'
    }
    // ...
    
    android {
        // ...
    
        buildTypes {
            release {
                /* Add the firebaseCrashlytics extension (by default,
                * it's disabled to improve build speeds) and set
                * nativeSymbolUploadEnabled to true. */
    
                firebaseCrashlytics {
                    nativeSymbolUploadEnabled true
                }
            }
        }
    }
    
    // Remove this extension (it previously enabled Crashlytics NDK reporting in Fabric).
    crashlytics {
      enableNdk true
    }
      
  2. Выполните следующие задачи Gradle, относящиеся к NDK:
    > ./gradlew app:assembleBUILD_VARIANT
    > ./gradlew app:uploadCrashlyticsSymbolFileBUILD_VARIANT
      
  3. Дополнительные сведения об использовании Crashlytics для отчетов о сбоях NDK см. В документации Crashlytics NDK .

Шаг 3. Обновите свой код

Просмотрите следующие изменения SDK и внесите соответствующие обновления в свой код:


Новый пакет и имя класса для Crashlytics - com.google.firebase.crashlytics.FirebaseCrashlytics.

Теперь вы можете вызывать функции Crashlytics, используя методы экземпляра в синглтоне FirebaseCrashlytics вместо статических функций в классе FirebaseCrashlytics. Синглтон FirebaseCrashlytics доступен во всем мире через статическую функцию getInstance() .

SDK для ткани

Ява

import com.crashlytics.android.Crashlytics;

// ...

// Operations on Crashlytics.
Crashlytics.someAction()

Котлин + KTX

import com.crashlytics.android.Crashlytics

// ...

// Operations on Crashlytics.
Crashlytics.someAction()

SDK Firebase Crashlytics

Ява

import com.google.firebase.crashlytics.FirebaseCrashlytics;

// ...

// Operations on FirebaseCrashlytics.
FirebaseCrashlytics crashlytics = FirebaseCrashlytics.getInstance();
crashlytics.someAction();

Котлин + KTX

import com.google.firebase.crashlytics.FirebaseCrashlytics

// ...

// Operations on FirebaseCrashlytics.
val crashlytics = FirebaseCrashlytics.getInstance()
crashlytics.someAction()

Причина изменения

Корневой пакет и точка входа нового SDK теперь совместимы с другими SDK Firebase. Кроме того, методы экземпляра легче имитировать, чем статические функции, и создают меньше проблем с тестируемостью.


FirebaseCrashlytics больше не работает с Fabric SDK.

Теперь FirebaseCrashlytics запускается автоматически с использованием ContentProvider, определенного в новом SDK Firebase Crashlytics. Удалите вызовы Fabric.with() если они существуют. Если вы уже используете Firebase Crashlytics, ваше приложение может уже использовать автоматический запуск и может не содержать вызова Fabric.with() .

Ключ API Fabric больше не используется новым SDK. Вместо этого Crashlytics теперь использует файл google-services.json вашего приложения, чтобы связать ваше приложение с проектом Firebase и сохранить ваши исторические данные о сбоях. Если у вас есть io.fabric.ApiKey объявленный в вашем файле AndroidManifest.xml , удалите его.

Если вы хотите отключить автоматические отчеты о сбоях и включить их только для избранных пользователей, используйте тег meta-data Android в файле AndroidManifest.xml . Затем вы можете включить отчеты о setCrashlyticsCollectionEnabled с помощью нового setCrashlyticsCollectionEnabled экземпляра setCrashlyticsCollectionEnabled .

SDK для ткани

Ява

import com.crashlytics.android.Crashlytics;
import io.fabric.sdk.android.Fabric;

// ...

Fabric.with(getContext(), new Crashlytics());

Котлин + KTX

import com.crashlytics.android.Crashlytics
import io.fabric.sdk.android.Fabric

// ...

Fabric.with(getContext(), Crashlytics())

SDK Firebase Crashlytics

Ява

import com.google.firebase.crashlytics.FirebaseCrashlytics;

// ...

// Explicit initialization of Crashlytics is no longer required.

// OPTIONAL: If crash reporting has been explicitly disabled previously, add:
FirebaseCrashlytics.getInstance().setCrashlyticsCollectionEnabled(true);

Котлин + KTX

import com.google.firebase.crashlytics.FirebaseCrashlytics

// ...

// Explicit initialization of Crashlytics is no longer required.

// OPTIONAL: If crash reporting has been explicitly disabled previously, add:
FirebaseCrashlytics.getInstance().setCrashlyticsCollectionEnabled(true)

Если вы добавили Crashlytics в свое приложение с помощью веб-сайта Fabric, удалите ключ API Fabric из файла AndroidManifest.xml (если он существует):

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
   package="com.example.your_app_package">

   <application>
      <activity android:name=".MainActivity"/>

      <!-- Remove this line if it exists -->
      <meta-data android:name="io.fabric.ApiKey"
          android:value="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" />

   </application>
</manifest>

Причина изменения

Чтобы обеспечить совместимость с другими SDK Firebase, Crashlytics теперь запускается автоматически через ContentProvider. Как и в случае с другими SDK, теперь он предоставляет флаг манифеста для отключения автоматического сбора данных, который вы можете в любой момент переопределить с помощью setCrashlyticsCollectionEnabled . Этот метод дает вам больше контроля над поведением отчетов о сбоях вашего приложения.


Crashlytics.log теперь является методом экземпляра.

Новый SDK больше не включает статический метод Crashlytics.log . Чтобы добавить настраиваемые сообщения журнала, используйте вместо этого новый метод экземпляра crashlytics.log . Обратите внимание, что новый метод больше не перекликается с logcat (мы рекомендуем написать оболочку, если вы хотите сохранить такое поведение). Для получения дополнительной информации посетите страницу добавления настраиваемых сообщений журнала .

SDK для ткани

Ява

Crashlytics.log("my message");

Crashlytics.log(
 Log.ERROR,
 "TAG",
 "my message");

Котлин + KTX

Crashlytics.log("my message")

Crashlytics.log(
 Log.ERROR,
 "TAG",
 "my message")

SDK Firebase Crashlytics

Ява

FirebaseCrashlytics crashlytics = FirebaseCrashlytics.getInstance();

crashlytics.log("my message");

// To log a message to a crash report, use the following syntax:
crashlytics.log("E/TAG: my message");

Котлин + KTX

val crashlytics = FirebaseCrashlytics.getInstance()

crashlytics.log("my message")

// To log a message to a crash report, use the following syntax:
crashlytics.log("E/TAG: my message")

Причина изменения

По вашему запросу мы перестали отображать журналы Crashlytics в logcat. Использование методов экземпляра также упрощает тестирование вашего кода.


setBool, setDouble, setFloat и setInt, setLong и setString объединяются в setCustomKey.

Мы объединили настраиваемые установщики ключей в метод setCustomKey . Раньше вы могли использовать настраиваемые установщики ключей, чтобы задать пары ключ / значение, которые будут отправляться вместе с отчетом о сбоях. Теперь вы можете использовать setCustomKey(String, value) , который перегружен, чтобы принимать примитивные и строковые типы. Для получения дополнительной информации посетите Добавить пользовательские ключи.

SDK для ткани

Ява

Crashlytics.setBool("bool_key",true);

Crashlytics.setDouble("double_key",42.0);

Crashlytics.setFloat("float_key",42.0F);

Crashlytics.setInt("int_key",42);

Crashlytics.setLong("long_key",42L);

Crashlytics.setString("str_key","str_value");

Котлин + KTX

Crashlytics.setBool("bool_key",true)

Crashlytics.setDouble("double_key",42.0)

Crashlytics.setFloat("float_key",42.0F)

Crashlytics.setInt("int_key",42)

Crashlytics.setLong("long_key",42L)

Crashlytics.setString("str_key","str_value")

SDK Firebase Crashlytics

Ява

FirebaseCrashlytics crashlytics = FirebaseCrashlytics.getInstance();

crashlytics.setCustomKey("bool_key",true);

crashlytics.setCustomKey("double_key",42.0);

crashlytics.setCustomKey("float_key",42.0F);

crashlytics.setCustomKey("int_key",42);

crashlytics.setCustomKey("long_key",42L);

crashlytics.setCustomKey("str_key","42");

Котлин + KTX

FirebaseCrashlytics crashlytics = FirebaseCrashlytics.getInstance()

crashlytics.setCustomKey("bool_key",true)

crashlytics.setCustomKey("double_key",42.0)

crashlytics.setCustomKey("float_key",42.0F)

crashlytics.setCustomKey("int_key",42)

crashlytics.setCustomKey("long_key",42L)

crashlytics.setCustomKey("str_key","42")

Причина изменения

Новое имя метода является уникальным для Crashlytics и дает понять, что Crashlytics не соответствует параметрам "ключ-значение".


setUserIdentifier теперь setUserId. setUserName и setUserEmail удаляются.

Раньше вы могли установить имя или адрес электронной почты, связанные со setUserEmail , с помощью setUserName и setUserEmail , но эти методы больше не определены. Новый предпочтительный метод установки идентификаторов для пользователей - использование setUserId . Для получения дополнительной информации посетите Установить идентификаторы пользователей.

SDK для ткани

Ява

Crashlytics.setUserIdentifier("myAppUserId");

Crashlytics.setUserEmail("abc@example.com");

Crashlytics.setUserName("John Doe");

Котлин + KTX

Crashlytics.setUserIdentifier("myAppUserId")

Crashlytics.setUserEmail("abc@example.com")

Crashlytics.setUserName("John Doe")

SDK Firebase Crashlytics

Ява

crashlytics.setUserId("myAppUserId");

Котлин + KTX

crashlytics.setUserId("myAppUserId")

Причина изменения

Мы приняли имя метода setUserId чтобы оно соответствовало другим API Firebase, и удалили setUserName и setUserEmail чтобы препятствовать регистрации PII через Crashlytics.


Crashlytics.logException (Throwable) заменяется FirebaseCrashlytics.recordException (Throwable).

Crashlytics теперь также поддерживает регистрацию встроенных типов ошибок и исключений как для Android, так и для iOS.

SDK для ткани

Ява

try {
/* Code that can throw checked
exceptions. */

// ...

} catch (Exception e) {
Crashlytics.logException(e);
}

Котлин + KTX

try {
/* Code that can throw checked
exceptions. */

// ...

catch (e: Exception) {
Crashlytics.logException(e)
}

SDK Firebase Crashlytics

Ява

try {
/* Code that can throw checked
exceptions. */

// ...

} catch (Exception e) {
FirebaseCrashlytics.getInstance().recordException(e);
}

Котлин + KTX

try {
/* Code that can throw checked
exceptions. */

// ...

catch (e: Exception) {
FirebaseCrashlytics.getInstance().recordException(e)
}

Причина изменения

Новый метод recordException(Throwable) легче отличить от log(String) , который ведет себя иначе. Кроме того, мы переименовали новый API, чтобы он был более согласованным на разных платформах.


CrashlyticsListener заменяется didCrashOnPreviousExecution ().

CrashlyticsListener ранее позволял Crashlytics указывать, когда предыдущий сеанс приложения завершается сбоем, что полезно для приложений, которые отображают сообщения после сбоя при перезапуске. Теперь его обратный вызов заменен синхронным вызовом API didCrashOnPreviousExecution() .

SDK для ткани

Ява

CrashlyticsListener crashlyticsListener =
new CrashlyticsListener() {
  @Override
  public void crashlyticsDidDetectCrashDuringPreviousExecution() {
    // ...App code to execute if a crash occurred during previous execution.
  }
};

CrashlyticsCore crashlyticsCore = new CrashlyticsCore.Builder()
                                      .listener(crashlyticsListener)
                                      .build();

Crashlytics crashlytics = new Crashlytics.Builder().core(crashlyticsCore).build();

Fabric.with(getContext(), crashlytics);

Котлин + KTX

val crashlyticsListener = CrashlyticsListener {
  // ...App code to execute if a crash occurred during previous execution.
}
val crashlyticsCore = CrashlyticsCore.Builder()
  .listener(crashlyticsListener)
  .build()
val crashlytics = Crashlytics.Builder().core(crashlyticsCore).build()
Fabric.with(getContext(), crashlytics)

SDK Firebase Crashlytics

Ява

if (FirebaseCrashlytics.getInstance().didCrashOnPreviousExecution()) {
// ...App code to execute if a crash occurred during previous execution.
}

Котлин + KTX

if (FirebaseCrashlytics.getInstance().didCrashOnPreviousExecution()) {
// ...App code to execute if a crash occurred during previous execution.
}

Причина изменения

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


Метод сбоя удален.

Новый SDK больше не включает метод сбоя, который раньше можно было использовать для проверки конфигурации Crashlytics путем принудительного сбоя в приложении. Бросьте RuntimeException чтобы вызвать сбой.

SDK для ткани

Ява

Crashlytics.getInstance().crash();

Котлин + KTX

Crashlytics.getInstance().crash()

SDK Firebase Crashlytics

Ява

throw new RuntimeException("Test Crash");

Котлин + KTX

throw RuntimeException("Test Crash")

Причина изменения

Новые методы четко указывают, произошли ли сбои вашего приложения во время выполнения или в собственном SDK приложения.


Плагин Crashlytics Gradle содержит новые флаги.

Плагин Gradle продолжает автоматически настраивать и выполнять специфичные для Crashlytics задачи Gradle. Если ваша сборка требует вызова задач из плагина Crashlytics Gradle, обратитесь к доступным задачам Firebase Crashlytics, запустив ./gradlew app:tasks . Если ваше приложение использует NDK, вы должны явно вызвать задачу Gradle uploadCrashlyticsSymbolFile[ BUILD_VARIANT ] чтобы продолжить загрузку собственных символов в Crashlytics.

Флаги сборки для ext.alwaysUpdateBuildId и ext.enableCrashlytics больше не поддерживаются. Удалите их из конфигурации Gradle, если они существуют. Если ваше приложение использует байткодовый обфускатор (например, R8 или Proguard) , и вы не хотите , чтобы загрузить файл отображения вашей сборки, чтобы Crashlytics использовать новый mappingFileUploadEnabled флаг в firebaseCrashlytics расширения Gradle. Если установлено значение false, Crashlytics не может деобфускировать трассировку стека вашего приложения. Для нестандартных конфигураций обфускатора используйте параметр mappingFile чтобы задать новое расположение для файла сопоставления. Эти флаги можно использовать для defaultConfig, а также для любого типа сборки или разновидности.

SDK Firebase Crashlytics

apply plugin: 'com.android.application'
apply plugin: 'com.google.firebase.crashlytics'
apply plugin: 'com.google.gms.google-services'

android {
    // ...

    buildTypes {
        debug {
            minifyEnabled true
            firebaseCrashlytics {
                // If you don't need crash reporting for your debug build,
                // you can speed up your build by disabling mapping file uploading.
                mappingFileUploadEnabled false
            }
        }

        release {
            minifyEnabled true
            // When minifyEnabled is set to true, Crashlytics automatically
            // uploads mapping files because the plugin detects that obfuscation
            // is enabled. mappingFileUploadEnabled defaults to true if
            // minifyEnabled is true.
        }
    }
}

Причина изменения

Мы обновили задачи и параметры конфигурации Gradle, чтобы они больше соответствовали соглашениям Gradle.


Crashlytics может использовать только данные, собранные Google Analytics.

После обновления до Firebase Crashlytics SDK вы больше не сможете собирать данные с помощью Fabric Answers. Чтобы получить показатели для пользователей, у которых не было сбоев, и хлебных крошек, переключитесь на использование Google Analytics. Обратите внимание, что ваши исторические данные ответов не могут быть перенесены в Firebase.

Посетите Начать использовать Google Analytics, чтобы узнать, как добавить Google Analytics в свое приложение. Если вы ранее использовали Fabric Answers, узнайте, как преобразовать события Answers в события Analytics.

Причина изменения

Теперь мы предлагаем Google Analytics, чтобы помочь вам получить больше информации о ваших данных о сбоях. С помощью Analytics вы можете продолжить сбор статистики для своего приложения в консоли Firebase.


Next steps