Крэш-плагин

Внимание.

Это архивная версия документации. Актуальная документация по всем платформам находится здесь.

AppMetrica позволяет собирать информацию о нативных и java-крэшах. Их можно анализировать в отчете Крэши. См. также раздел Крэши/ошибки.

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

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

Для этого загрузите mapping-файлы или отладочные символы SO-файлов в AppMetrica: автоматически при сборке приложения или вручную через веб-интерфейс.

Чтобы отправлять файлы, подключите AppMetrica Build Plugin.

Примечание. Загружайте mapping-файлы, если вы используете ProGuard или R8. Если вы не сжимаете и не обфусцируете код, не подключайте плагин.
  1. Подключение плагина
  2. Ручная загрузка
  3. Ошибки при сборке
  4. История изменений

Подключение плагина

Внимание. Для работы плагина необходимо подключить AppMetrica SDK не ниже версии 3.8.0.

Чтобы подключить плагин:

  1. Добавьте в корневой файл build.gradle зависимость:
    buildscript {
        ...
        dependencies {
            ...
            classpath 'com.yandex.android:appmetrica-build-plugin:0.7.0'
        }
     }
    Скопировано
  2. Добавьте в файл app/build.gradle:
    ...
    apply plugin: 'appmetrica-plugin'
    
    appmetrica {
        postApiKey = { applicationVariant -> "Post Api key for variant" }
        // or postApiKey = "Post Api key"
        enable = { applicationVariant -> true }    // Optional.
        mappingBuildTypes = ['release']            // Optional.
        offline = false                            // Optional.
        mappingFile = { applicationVariant -> null }   // Optional.
        enableAnalytics = true                     // Optional.
        ndk {    // Optional.
            enable = { applicationVariant -> false }
            soFiles = { applicationVariant -> listOfSoFiles }             // Optional.
            additionalSoFiles = { applicationVariant -> listOfSoFiles }   // Optional.
            addNdkCrashesDependency = { applicationVariant -> true }      // Optional.
        }
    }
    ...
    Скопировано
    postApiKey *
    Post API key или лямбда-функция, которая возвращает Post API key для ApplicationVariant. Подробнее про ApplicationVariant в документации Android и Javadoc.

    Post API key можно получить в разделе Настройки в AppMetrica. Он используется для идентификации вашего приложения.

    Если offline = true , то параметр не является обязательным.

    enable
    Лямбда-функция, которая принимает ApplicationVariant и возвращает, надо ли использовать плагин для этого варианта сборки.

    Если плагин не используется, apk не меняется и mapping-файл не загружается.

    По умолчанию возвращает true только для buildType = 'release'.

    Примечание. Для указания типов сборок используйте один из параметров: enable или mappingBuildTypes.
    mappingBuildTypes
    Список типов сборок buildType, для которых будет отправляться mapping-файл.

    Значение по умолчанию: ['release'].

    Чтобы отключить загрузку mapping-файлов для определенного типа сборки, удалите из списка нужный buildType.

    Примечание. Для указания типов сборок используйте один из параметров: enable или mappingBuildTypes.
    offline

    Включает режим offline . Boolean или лямбда-функция, которая принимает ApplicationVariant.

    Допустимые значения:

    • true — не загружает файл в AppMetrica. Если включен, после сборки выводит путь до архива в лог. Его можно загрузить вручную через веб-интерфейс.
    • false — автоматически загружает mapping-файл.

    Значение по умолчанию: false.

    mappingFile

    Лямбда-функция, которая принимает ApplicationVariant и возвращает mapping, который надо загрузить. Если лямбда возвращает null, используется значение по умолчанию.

    Значение по умолчанию: ApplicationVariant.mappingFileProvider.
    enableAnalytics

    Включает отправку статистики об использовании плагина в AppMetrica. Boolean.

    Допустимые значения:

    • true — отправка статистики включена.
    • false — отправка статистики выключена.

    Значение по умолчанию: true.

    ndk

    Параметр необходим для загрузки символов из SO-файла, чтобы отслеживать нативные крэши.

    enable

    Лямбда-функция, которая принимает ApplicationVariant и возвращает, надо ли загружать символы из SO-файлов для этого варианта сборки.

    Значение по умолчанию: false.
    soFiles

    Лямбда-функция, которая принимает ApplicationVariant и возвращает список SO-файлов.

    По умолчанию плагин ищет SO-файлы в папках проекта Android Studio.

    Необходимо переопределить, если ваши SO-файлы лежат в необычном месте или если плагин не может их найти.

    additionalSoFiles

    Лямбда-функция, которая принимает ApplicationVariant и возвращает список дополнительных SO-файлов, символы которых необходимо загрузить.

    addNdkCrashesDependency

    Лямбда-функция, которая принимает ApplicationVariant и возвращает, надо ли добавлять зависимость от mobmetricalib-ndk-crashes.

    Значение по умолчанию: true.

    Обязательный параметр

  3. Если параметр ndk включен, то для отправки отладочных символов используется задача Gradle upload${variant.name.capitalize()}Symbols. Чтобы вызывать задачу автоматически, можно добавить в файл app/build.gradle следующий код:
    ...
    afterEvaluate {
        android.applicationVariants.forEach { variant ->
            def uploadSymbolsTask = project.tasks.named("upload${variant.name.capitalize()}Symbols")
            if (uploadSymbolsTask != null) {
                variant.assembleProvider.get()?.finalizedBy(uploadSymbolsTask) // Если используете apk
                project.tasks.named("bundle${variant.name.capitalize()}").get()?.finalizedBy(uploadSymbolsTask) // Если используете aab
            }
        }
    }
    ...
    Скопировано

Ручная загрузка

Для ручной загрузки нужно подключить и использовать плагин с режимом offline. Это необходимо для связывания mapping-файла со сборкой приложения.

  1. В файле app/build.gradle включите режим offline и запустите сборку.
    appmetrica {
        ...
        offline = true
    }
    Скопировано
    offline
    Включает режим offline. Допустимые значения:
    • true — не загружает mapping-файл в AppMetrica. Если включен, после сборки выводит путь до архива в лог.
    • false — автоматически загружает mapping-файл.

    Значение по умолчанию: false.

  2. В интерфейсе AppMetrica перейдите в настройки приложения из меню слева.
  3. Откройте вкладку Крэши → Android.
  4. Нажмите кнопку Выберите файл и загрузите Zip-архив.

Ошибки при сборке

Возможные ошибки при сборке:

  • IllegalStateException — включите обфускацию кода с помощью ProGuard или R8 Compiler;
  • HttpResponseException — проверьте подключение к интернету.

При возникновении других ошибок обращайтесь в техническую поддержку.

История изменений

Версия 0.7.0

Релиз 19 апреля 2023 г.

  • Дополнена ошибка об отсутствии mapping файлов.
  • Добавлена поддержка AGP до версии 7.4.+ и gradle до 7.5.

Версия 0.6.2

Релиз 28 июля 2022 г.

  • Улучшена работа плагина.

Версия 0.6.1

Релиз 20 мая 2022 г.

  • Улучшена работа плагина.

Версия 0.6.0

Релиз 17 мая 2022 г.

  • Добавлен параметр mappingFile.
  • Исправлена ошибка Cannot query the value of this property because it has no value available при получении mapping файла.

Версия 0.5.0

Релиз 21 апреля 2022 г.

  • Исправлено падение IndexOutOfBoundsException: toIndex (16) is greater than size (8) при обработке SO-файла.
  • Исправлено падение при использовании флага Cannot query the value of this property because it has no value available.
  • Добавлен флаг ndk.addNdkCrashesDependency.

Версия 0.3.0

Релиз 17 июня 2021 г.

  • Добавлена поддержка gradle 7.
  • Добавлена отправка аналитики.

Версия 0.2.4

Релиз 26 мая 2021 г.

  • Добавлена поддержка AGP 4.2.0.
  • Улучшена производительность и стабильность работы плагина.

Версия 0.2.2

Релиз 19 февраля 2021 г.

  • Исправлена ошибка Connection timed out во время загрузки mapping-файлов или символов при использовании прокси.

Версия 0.2.1

Релиз 3 ноября 2020 г.

  • Добавлена поддержка Android App Bundle.
    Внимание. Не запускайте сборку apk и aab одной gradle-командой. Это может привести к ошибке при обработке крэшей.
  • Добавлено логирование.
  • Улучшен поиск и парсинг SO-файлов.

Версия 0.1.3

Релиз 12 июня 2020 г.

  • Добавлена автоматическая загрузка символов из SO-файлов для отслеживания нативных крэшей.
  • В файл info.txt добавлено поле split_version_codes, в котором хранятся все загруженные version_code приложения.

Версия 0.1.2

Релиз 13 марта 2020 г.

  • Исправлено падение во время конфигурации, если не указан Post API key. Теперь он проверяется во время выполнения загрузки.
  • Исправлен способ получения mapping-файлов.
  • Добавлена информация об ошибке при загрузке mapping-файлов.
  • Добавлена возможность указывать для разных ApplicationVariant свои значения параметров плагина.

Версия 0.0.1

Релиз 8 октября 2019 г.

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