我必须将Analytics工具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/intermediates/assets/playStoreStaging/debug/sentry-debug-meta.properties,...]]可能的解决方案:乘法(java.lang.Number),相乘(java.lang.Number)
我假设在commandLine数组之前,乘法符号*存在问题。但是当我删除它时,出现错误
无法创建任务':app:processSentryProguardForPlayStoreStagingDebug'。
无法将具有类'java.lang.String'的对象'sentry-cli'强制转换为类'int']
所以我试图只用那条线来测试]
commandLine "sentry-cli", ...
哪个给了我另一个错误
出了什么问题:无法在空对象上调用方法dependsOn()
因此,我认为该gradle脚本确实出了点问题,因为似乎找不到依赖项任务。是否有人知道如何解决此问题(或者有其他想法,一旦Proguard / R8完成,如何将sendry-debug-meta.properties文件复制到我的资产中)?
谢谢!
我必须将Analytics工具Sentry添加到我们的Android项目中。为了使其工作,需要为混淆的代码(从Proguard / R8)创建映射,然后将其上传到Sentry。在...