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

如何修改Gradle配置以弃用kotlin.sourceSets DSL并解决相关报错

如何修改Gradle配置以弃用kotlin.sourceSets DSL并解决相关报错

看起来你已经找对了方向——把Kotlin源码目录的配置迁移到android.sourceSets块里,这正是替代kotlin.sourceSets的官方推荐方式。不过当前的配置可能存在一些小问题,我来帮你修正并解释背后的逻辑:

一、修正App模块的SourceSets配置

你的现有代码已经在android.sourceSets里配置Kotlin目录了,但路径处理和语法可以更严谨。修改app/build.gradle.kts中的sourceSets块如下:

android {
    // 保留你原有的其他配置(defaultConfig、compileOptions等)
    
    sourceSets {
        main { // 直接用main替代named("main"),写法更简洁直观
            kotlin {
                // 使用Gradle布局API获取可靠的目录引用,避免路径解析问题
                srcDir(project.layout.projectDirectory.dir("additionalSourceDirectory/kotlin"))
                
                // 如果你需要添加多个目录,可以继续追加:
                // srcDir(project.layout.projectDirectory.dir("anotherSourceDir/kotlin"))
            }
        }
    }
}

为什么要这样改?

  1. 用main替代named("main"):AGP为常用的SourceSet(main、test、androidTest等)提供了直接的扩展属性,比通过named()查找更简洁。
  2. 使用project.layout处理路径:直接用字符串路径可能会遇到跨平台分隔符、相对路径解析错误等问题,而layout.projectDirectory.dir()是Gradle官方推荐的类型安全路径写法。
  3. 集中到android.sourceSets:从AGP 7.0开始,所有与Android模块源码相关的配置都应该放在这里,彻底告别分散的kotlin.sourceSets块。

二、彻底移除旧的kotlin.sourceSets配置

如果你之前的代码里有类似下面的配置,请完全删除它——现在已经不需要了:

// 请删除这段旧配置
kotlin {
    sourceSets {
        main {
            kotlin.srcDirs("additionalSourceDirectory/kotlin")
        }
    }
}

三、修复Java与Kotlin的版本兼容性问题

我注意到你的配置里存在版本不匹配:

  • Java编译选项设置的是1.8
  • Kotlin的jvmTarget设置的是11

这会导致编译冲突,需要统一版本。推荐升级到Java 11(Kotlin 2.0对JDK 8的支持有限),修改compileOptions如下:

compileOptions {
    sourceCompatibility = JavaVersion.VERSION_11
    targetCompatibility = JavaVersion.VERSION_11
}

四、版本兼容性检查

确保你的AGP版本与Kotlin版本匹配:Kotlin 2.0需要AGP 8.2或更高版本支持。可以在libs.versions.toml里确认版本别名的对应关系。

最终的App模块build.gradle.kts示例

plugins {
    alias(libs.plugins.android.application)
    alias(libs.plugins.compose.compiler)
}

android {
    namespace = "com.yourpackage.yourapp" // 确保配置了正确的namespace
    compileSdk = 34 // 替换为你当前使用的compileSdk版本

    defaultConfig {
        applicationId = "com.yourpackage.yourapp"
        minSdk = 21 // 替换为你的minSdk版本
        targetSdk = 34
        versionCode = 1
        versionName = "1.0"

        ksp {
            arg("room.schemaLocation", "$projectDir/schemas")
        }
    }

    buildTypes {
        release {
            isMinifyEnabled = false
            proguardFiles(
                getDefaultProguardFile("proguard-android-optimize.txt"),
                "proguard-rules.pro"
            )
        }
    }

    compileOptions {
        sourceCompatibility = JavaVersion.VERSION_11
        targetCompatibility = JavaVersion.VERSION_11
    }

    sourceSets {
        main {
            kotlin {
                srcDir(project.layout.projectDirectory.dir("additionalSourceDirectory/kotlin"))
            }
        }
    }
}

kotlin {
    compilerOptions {
        languageVersion = org.jetbrains.kotlin.gradle.dsl.KotlinVersion.KOTLIN_2_0
        jvmTarget = org.jetbrains.kotlin.gradle.dsl.JvmTarget.JVM_11
    }
}

dependencies {
    // 保留你的依赖配置...
}

根目录build.gradle.kts无需修改

你当前的根目录配置是正确的,保持原样即可——只需要确保所有插件别名都在libs.versions.toml中正确定义。

备注:内容来源于stack exchange,提问作者Joyce Opio

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.13 18:08:12