如何修改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")) } } } }
为什么要这样改?
- 用
main替代named("main"):AGP为常用的SourceSet(main、test、androidTest等)提供了直接的扩展属性,比通过named()查找更简洁。 - 使用
project.layout处理路径:直接用字符串路径可能会遇到跨平台分隔符、相对路径解析错误等问题,而layout.projectDirectory.dir()是Gradle官方推荐的类型安全路径写法。 - 集中到
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
相关产品推荐
相关产品推荐

