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

Flutter项目运行报错':charset_converter:compileDebugKotlin'兼容问题求助

解决Flutter项目中:charset_converter:compileDebugKotlin JVM目标兼容性不一致问题

问题核心

Flutter项目编译时,第三方插件charset_converter的Kotlin编译任务JVM目标(如21)与Java编译任务的JVM目标(17)不匹配,导致冲突;但单独打开Android模块时,Android Studio的Gradle JDK设置(JBR-17)生效,因此无报错。

解决方案

1. 统一项目级JVM工具链配置

在Flutter项目的android/build.gradle(根级Android配置文件)中添加全局JVM工具链配置,强制所有模块(包括第三方插件)使用JDK17:

plugins {
    id "com.android.application" version "8.2.0" apply false
    id "org.jetbrains.kotlin.android" version "1.9.23" apply false
}

allprojects {
    repositories {
        google()
        mavenCentral()
    }

    // 统一JVM目标为17
    java {
        toolchain {
            languageVersion = JavaLanguageVersion.of(17)
        }
    }

    // 额外确保Kotlin和Java编译任务的目标一致
    tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).configureEach {
        kotlinOptions {
            jvmTarget = "17"
        }
    }

    tasks.withType(JavaCompile).configureEach {
        sourceCompatibility = JavaVersion.VERSION_17
        targetCompatibility = JavaVersion.VERSION_17
    }
}

2. 强制覆盖插件模块的编译配置

如果charset_converter插件自身硬编码了JVM目标,在app/build.gradle中直接覆盖该模块的配置:

// 在android块外部添加
project(':charset_converter') {
    android {
        compileSdkVersion 34
        compileOptions {
            sourceCompatibility JavaVersion.VERSION_17
            targetCompatibility JavaVersion.VERSION_17
            coreLibraryDesugaringEnabled true
        }
        kotlinOptions {
            jvmTarget = '17'
        }
    }
}

3. 指定Flutter项目的Gradle JDK

由于Flutter项目在Android Studio中不显示Gradle JDK设置,可通过以下方式指定:

  • 在项目的gradle.properties中添加:
    org.gradle.java.home=/path/to/your/jdk17
    
    (替换为你的JDK17实际路径,如~/Library/Java/JavaVirtualMachines/jbr-17.jdk/Contents/Home)
  • 或者设置环境变量GRADLE_JAVA_HOME指向JDK17路径。

4. 清理缓存并重新编译

执行以下命令彻底清理缓存:

flutter clean
rm -rf android/.gradle
flutter pub get
flutter run

原因说明

单独打开Android模块时,Android Studio会使用你配置的JBR-17作为Gradle JDK,所有模块的编译目标自动对齐;但Flutter项目默认可能使用Flutter自带的JDK或系统JDK,导致第三方插件编译时采用了与主App不一致的JVM目标,触发兼容性校验错误。

内容的提问来源于stack exchange,提问作者Benedek Körtvélyesi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 10:52:33