You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

如何在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的编译环境,步骤如下:

  1. 升级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
    }
    
  2. 升级Gradle版本
    修改gradle-wrapper.properties中的Gradle版本,匹配Android插件要求:

    distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-all.zip
    
  3. 更新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'
    }
    
  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

火山引擎 最新活动