Мне нужно добавить инструмент аналитики Sentry в наш Android проект. Чтобы заставить его работать, нужно создать сопоставления для запутанного кода (из Proguard / R8) и загрузить его позже в Sentry.
На сайте https://docs.sentry.io/platforms/android/ это даже описал, как это сделать. Там написано, что нужно создать задачу gradle, похожую на эту:
gradle.projectsEvaluated {
android.applicationVariants.each { variant ->
def variantName = variant.name.capitalize();
def proguardTask = project.tasks.findByName(
"transformClassesAndResourcesWithProguardFor${variantName}")
def dexTask = project.tasks.findByName(
"transformClassesWithDexFor${variantName}")
def task = project.tasks.create(
name: "processSentryProguardFor${variantName}",
type: Exec) {
workingDir project.rootDir
commandLine *[
"sentry-cli",
"upload-proguard",
"--write-properties",
"${project.rootDir.toPath()}/app/build/intermediates/assets" +
"/${variant.dirName}/sentry-debug-meta.properties",
variant.getMappingFile(),
"--no-upload"
]
}
dexTask.dependsOn task
task.dependsOn proguardTask
}
}
Это должно подождать, пока Proguard не будет завершен, чем скопировать этот файл свойств в ресурсы. Однако, когда я добавляю это в мой Android сценарий gradle, я получаю сообщение об ошибке:
Не удалось создать задачу ': app: processSentryProguardForPlayStoreStagingDebug'.
Нет подписи Метод: java .util.ArrayList.multiply () применим для типов аргументов: (ArrayList) значения: [[sentry-cli, upload-proguard, --write-properties, {Application-Path} / app / build / промежуточные / активы / playStoreStaging / debug / sentry-debug-meta.properties, ...]] Возможные решения: умножение (java .lang.Number), умножение (java .lang.Number)
Я предполагаю, что что-то не так с символом умножения * перед массивом commandLine. Но когда я удаляю его, я получаю ошибку
Не удалось создать задачу ': app: processSentryProguardForPlayStoreStagingDebug'.
Невозможно привести объект 'sentry-cli' с классом 'java .lang.String 'to class' int '
Поэтому я попытался проверить это только с этой строкой
commandLine "sentry-cli", ...
, которая дала мне еще один ошибка
Что пошло не так: Невозможно вызвать метод зависящий от On () для нулевого объекта
Таким образом, я предполагаю, что что-то пошло не так с этим скриптом gradle, так как кажется, что не может быть найдена зависимая задача У кого-нибудь есть идеи, как это исправить (или, если хотите, у вас есть идея, как скопировать этот файл sentry-debug-meta.properties в мои ресурсы другим способом после завершения работы Proguard / R8)?
Спасибо !
-------- РЕДАКТИРОВАТЬ --------
Я заметил кое-что важное. Задачи Gradle определены под другим именем, нежели было определено в руководстве. Глядя на мои задачи, они называются
transformClassesAndResourcesWithR8For...
и
transformClassesWithDexBuilderFor...
Однако я печатаю вариантName затем для проверки, но кажется, что мои задачи не завершены.
В моем списке задач есть
transformClassesAndResourcesWithR8ForPlayStoreStagingDebug
, но не
transformClassesAndResourcesWithR8ForPlayStoreStagingRelease
, и, следовательно, задача не может быть найдена. Я думаю, что это реальная проблема здесь. Так, где эти заданные задачи определены?
------- РЕДАКТИРОВАТЬ 2 --------
Хорошо, я заметил кое-что странное здесь. У некоторых вариантов нет задач. Имеет смысл, что задачи DEBUG не имеют задач R8, но я нашел это здесь:
Вариант: PlayStoreStagingRelease DexTask равен нулю
Вариант: PlayStorePreviewRelease DexTask равен нулю
Вариант: HockeyAppRelease DexTask равен нулю
Вариант: LocalServerRelease DexTask равен нулю
Вариант: PlayStoreProductionRelease DexTask равен нулю
Так как это может быть?