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

如何在build.gradle中添加仅IDEA同步时生效的代码?

解决KSP生成代码IDEA同步时的Source Set配置问题

方案1:借助idea插件仅在同步时配置

用Gradle的idea插件,只在IDEA同步项目(比如点击「Sync Project with Gradle Files」)时,给当前活跃变体对应的KSP输出目录添加到source set中,构建阶段不会触发这段逻辑,从根源避免类重复。

Groovy版本示例:

plugins {
    id 'com.android.application'
    id 'kotlin-android'
    id 'com.google.devtools.ksp'
    id 'idea'
}

android {
    // 你的Android项目配置...

    applicationVariants.all { variant ->
        def kspOutputDir = file("build/generated/ksp/${variant.name}/kotlin")
        // 仅在IDEA生成项目配置时生效
        idea.module.sourceDirs += kspOutputDir
        // 防止被误识别为测试源码目录
        idea.module.testSourceDirs -= kspOutputDir
    }
}

Kotlin DSL版本:

plugins {
    id("com.android.application")
    id("kotlin-android")
    id("com.google.devtools.ksp")
    id("idea")
}

android {
    // 你的Android项目配置...

    applicationVariants.all {
        val kspOutputDir = file("build/generated/ksp/${name}/kotlin")
        idea.module.sourceDirs.add(kspOutputDir)
        idea.module.testSourceDirs.remove(kspOutputDir)
    }
}

方案2:通过环境变量判断同步阶段

IDEA同步Gradle时会触发特定任务或设置环境变量,我们可以通过这些标识来控制是否添加source set路径。

Groovy版本:

android {
    // 你的Android项目配置...

    applicationVariants.all { variant ->
        def kspOutputDir = file("build/generated/ksp/${variant.name}/kotlin")
        // 检测是否为IDEA同步任务
        if (gradle.startParameter.taskNames.any { it.contains("idea") } || System.getenv("IDEA_SYNC")) {
            sourceSets.getByName(variant.name).java.srcDir(kspOutputDir)
        }
    }
}

Kotlin DSL版本:

android {
    // 你的Android项目配置...

    applicationVariants.all {
        val kspOutputDir = file("build/generated/ksp/${name}/kotlin")
        if (gradle.startParameter.taskNames.any { it.contains("idea") } || System.getenv("IDEA_SYNC") != null) {
            sourceSets.getByName(name).java.srcDir(kspOutputDir)
        }
    }
}

注意事项

  • 不要把所有变体的KSP输出目录都加到main source set里,这是导致类重复的核心原因,只给当前同步的变体路径添加即可。
  • Android Studio通常会自动识别KSP输出目录,但遇到同步不及时的情况,上面的方案可以作为兜底解决。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 02:44:56