Catch up on everthing we announced at this year's Firebase Summit. Learn more

Получить отчеты о сбоях Android NDK

Если ваш Android приложение содержит собственные библиотеки , вы можете включить полную трассировку стеки и подробные отчеты о сбоях для вашего родного кода из Firebase Crashlytics с несколькими небольшими обновлениями для конфигурации сборки приложения.

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

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

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

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

  2. Рекомендуется: Для того, чтобы получить такие функции , как краш-бесплатных пользователей, журналы хлебных крошек и оповещения скорости, Вам необходимо включить Google Analytics в проекте Firebase.

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

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

Шаг 1: Включить Crashlytics в консоли Firebase

  1. Перейти к приборной панели Crashlytics в консоли Firebase.

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

  3. Нажмите кнопку Включить Crashlytics.

Шаг 2: Добавьте Firebase Crashlytics SDK для НДК в приложении

Использование Firebase Android Банка Москвы , объявить зависимость для библиотеки Crashlytics NDK Android в вашем модуле (приложение уровня) Gradle файл (обычно app/build.gradle ).

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

Джава

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

    // Declare 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 Банка Москвы , ваше приложение будет всегда использовать совместимые версии библиотек Firebase Android.

(Альтернативный) Объявляет Firebase библиотеки зависимостей без использования спецификации

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

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

dependencies {
    // Declare 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:18.2.5'
    implementation 'com.google.firebase:firebase-analytics:20.0.0'
}

Котлин + KTX

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

    // Declare 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-ktx'
}

С помощью Firebase Android Банка Москвы , ваше приложение будет всегда использовать совместимые версии библиотек Firebase Android.

(Альтернативный) Объявляет Firebase библиотеки зависимостей без использования спецификации

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

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

dependencies {
    // Declare 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:18.2.5'
    implementation 'com.google.firebase:firebase-analytics-ktx:20.0.0'
}

Шаг 3: Добавьте плагин Firebase Crashlytics для вашего приложения

  1. В вашем проектном уровне build.gradle файл, добавьте плагин Crashlytics Gradle как buildscript зависимость.

    buildscript {
        repositories {
            // Check that you have Google's Maven repository (if not, add it).
            google()
        }
    
        dependencies {
            // ...
    
            // Check that you have the Google services Gradle plugin v4.3.2 or later
            // (if not, add it).
            classpath 'com.google.gms:google-services:4.3.10'
    
            // Add the Crashlytics Gradle plugin
            classpath 'com.google.firebase:firebase-crashlytics-gradle:2.8.1'
        }
    }
    
    allprojects {
        repositories {
            // Check that you have Google's Maven repository (if not, add it).
            google()
        }
    }
  2. В вашем приложении уровень build.gradle файл, применить плагин Crashlytics Gradle:

    apply plugin: 'com.android.application'
    apply plugin: 'com.google.gms.google-services' // Google services Gradle plugin
    
    // Apply the Crashlytics Gradle plugin
    apply plugin: 'com.google.firebase.crashlytics'
    

Шаг 4: Добавьте firebaseCrashlytics расширение к вашей сборке

В вашем модуле (приложение уровня) Gradle файл (обычно app/build.gradle ), добавьте firebaseCrashlytics расширение.

Джава

// ...

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
          }
      }
  }
}

Котлин + KTX

// ...

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
          }
      }
  }
}

Требуется для targetSdkLevel 30 и выше: Вы должны отключить Pointer Tagging в приложении, добавив следующие строки в AndroidManifest.xml :

<application android:allowNativeHeapPointerTagging="false">
...
</application>

Для получения более подробной информации ознакомьтесь с поддержкой разработчиков для Меченых указателей .

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

Чтобы получить читаемые трассировки стека при сбоях NDK, Crashlytics необходимо знать о символах в ваших собственных двоичных файлах. Плагин Crashlytics Gradle включает uploadCrashlyticsSymbolFile BUILD_VARIANT задачу автоматизировать этот процесс.

  1. Так что вы можете получить доступ задачу для автоматического загрузки символа, убедитесь , что nativeSymbolUploadEnabled устанавливается в true в вашем модуле (приложение уровня) Gradle файл.

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

    >./gradlew app:assembleBUILD_VARIANT\
               app:uploadCrashlyticsSymbolFileBUILD_VARIANT
    
  3. И Crashlytics SDK для NDK, и плагин Crashlytics Gradle зависят от наличия идентификатора сборки GNU в собственных общих объектах.

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

Шаг 6: Force краш - тест , чтобы завершить установку

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

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

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

    Джава

    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));
    

    Котлин + KTX

    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))
    
  2. Создайте и запустите свое приложение.

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

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

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

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

  4. Перейти к приборной панели Crashlytics консоли Firebase увидеть краш - тест.

    Если вы обновили консоль , и вы все еще не видите краш - тест через пять минут, включить ведение журнала отладки , чтобы увидеть , если ваше приложение отправляет отчеты об ошибках.


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



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

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

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

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

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

Вариант: Загрузить символы неиспользования Gradle строит или недоступная необработанная родную библиотеку

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

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

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



Исправление проблем

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

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