Flutter构建APK报错:Unknown Kotlin JVM Target:21(nb_utils模块)
问题重现
执行flutter build apk时触发如下错误:
FAILURE: Build failed with an exception.
- 出错原因:无法确定任务':nb_utils:compileReleaseKotlin'的依赖项。
Unknown Kotlin JVM target: 21
- 建议尝试:
使用--stacktrace选项获取堆栈跟踪;使用--info或--debug选项获取更多日志输出;使用--scan选项获取完整分析;访问https://help.gradle.org获取更多帮助。
BUILD FAILED in 1s
Running Gradle task 'assembleRelease'...
1,620ms
Gradle task assembleRelease failed with exit code 1
当前项目app/build.gradle配置如下:
plugins { id "com.android.application" id "kotlin-android" id "dev.flutter.flutter-gradle-plugin" id "com.google.gms.google-services" } def localProperties = new Properties() def localPropertiesFile = rootProject.file('local.properties') if (localPropertiesFile.exists()) { localPropertiesFile.withReader('UTF-8') { reader -> localProperties.load(reader) } } android { compileSdkVersion 34 sourceSets { main.java.srcDirs += 'src/main/kotlin' } lintOptions { disable 'InvalidPackage' } defaultConfig { applicationId "com.mighty.web" minSdkVersion 22 targetSdkVersion 34 versionCode 36 versionName "5.0.2" multiDexEnabled true } buildTypes { release { minifyEnabled false shrinkResources false signingConfig signingConfigs.debug } } googleServices { disableVersionCheck = true } } flutter { source '../..' } allprojects { /// TODO: remove. hotfix for flutter_inappwebview (using androidx.webkit:webkit:1.8.0) /// webview_flutter_android: ^3.16.2 androidx.webkit:webkit ^1.9.0 remove SUPPRESS_ERROR_PAGE configurations.all { resolutionStrategy { force 'androidx.webkit:webkit:1.8.0' } } } dependencies { implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.8.0" implementation 'androidx.multidex:multidex:2.0.1' implementation 'com.google.firebase:firebase-analytics:21.2.2' implementation 'com.google.android.gms:play-services-basement:18.2.0' }
解决方案
1. 升级Kotlin版本并配置JVM目标
当前项目使用的Kotlin 1.8.0不支持JVM Target 21,需升级到1.9.0及以上版本(该版本开始支持JVM 21),同时明确指定JVM目标为你正在使用的Java 11:
- 修改
app/build.gradle中的Kotlin依赖:dependencies { // 替换旧版本为1.9.20或更高兼容版本 implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.9.20" // 其他依赖保持不变 } - 在
android代码块中添加Kotlin编译选项:android { // 现有配置保持不变 kotlinOptions { jvmTarget = "11" // 匹配你的Java SDK版本 } }
2. 全局强制所有模块使用统一JVM目标
如果nb_utils模块自身硬编码了JVM Target 21,可在项目根目录的build.gradle中添加全局配置,强制覆盖所有模块的Kotlin编译选项:
allprojects { repositories { // 保持原有仓库配置(如google(), mavenCentral()) } // 添加这段配置 tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).configureEach { kotlinOptions { jvmTarget = "11" } } }
3. 确认Java SDK路径正确
检查local.properties文件中是否正确指向Java 11的安装路径:
org.gradle.java.home=/path/to/your/java11
4. 升级nb_utils依赖
尝试将pubspec.yaml中的nb_utils版本升级到最新稳定版,新版本可能已修复JVM目标相关问题,执行flutter pub get更新依赖。
验证
完成上述配置后,依次执行flutter clean和flutter build apk,确认错误是否解决。
内容的提问来源于stack exchange,提问作者sirushti

