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

迁移至Gradle Kotlin DSL后Proguard构建耗时过长问题求助

解决Gradle Kotlin DSL下Proguard构建耗时过长及文件缺失问题

针对你迁移到Gradle Kotlin DSL后遇到的这一堆Proguard相关问题——构建耗时飙到30分钟、关键映射文件莫名被移除,还有resources.txt死活生成不出来,我整理了几个针对性的排查和解决方向,你可以一步步试试:

1. 先查任务依赖和清理逻辑的冲突

这种“文件刚生成就被删,导致Proguard反复重跑”的问题,大概率是某个清理类任务(比如自带的clean,或者你自定义的清理任务)在捣乱,和Proguard任务的执行时机撞车了。

  • 先扫一遍项目里的自定义任务,有没有直接操作build/outputs/mapping目录的delete逻辑,看看是不是没设置好任务依赖,导致Proguard刚生成文件,它就给删了。
  • Kotlin DSL里任务依赖的写法和Groovy有点不一样,得确保Proguard相关任务(比如transformClassesAndResourcesWithProguardForStageInternal)的mustRunAfter或者dependsOn配置正确,别让清理任务在它之后执行。
  • 可以跑./gradlew tasks --all看完整的任务依赖链,或者用./gradlew app:transformClassesAndResourcesWithProguardForStageInternal --info输出详细日志,盯着文件被删除的时间点,就能查到是哪个任务搞的鬼。

2. 修正Proguard输出路径的配置

Kotlin DSL里对Proguard输出文件的配置方式和Groovy有差异,可能Gradle没正确追踪到文件状态,才会误以为文件被移除了。

  • 检查你的build.gradle.kts里的Proguard配置块,确保mappingFile、seedsFile、usageFile的路径设置准确,别被其他任务覆盖了。比如正确的配置应该是这样:
    android {
        buildTypes {
            named("stageInternal") {
                proguardFiles(
                    getDefaultProguardFile("proguard-android-optimize.txt"),
                    "proguard-rules.pro"
                )
                mappingFile = file("$buildDir/outputs/mapping/stage/internal/mapping.txt")
                seedsFile = file("$buildDir/outputs/mapping/stage/internal/seeds.txt")
                usageFile = file("$buildDir/outputs/mapping/stage/internal/usage.txt")
            }
        }
    }
    
  • 还要确认这些输出路径没被Gradle默认的clean任务包含进去,有些自定义路径可能不小心被归到了清理目录里。

3. 搞定resources.txt未生成的问题

resources.txt一般是Proguard记录资源混淆或保留情况的文件,没生成大概率是配置漏了:

  • 先看你的Proguard规则文件里有没有资源相关的配置,如果开了资源混淆,得确保有对应的规则来生成这个文件。另外在Kotlin DSL里,可能需要显式指定资源混淆的输出路径:
    android {
        buildTypes {
            named("stageInternal") {
                // 如果启用了资源混淆,先指定规则文件
                resourceProguardFiles("proguard-resources.pro")
                // 显式设置resources.txt的路径
                resourceMappingFile = file("$buildDir/outputs/mapping/stage/internal/resources.txt")
            }
        }
    }
    
  • 也有可能是AGP和Gradle版本不兼容,旧版本在Kotlin DSL下对资源混淆的输出支持有问题,试试升级到稳定版的AGP和Gradle。

4. 开构建缓存减少重复工作

既然构建耗时翻了好几倍,赶紧把Gradle构建缓存开起来,能省不少重复执行任务的时间:

  • 在settings.gradle.kts里确认构建缓存的配置:
    buildCache {
        local {
            enabled = true
        }
    }
    
  • 要么执行构建时加--build-cache参数,要么在gradle.properties里设org.gradle.caching=true,让Gradle自动复用之前的构建输出。

5. 临时测试:禁用清理任务

要是一时找不到删文件的任务,可以先临时禁用清理任务试试,比如跑./gradlew app:transformClassesAndResourcesWithProguardForStageInternal -x clean,看看文件还会不会被移除,这样就能确认是不是清理任务搞的鬼了。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 05:36:18