Android项目迁移Compose编译器至Kotlin DSL时Gradle同步失败
问题原因
这个同步错误的核心是重复声明Gradle插件导致版本冲突:项目级build.gradle.kts通过buildscript的classpath引入了AGP(Android Gradle Plugin)和Kotlin Gradle插件,同时模块级build.gradle.kts的plugins块又用apply false声明了这些插件,导致Gradle无法确定统一的插件版本,触发兼容性检查失败。
解决方案
1. 重构项目级build.gradle.kts
移除旧的buildscript写法,改用Gradle 7.0+推荐的插件管理方式,将插件统一声明在项目级plugins块中(apply false表示仅声明版本,不直接应用):
// Top-level build file where you can add configuration options common to all sub-projects/modules. plugins { alias(libs.plugins.android.application) apply false alias(libs.plugins.jetbrains.kotlin.android) apply false alias(libs.plugins.compose.compiler) apply false } allprojects { repositories { google() mavenCentral() } } tasks.register("clean", Delete::class) { layout.buildDirectory.set(layout.projectDirectory.dir("out")) }
2. 修正模块级build.gradle.kts
- 移除插件声明的
apply false,直接应用所需插件 - 启用Compose构建特性
- 移除手动添加的Compose编译器依赖(插件会自动管理版本)
修改后的代码:
plugins { alias(libs.plugins.android.application) alias(libs.plugins.jetbrains.kotlin.android) alias(libs.plugins.compose.compiler) } android { namespace = "com.kaufmannmarek.dochazsys" compileSdk = 35 compileOptions { sourceCompatibility = JavaVersion.VERSION_19 targetCompatibility = JavaVersion.VERSION_19 } kotlinOptions { jvmTarget = "19" } defaultConfig { applicationId = "com.kaufmannmarek.dochazsys" minSdkVersion = 23 targetSdkVersion = 35 versionCode = 23 versionName = "2502031045" testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" } // 启用Compose支持 buildFeatures { compose = true } } composeCompiler { enableStrongSkippingMode = true } dependencies { implementation(fileTree(mapOf("dir" to "libs", "include" to listOf("*.jar")))) implementation(libs.androidx.appcompat) implementation(libs.material) implementation(libs.androidx.constraintlayout) implementation(libs.androidx.legacy.support.v4) implementation(libs.androidx.core.ktx) testImplementation(libs.junit) androidTestImplementation(libs.androidx.runner) androidTestImplementation(libs.androidx.espresso.core) implementation(libs.okhttp) implementation(libs.okhttp.urlconnection) implementation(libs.jasypt) implementation(libs.kotlin.stdlib) implementation(libs.androidx.navigation.fragment.ktx) // Compose核心依赖 implementation(libs.androidx.ui) implementation(libs.androidx.runtime) // 移除手动添加的编译器插件依赖(由Compose插件自动管理) // implementation(libs.kotlin.compose.compiler.plugin.embeddable) // implementation(libs.kotlin.compose.compiler.plugin) }
3. 完善libs.version.toml(可选)
给kotlin-compose-compiler-plugin-embeddable添加版本引用,保证版本一致性:
kotlin-compose-compiler-plugin-embeddable = { module = "org.jetbrains.kotlin:kotlin-compose-compiler-plugin-embeddable", version.ref = "kotlinComposeCompilerPlugin" }
关键说明
- 项目级用
apply false声明插件是为了统一管理版本,模块级直接应用即可,避免重复加载 - 旧的
buildscript写法容易导致版本冲突,Gradle 7.0+推荐使用plugins块管理插件 - Compose插件会自动引入对应版本的编译器依赖,手动添加会导致重复或版本不匹配
- 模块级必须启用
buildFeatures.compose = true才能正常编译Compose代码
内容的提问来源于stack exchange,提问作者Alltair4747
相关产品推荐
相关产品推荐

