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中添加:
(替换为你的JDK17实际路径,如org.gradle.java.home=/path/to/your/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
相关产品推荐
相关产品推荐

