原创首发
AndroidStudio 2024.2.2发布apk时候备份mapping文件kts版本

背景
在打包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任务。 文件位置项目根目录下:
还原
有崩溃了就需要还原堆栈。 在Android SDK中这个目录下,有还原工具。
/Android/sdk/tools/proguard/bin
├── proguard.sh
├── proguardgui.sh
└── retrace.sh
Windows执行proguardgui.bat文件就行。 macOS执行./proguardgui.sh
如何权限不够chmod a+x proguardgui.sh
就会显示这样的UI。
点击最后一个ReTrace
,选择备份的mapping文件,然后贴崩溃的堆栈,点击确认即可。