Крэш-плагин (AppMetrica Build Plugin)
AppMetrica позволяет собирать информацию о нативных и java-крэшах. Их можно анализировать в отчете Крэши. См. также раздел Крэши/ошибки.
Чтобы уменьшить размер приложения, код оптимизируют во время релизной сборки.
Если во время сборки Android-приложения сжимали и обфусцировали код, то информация о крэшах передается в обфусцированном виде. Чтобы извлечь данные для анализа из таких крэш-логов, AppMetrica выполняет деобфускацию на стороне сервера.
Для этого загрузите mapping-файлы или отладочные символы SO-файлов в AppMetrica: автоматически при сборке приложения или вручную через веб-интерфейс.
Чтобы отправлять файлы, подключите AppMetrica Build Plugin.
Примечание
Загружайте mapping-файлы, если вы используете ProGuard или R8. Если вы не сжимаете и не обфусцируете код, не подключайте плагин.
Работа плагина зависит от версий com.android.tools.build:gradle
(AGP) и gradle.
Поддерживается работа плагина со следующими версиями
com.android.tools.build:gradle
с7.0.+
до8.2.+
(кроме8.0.+
)- gradle с
7.0.2
до8.6
Работа плагина с другими версиями не гарантируется.
Подключение плагина
Чтобы подключить плагин:
-
Добавьте в корневой Gradle файл зависимость:
build.gradle.ktsbuild.gradlebuildscript { repositories { mavenCentral() } dependencies { classpath("io.appmetrica.analytics:gradle:0.11.0") } }
buildscript { repositories { mavenCentral() } dependencies { classpath 'io.appmetrica.analytics:gradle:0.11.0' } }
-
Добавьте в Gradle файл приложения подключение плагина и его настройку:
build.gradle.ktsbuild.gradleplugins { id("com.android.application") id("appmetrica-plugin") } appmetrica { postApiKey = { applicationVariant -> "Post Api key for variant" } // or setPostApiKey("Post Api key") enable = { applicationVariant -> true } // Optional. setMappingBuildTypes(listOf("release")) // Optional. setOffline(false) // Optional. mappingFile = { applicationVariant -> null } // Optional. enableAnalytics = true // Optional. allowTwoAppMetricas = { applicationVariant -> false } // Optional. ndk { // Optional. enable = { applicationVariant -> false } soFiles = { applicationVariant -> listOfSoFiles } // Optional. additionalSoFiles = { applicationVariant -> listOfSoFiles } // Optional. addNdkCrashesDependency = { applicationVariant -> true } // Optional. } }
plugins { id 'com.android.application' id '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. allowTwoAppMetricas = { applicationVariant -> false } // 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
.
allowTwoAppMetricas
Лямбда-функция, которая принимает
ApplicationVariant
и проверяет использование двух библиотек AppMetrica одновременно.Допустимые значения:
false
— плагин проверяет, что в проекте используется только одна версия библиотекиio.appmetrica.analytics:analytics
илиcom.yandex.android:mobmetricalib
. Если это не так, выбрасывается исключение.true
— плагин проверяет использование двух библиотек AppMetrica одновременно, результат проверки пишется в лог.
Значение по умолчанию:
false
.ndk
Параметр необходим для загрузки символов из SO-файла, чтобы отслеживать нативные крэши.
ndk.enable
Лямбда-функция, которая принимает
ApplicationVariant
и возвращает, надо ли загружать символы из SO-файлов для этого варианта сборки.Значение по умолчанию:
false
.ndk.soFiles
Лямбда-функция, которая принимает
ApplicationVariant
и возвращает список SO-файлов.По умолчанию плагин ищет SO-файлы в папках проекта Android Studio.
Необходимо переопределить, если ваши SO-файлы лежат в необычном месте или если плагин не может их найти.
ndk.additionalSoFiles
Лямбда-функция, которая принимает
ApplicationVariant
и возвращает список дополнительных SO-файлов, символы которых необходимо загрузить.ndk.addNdkCrashesDependency
Лямбда-функция, которая принимает
ApplicationVariant
и возвращает, надо ли добавлять зависимость отio.appmetrica.analytics:analytics-ndk-crashes
.Значение по умолчанию:
true
. -
Если параметр
ndk
включен, то для отправки отладочных символов используется задача Gradleupload${variant.name.capitalize()}Symbols
. Чтобы вызывать задачу автоматически, можно добавить в файлapp/build.gradle
следующий код:build.gradle.ktsbuild.gradleandroid.applicationVariants.configureEach { val variant = this val uploadSymbolsTask = project.tasks.findByName("upload${variant.name.capitalize()}Symbols") if (uploadSymbolsTask != null) { variant.assembleProvider.configure { it.finalizedBy(uploadSymbolsTask) } // Если используете apk project.tasks.named("bundle${variant.name.capitalize()}") { finalizedBy(uploadSymbolsTask) } // Если используете aab } }
android.applicationVariants.configureEach { variant -> def uploadSymbolsTask = project.tasks.findByName("upload${variant.name.capitalize()}Symbols") if (uploadSymbolsTask != null) { variant.assembleProvider.configure { it.finalizedBy(uploadSymbolsTask) } // Если используете apk project.tasks.named("bundle${variant.name.capitalize()}") { finalizedBy(uploadSymbolsTask) } // Если используете aab } }
Ручная загрузка
Для ручной загрузки нужно подключить и использовать плагин с режимом offline
. Это необходимо для связывания mapping-файла со сборкой приложения.
-
В файле app/build.gradle включите режим
offline
и запустите сборку.build.gradle.ktsbuild.gradleappmetrica { setOffline(true) }
appmetrica { offline = true }
Параметр
Описание
offline
Включает режим
offline
. Допустимые значения:true
— не загружает mapping-файл в AppMetrica. Если включен, после сборки выводит путь до архива в лог.false
— автоматически загружает mapping-файл. Значение по умолчанию:false
.
-
В интерфейсе AppMetrica перейдите в настройки приложения из меню слева.
-
Откройте вкладку Крэши → Android.
-
Нажмите кнопку Выберите файл и загрузите Zip-архив.
Ошибки при сборке
Возможные ошибки при сборке:
IllegalStateException
— включите обфускацию кода с помощью ProGuard или R8 Compiler;HttpResponseException
— проверьте подключение к интернету.
При возникновении других ошибок обращайтесь в техническую поддержку.
Узнайте больше
Если вы не нашли ответ на свой вопрос, то вы можете задать его через форму обратной связи. Пожалуйста, опишите возникшую проблему как можно подробнее. Если возможно, приложите скриншот.