背景
在打包release的apk之后需要保留一份mapping文件。如果在混淆后的app发生崩溃,堆栈都是混淆情况下分析问题就很艰难。备份mapping是有必要的。
环境
AndroidStudio 2024.2.2 kts版本 插件版本:
distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-bin.zip
plugins {
id 'com.android.application' version '8.8.2' apply false
id 'com.android.library' version '8.8.2' apply false
id 'org.jetbrains.kotlin.android' version '2.1.0' apply false
}
备份mapping的代码
在主模块的build.gradel.kts中
android {
...
applicationVariants.all {
if (buildType.name == "release") {
// 拦截 assembleRelease 任务完成之后执行
assembleProvider.get().doLast {
val mappingFile = mappingFile
val versionName = versionName ?: "unknown"
val outputDir = File(rootProject.projectDir, "mapping-backup/${name}-$versionName")
outputDir.mkdirs()
mappingFile?.let {
val targetFile = File(outputDir, "mapping.txt")
it.copyTo(targetFile, overwrite = true)
println("✅ Copied mapping.txt to: ${targetFile.absolutePath}")
} ?: run {
println("⚠️ No mapping file found for variant: $name")
}
}
}
}
...
}
这个时候,构建assembleRelease任务。 文件位置项目根目录下: