已用最新Kotlin版本,Flutter打包APK仍报错,求原因
Debug与Release构建的差异
Debug模式下Gradle会启用部分兼容机制,比如放宽元数据版本校验、使用更宽松的编译参数,允许旧版Kotlin依赖的代码正常运行;但Release构建为了保证最终包的稳定性和兼容性,会严格校验所有依赖的元数据版本,因此触发了版本不匹配的报错。Kotlin插件与第三方依赖版本不兼容
你虽然在settings.gradle中把org.jetbrains.kotlin.android插件升级到了2.1.10,但项目里的第三方依赖(比如Flutter插件、Android原生库)可能还在使用基于Kotlin 1.8.x编译的代码,这些依赖的元数据版本是1.8.0,和Kotlin 2.1.x的元数据版本(2.1.0)无法兼容。Gradle配置未全局同步
仅在settings.gradle的plugins块配置Kotlin版本,可能没覆盖所有模块的配置——比如app/build.gradle里可能还残留旧版Kotlin的引用,或者子模块的Kotlin版本未同步更新,导致打包时出现版本冲突。
统一所有模块的Kotlin版本
确保在settings.gradle的pluginManagement块统一指定插件版本,同时在app/build.gradle中明确Kotlin标准库版本:// settings.gradle pluginManagement { plugins { id "org.jetbrains.kotlin.android" version "2.1.10" apply false } } // app/build.gradle dependencies { implementation "org.jetbrains.kotlin:kotlin-stdlib:2.1.10" // 其他依赖项... }排查并更新第三方依赖
执行flutter pub deps查看依赖树,找出仍依赖旧版Kotlin的插件。如果是社区插件,检查是否有适配Kotlin 2.x的更新版本;如果是自定义插件,需要将其Kotlin版本升级到2.1.10后重新编译。临时兼容旧版元数据(过渡方案)
如果暂时无法更新所有依赖,可以在app/build.gradle中添加配置强制兼容旧版元数据:android { compileOptions { sourceCompatibility JavaVersion.VERSION_17 targetCompatibility JavaVersion.VERSION_17 } kotlinOptions { jvmTarget = "17" freeCompilerArgs += "-Xallow-kotlin-package" freeCompilerArgs += "-Xmetadata-version=1.8" } }注意:此方案可能存在潜在兼容性风险,仅作为临时过渡使用,建议尽快更新依赖。
清理Gradle缓存
执行以下命令清理缓存,避免旧版本依赖残留:./gradlew clean ./gradlew build --refresh-dependencies flutter clean flutter pub get
内容的提问来源于stack exchange,提问作者unrealt3n

