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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 10:33:19