Начните работу с Firebase Crashlytics


If your Android app contains native libraries , you can enable full stack traces and detailed crash reports for your native code from Firebase Crashlytics with a few small updates to your app's build configuration.

В этом руководстве описывается, как настроить отчеты о сбоях с помощью Firebase Crashlytics SDK для NDK.

Если вы ищете, как начать работу с Crashlytics в своих проектах Unity, ознакомьтесь с руководством по началу работы с Unity .

Прежде чем начать

  1. If you haven't already, add Firebase to your Android project. If you don't have an Android app, you can download a sample app .

  2. Recommended : To automatically get breadcrumb logs to understand user actions leading up to a crash, non-fatal, or ANR event, you need to enable Google Analytics in your Firebase project.

    • Если в вашем существующем проекте Firebase не включен Google Analytics , вы можете включить Google Analytics на вкладке «Интеграции» вашего проекта. > Настройки проекта в консоли Firebase .

    • Если вы создаете новый проект Firebase, включите Google Analytics во время процесса создания проекта.

  3. Убедитесь, что ваше приложение имеет следующие минимальные требуемые версии:

    • Gradle 8.0
    • Плагин Android Gradle 8.1.0
    • Плагин Gradle для сервисов Google 4.4.1

Шаг 1 : Добавьте Crashlytics SDK для NDK в свое приложение.

In your module (app-level) Gradle file (usually <project>/<app-module>/build.gradle.kts or <project>/<app-module>/build.gradle ), add the dependency for the Crashlytics NDK library for Android. We recommend using the Firebase Android BoM to control library versioning.

Для оптимальной работы с Crashlytics мы рекомендуем включить Google Analytics в вашем проекте Firebase и добавить Firebase SDK для Google Analytics в ваше приложение.

dependencies {
    // Import the BoM for the Firebase platform
    implementation(platform("com.google.firebase:firebase-bom:34.5.0"))

    // Add the dependencies for the Crashlytics NDK and Analytics libraries
    // When using the BoM, you don't specify versions in Firebase library dependencies
    implementation("com.google.firebase:firebase-crashlytics-ndk")
    implementation("com.google.firebase:firebase-analytics")
}

Используя Firebase Android BoM , ваше приложение всегда будет использовать совместимые версии библиотек Firebase Android.

(Альтернатива) Добавьте зависимости библиотеки Firebase без использования BoM

Если вы решите не использовать Firebase BoM , вам необходимо указать каждую версию библиотеки Firebase в строке ее зависимостей.

Обратите внимание: если вы используете в своем приложении несколько библиотек Firebase, мы настоятельно рекомендуем использовать BoM для управления версиями библиотек, что гарантирует совместимость всех версий.

dependencies {
    // Add the dependencies for the Crashlytics NDK and Analytics libraries
    // When NOT using the BoM, you must specify versions in Firebase library dependencies
    implementation("com.google.firebase:firebase-crashlytics-ndk:20.0.3")
    implementation("com.google.firebase:firebase-analytics:23.0.0")
}

Шаг 2 : Добавьте плагин Crashlytics Gradle в свое приложение.

  1. In your root-level (project-level) Gradle file ( <project>/build.gradle.kts or <project>/build.gradle ), add the Crashlytics Gradle plugin to the plugins block:

    Kotlin

    plugins {
        // Make sure that you have the AGP plugin 8.1+ dependency
        id("com.android.application") version "8.1.4" apply false
        // ...
    
        // Make sure that you have the Google services Gradle plugin 4.4.1+ dependency
        id("com.google.gms.google-services") version "4.4.4" apply false
    
        // Add the dependency for the Crashlytics Gradle plugin
        id("com.google.firebase.crashlytics") version "3.0.6" apply false
    }

    Groovy

    plugins {
        // Make sure that you have the AGP plugin 8.1+ dependency
        id 'com.android.application' version '8.1.4' apply false
        // ...
    
        // Make sure that you have the Google services Gradle plugin 4.4.1+ dependency
        id 'com.google.gms.google-services' version '4.4.4' apply false
    
        // Add the dependency for the Crashlytics Gradle plugin
        id 'com.google.firebase.crashlytics' version '3.0.6' apply false
    }
  2. В файле Gradle вашего модуля (уровня приложения) (обычно <project>/<app-module>/build.gradle.kts или <project>/<app-module>/build.gradle ) добавьте плагин Crashlytics Gradle:

    Kotlin

    plugins {
      id("com.android.application")
      // ...
    
      // Make sure that you have the Google services Gradle plugin
      id("com.google.gms.google-services")
    
      // Add the Crashlytics Gradle plugin
      id("com.google.firebase.crashlytics")
    }

    Groovy

    plugins {
      id 'com.android.application'
      // ...
    
      // Make sure that you have the Google services Gradle plugin
      id 'com.google.gms.google-services'
    
      // Add the Crashlytics Gradle plugin
      id 'com.google.firebase.crashlytics'
    }

Step 3 : Add the Crashlytics extension to your build

В файле Gradle вашего модуля (уровня приложения) (обычно <project>/<app-module>/build.gradle.kts или <project>/<app-module>/build.gradle ) настройте расширение Crashlytics.

Kotlin

import com.google.firebase.crashlytics.buildtools.gradle.CrashlyticsExtension

// ...

android {
  // ...
  buildTypes {
      getByName("release") {
          // Add this extension
          configure<CrashlyticsExtension> {
              // Enable processing and uploading of native symbols to Firebase servers.
              // By default, this is disabled to improve build speeds.
              // This flag must be enabled to see properly-symbolicated native
              // stack traces in the Crashlytics dashboard.
              nativeSymbolUploadEnabled = true
          }
      }
  }
}

Groovy

// ...

android {
  // ...
  buildTypes {
      release {
          // Add this extension
          firebaseCrashlytics {
              // Enable processing and uploading of native symbols to Firebase servers.
              // By default, this is disabled to improve build speeds.
              // This flag must be enabled to see properly-symbolicated native
              // stack traces in the Crashlytics dashboard.
              nativeSymbolUploadEnabled true
          }
      }
  }
}

Шаг 4 : Настройте автоматическую загрузку собственных символов

To produce readable stack traces from NDK crashes, Crashlytics needs to know about the symbols in your native binaries. The Crashlytics Gradle plugin includes the uploadCrashlyticsSymbolFile BUILD_VARIANT task to automate this process.

  1. So that you can access the task for automated symbol uploading, make sure that nativeSymbolUploadEnabled is set to true in your module (app-level) Gradle file.

  2. Чтобы имена методов отображались в трассировках стека, необходимо явно вызывать задачу uploadCrashlyticsSymbolFile BUILD_VARIANT после каждой сборки библиотеки NDK. Например:

    >./gradlew app:assembleBUILD_VARIANT\
               app:uploadCrashlyticsSymbolFileBUILD_VARIANT
  3. Both the Crashlytics SDK for NDK and the Crashlytics Gradle plugin depend on the presence of the GNU build ID within the native shared objects.

    Вы можете проверить наличие этого идентификатора, запустив readelf -n для каждого исполняемого файла. Если идентификатор сборки отсутствует, добавьте -Wl,--build-id к флагам вашей системы сборки, чтобы исправить проблему.

Шаг 5 : принудительное выполнение тестового сбоя для завершения настройки

To finish setting up Crashlytics and see initial data in the Crashlytics dashboard of the Firebase console, you need to force a test crash.

  1. Добавьте в свое приложение код, который можно использовать для принудительного тестового сбоя.

    Вы можете использовать следующий код в MainActivity вашего приложения, чтобы добавить кнопку, нажатие которой вызывает сбой. Кнопка называется «Тестовый сбой».

    Kotlin

    val crashButton = Button(this)
    crashButton.text = "Test Crash"
    crashButton.setOnClickListener {
       throw RuntimeException("Test Crash") // Force a crash
    }
    
    addContentView(crashButton, ViewGroup.LayoutParams(
           ViewGroup.LayoutParams.MATCH_PARENT,
           ViewGroup.LayoutParams.WRAP_CONTENT))

    Java

    Button crashButton = new Button(this);
    crashButton.setText("Test Crash");
    crashButton.setOnClickListener(new View.OnClickListener() {
       public void onClick(View view) {
           throw new RuntimeException("Test Crash"); // Force a crash
       }
    });
    
    addContentView(crashButton, new ViewGroup.LayoutParams(
           ViewGroup.LayoutParams.MATCH_PARENT,
           ViewGroup.LayoutParams.WRAP_CONTENT));
  2. Создайте и запустите свое приложение.

  3. Запустите тестовый сбой, чтобы отправить первый отчет о сбое вашего приложения:

    1. Откройте приложение на тестовом устройстве или эмуляторе.

    2. В приложении нажмите кнопку «Тестовый сбой», которую вы добавили с помощью кода выше.

    3. После сбоя приложения перезапустите его, чтобы приложение могло отправить отчет о сбое в Firebase.

  4. Перейдите на панель управления Crashlytics консоли Firebase , чтобы увидеть краш вашего теста.

    If you've refreshed the console and you're still not seeing the test crash after five minutes, enable debug logging to see if your app is sending crash reports.


Вот и всё! Crashlytics теперь отслеживает сбои в вашем приложении, и вы можете просматривать и анализировать отчёты о сбоях и статистику на панели управления Crashlytics .

Следующие шаги

  • (Recommended) Get help debugging crashes caused by native memory errors by collecting GWP-ASan reports . These memory-related errors can be associated with memory corruption within your app, which is the leading cause of app security vulnerabilities. To take advantage of this debugging feature, make sure your app has GWP-ASan explicitly enabled and uses the latest Crashlytics SDK for NDK (v18.3.6+ or Firebase BoM v31.3.0+).

  • Настройте параметры отчетов о сбоях , добавив отчеты по желанию, журналы, ключи и отслеживание нефатальных ошибок.

  • Интеграция с Google Play позволит вам фильтровать отчёты о сбоях вашего Android-приложения по треку Google Play прямо на панели управления Crashlytics . Это позволит вам лучше сфокусировать панель управления на конкретных сборках.

Поиск неисправностей

Если вы видите разные трассировки стека в консоли Firebase и в logcat, обратитесь к руководству по устранению неполадок .



Альтернативные варианты загрузки символов

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

Вариант : загрузить символы для библиотечных модулей и внешних зависимостей

Эта опция может быть полезна в следующих ситуациях:

  • Если вы используете настроенный процесс сборки NDK в Gradle
  • Если ваши собственные библиотеки встроены в модуль библиотеки/функции или предоставлены сторонним поставщиком
  • Если автоматическая загрузка символов не удалась или вы видите несимволизированные сбои на панели управления

Вариант : загрузка символов для сборок, отличных от Gradle, или недоступных неотредактированных собственных библиотек.

Эта опция может быть полезна в следующих ситуациях:

  • Если вы используете процесс сборки, отличный от Gradle

  • Если ваши неотредактированные нативные библиотеки предоставлены вам каким-то образом и они недоступны во время сборок Gradle