mapping.txt 文件仅在 minifyEnabled 为 true 且启用 ProGuard/R8 时生成,路径为 app/build/outputs/mapping//mapping.txt,用于崩溃日志还原。

默认路径是 app/build/outputs/mapping/release/,但具体位置取决于 buildType 名称和是否启用了 minifyEnabled。
mapping.txt 文件生成的前提条件
混淆映射文件(mapping.txt)只在同时满足以下两个条件时才会生成:
-
minifyEnabled true在对应 buildType(如release)中开启 - 项目中实际使用了 ProGuard 或 R8(Android Studio 3.4+ 默认启用 R8)进行代码优化/混淆
如果只是开了 shrinkResources true 但没开 minifyEnabled,mapping.txt 不会出现。
常见路径与命名规则
路径由 Gradle 自动拼接,结构固定为:app/build/outputs/mapping/<buildtype>/mapping.txt</buildtype>。例如:
- 默认 release 构建 →
app/build/outputs/mapping/release/mapping.txt - 自定义 buildType 叫
prod→app/build/outputs/mapping/prod/mapping.txt - debug 模式下手动开了
minifyEnabled true→app/build/outputs/mapping/debug/mapping.txt
注意:mapping.txt 是纯文本,不加密;它记录了原始类/方法/字段名到混淆后名称的双向映射,用于崩溃日志还原。
为什么有时找不到 mapping.txt?
几个高频原因:
- 构建任务没执行完整:只运行了
assembleDebug而非assembleRelease,或用了build但当前 defaultConfig 的buildTypes中release未激活minifyEnabled - 使用了
android.useAndroidX=true和android.enableJetifier=false等配置,但 R8 在某些旧 AGP 版本中可能跳过 mapping 输出(建议升级 AGP ≥ 8.2) - 自定义了
android.buildTypes.release.minifyEnabled = false或通过命令行传参覆盖了配置,比如./gradlew assembleRelease -Pandroid.injected.minifyEnabled=false - 启用了
android.debug.obsoleteApi=true等实验性选项,干扰了 R8 的输出逻辑
如何确保每次 release 都稳定生成 mapping.txt
推荐在 app/build.gradle 的 android 块中显式声明输出路径(R8 兼容):
android {
buildTypes {
release {
minifyEnabled true
shrinkResources true
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
// 强制指定 mapping 输出位置(可选,但更可控)
android.buildTypes.release.mappingFile = file("build/outputs/mapping/release/mapping.txt")
}
}
}
这个写法不会改变默认行为,但能避免因插件版本差异导致的路径歧义。另外,上线前务必确认该文件被归档——它一旦丢失,线上崩溃堆栈就无法还原原始方法名。


















