You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android Gradle插件3.0+下Dexguard映射文件未上传至Crashlytics问题

解决AGP 3.0.1下DexGuard映射文件无法上传至Crashlytics的问题

我之前也碰到过一模一样的情况,AGP从2.x升级到3.x后,Fabric的自动上传任务直接“消失”了——本质是旧版Fabric Gradle插件(1.25.2)没适配AGP 3.0+全新的变体任务触发逻辑,导致crashlyticsUploadDeobs{flavor + buildvariant}任务没被正确绑定到构建流程里。

下面是亲测有效的解决步骤:

1. 先确认DexGuard的映射文件生成配置

首先得保证DexGuard确实输出了正确的mapping文件,在模块级build.gradle的DexGuard配置块里,添加或确认以下配置:

dexguard {
    // 保留你原有的其他配置
    printmapping "${buildDir}/outputs/mapping/${variant.dirName}/mapping.txt"
}

这会让DexGuard在对应变体的输出目录下生成标准格式的mapping文件,供Crashlytics解析使用。

2. 手动绑定上传任务到构建流程

由于AGP 3.0+改用了新的任务提供者(Provider)API,旧版Fabric插件无法自动关联任务,我们需要手动创建并绑定上传任务:

android {
    applicationVariants.all { variant ->
        def variantCapitalized = variant.name.capitalize()
        // 指定DexGuard生成的mapping文件路径
        def mappingFile = file("${buildDir}/outputs/mapping/${variant.dirName}/mapping.txt")
        
        // 创建Crashlytics上传任务
        def uploadDeobsTask = tasks.create(
            name: "crashlyticsUploadDeobs${variantCapitalized}",
            type: com.crashlytics.tools.gradle.tasks.CrashlyticsUploadDeobsTask
        ) {
            this.mappingFile = mappingFile
            this.variantName = variant.name
            this.applicationId = variant.applicationId
        }
        
        // 让上传任务在变体的assemble任务完成后自动执行
        variant.assembleProvider.get().finalizedBy(uploadDeobsTask)
    }
}

这段代码会为每个构建变体创建对应的上传任务,并把它设置为assemble任务的收尾任务,这样每次构建完成后都会自动上传mapping文件。

3. 验证配置是否生效

重新执行构建命令(比如./gradlew assembleRelease),你应该能在控制台日志里看到crashlyticsUploadDeobs{...}任务被执行了。之后再查看Crashlytics的控制台,新产生的崩溃日志应该就能正常反混淆了。

如果后续项目允许升级Fabric插件到更适配AGP 3.x的版本(比如1.30+),可能就不需要手动配置了,但如果因为项目限制必须用1.25.2,上面的方法应该能完美解决问题。

内容的提问来源于stack exchange,提问作者Jason Grife

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:46:48