如何在Flutter/Android项目中脱离Java 8源/目标兼容性
解决Flutter项目Java 8源/目标兼容性警告问题
项目背景与环境配置
通过以下命令创建Flutter项目:
flutter create tutorial_flutter_redux_navigation --platforms android --empty
flutter doctor -v 输出
[✓] Flutter (Channel stable, 3.24.4, on macOS 15.0.1 24A348 darwin-arm64, locale en-US) • Flutter version 3.24.4 on channel stable at /Users/axiopisty/apps/flutter • Upstream repository https://github.com/flutter/flutter.git • Framework revision 603104015d (9 days ago), 2024-10-24 08:01:25 -0700 • Engine revision db49896cf2 • Dart version 3.5.4 • DevTools version 2.37.3 [✓] Android toolchain - develop for Android devices (Android SDK version 34.0.0) • Android SDK at /Users/axiopisty/Library/Android/sdk • Platform android-34, build-tools 34.0.0 • Java binary at: /Users/axiopisty/Applications/Android Studio.app/Contents/jbr/Contents/Home/bin/java • Java version OpenJDK Runtime Environment (build 21.0.3+-79915917-b509.11) • All Android licenses accepted. [✓] Xcode - develop for iOS and macOS (Xcode 16.1) • Xcode at /Applications/Xcode.app/Contents/Developer • Build 16B40 • CocoaPods version 1.15.0 [✓] Chrome - develop for the web • Chrome at /Applications/Google Chrome.app/Contents/MacOS/Google Chrome [✓] Android Studio (version 2024.2) • Android Studio at /Users/axiopisty/Applications/Android Studio.app/Contents • Flutter plugin can be installed from: 🔨 https://plugins.jetbrains.com/plugin/9212-flutter • Dart plugin can be installed from: 🔨 https://plugins.jetbrains.com/plugin/6351-dart • Java version OpenJDK Runtime Environment (build 21.0.3+-79915917-b509.11) [✓] IntelliJ IDEA Ultimate Edition (version 2024.2.4) • IntelliJ at /Users/axiopisty/Applications/IntelliJ IDEA Ultimate.app • Flutter plugin version 82.0.3 • Dart plugin version 242.22855.32 [✓] Connected device (4 available) • XQ DQ62 (mobile) • QV7702KBJA • android-arm64 • Android 14 (API 34) • macOS (desktop) • macos • darwin-arm64 • macOS 15.0.1 24A348 darwin-arm64 • Mac Designed for iPad (desktop) • mac-designed-for-ipad • darwin • macOS 15.0.1 24A348 darwin-arm64 • Chrome (web) • chrome • web-javascript • Google Chrome 130.0.6723.92 [✓] Network resources • All expected network resources are available. • No issues found!
关键Gradle配置文件
gradle-wrapper.properties
distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip
settings.gradle
plugins { id "dev.flutter.flutter-plugin-loader" version "1.0.0" id "com.android.application" version "8.1.0" apply false id "org.jetbrains.kotlin.android" version "1.8.22" apply false }
android/app/build.gradle(Java 8配置部分)
android { ... def javaVersion = JavaVersion.VERSION_1_8 compileOptions { sourceCompatibility = javaVersion targetCompatibility = javaVersion } kotlinOptions { jvmTarget = javaVersion } ... }
构建警告信息
运行flutter run时出现以下警告:
Running Gradle task 'assembleDebug'... warning: [options] source value 8 is obsolete and will be removed in a future release warning: [options] target value 8 is obsolete and will be removed in a future release warning: [options] To suppress warnings about obsolete options, use -Xlint:-options. 3 warnings
升级Java版本后的构建错误
尝试将Java版本升级到JavaVersion.VERSION_11时,触发构建失败:
Running Gradle task 'assembleDebug'... FAILURE: Build failed with an exception. * What went wrong: Execution failed for task ':app:compileDebugJavaWithJavac'. > Could not resolve all files for configuration ':app:androidJdkImage'. > Failed to transform core-for-system-modules.jar to match attributes {artifactType=_internal_android_jdk_image, org.gradle.libraryelements=jar, org.gradle.usage=java-runtime}. > Execution failed for JdkImageTransform: /Users/axiopisty/Library/Android/sdk/platforms/android-34/core-for-system-modules.jar. > Error while executing process /Users/axiopisty/Applications/Android Studio.app/Contents/jbr/Contents/Home/bin/jlink with arguments {--module-path /Users/axiopisty/.gradle/caches/transforms-3/d9e926982c2c139ff9125eb7b6be4144/transformed/output/temp/jmod --add-modules java.base --output /Users/axiopisty/.gradle/caches/transforms-3/d9e926982c2c139ff9125eb7b6be4144/transformed/output/jdkImage --disable-plugin system-modules}
需求
不通过构建参数抑制警告,彻底脱离Java 8的源/目标兼容性配置,确保项目适配未来更新(当前Android Studio使用Java 21构建)。
解决方案
要彻底解决问题,需同步升级Gradle工具链、Android插件版本,并配置Java 11/21的编译环境,步骤如下:
升级Android Gradle插件与Kotlin版本
修改settings.gradle中的插件版本,确保与高版本Java兼容:plugins { id "dev.flutter.flutter-plugin-loader" version "1.0.0" id "com.android.application" version "8.5.0" apply false id "org.jetbrains.kotlin.android" version "1.9.20" apply false }升级Gradle版本
修改gradle-wrapper.properties中的Gradle版本,匹配Android插件要求:distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-all.zip更新Java编译配置
修改android/app/build.gradle中的Java版本为11或21,并添加脱糖支持:android { def javaVersion = JavaVersion.VERSION_11 // 或JavaVersion.VERSION_21 namespace = "com.github.axiopisty.tutorial_flutter_redux_navigation" compileSdk = flutter.compileSdkVersion ndkVersion = flutter.ndkVersion compileOptions { sourceCompatibility = javaVersion targetCompatibility = javaVersion coreLibraryDesugaringEnabled = true // 启用核心库脱糖,兼容旧Android版本 } kotlinOptions { jvmTarget = javaVersion.toString() } // 保留原有defaultConfig、buildTypes等配置... } dependencies { // 添加脱糖依赖 coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:2.0.4' }清理缓存并重新构建
执行以下命令确保缓存清除,然后重新运行项目:flutter clean flutter run
说明
- Android Gradle插件8.0+开始原生支持Java 11及以上版本,旧版本插件与高版本Java不兼容,会导致构建错误。
- 核心库脱糖(coreLibraryDesugaring)用于让旧Android版本(API < 24)支持Java 8+的核心库API,避免运行时异常。
- Gradle版本需与Android插件版本匹配,Gradle 8.7完全支持Java 21,与当前Android Studio的JDK版本一致。
内容的提问来源于stack exchange,提问作者axiopisty




