Flutter构建APK仍调用已卸载的OpenJDK 17,切换OracleJDK 1.8无效
问题描述
已卸载OpenJDK 17.0.6并降级至OracleJDK 1.8.0_381,JAVA_HOME路径设置为/Library/Java/JavaVirtualMachines/jdk-1.8.jdk/Contents/Home,但执行flutter build apk -v时,Flutter仍尝试使用OpenJDK 17构建APK,导致Gradle报错无法识别版本'17.0.6'。
报错日志
[ +8 ms] FAILURE: Build failed with an exception. [ +2 ms] * What went wrong: [ ] Could not determine java version from '17.0.6'. [ ] * Try: [ ] Run with --debug option to get more log output. [ ] * Exception is: [ ] java.lang.IllegalArgumentException: Could not determine java version from '17.0.6'. [ ] at org.gradle.api.JavaVersion.toVersion(JavaVersion.java:72) [ ] at org.gradle.api.JavaVersion.current(JavaVersion.java:82) [ ] at org.gradle.internal.jvm.UnsupportedJavaRuntimeException.assertUsingVersion(UnsupportedJavaRuntimeException.java:42) [ ] at org.gradle.launcher.cli.JavaRuntimeValidationAction.execute(JavaRuntimeValidationAction.java:32) [ ] at org.gradle.launcher.cli.JavaRuntimeValidationAction.execute(JavaRuntimeValidationAction.java:24) [ ] at org.gradle.launcher.cli.ExceptionReportingAction.execute(ExceptionReportingAction.java:33) [ ] at org.gradle.launcher.cli.ExceptionReportingAction.execute(ExceptionReportingAction.java:22) [ ] at org.gradle.launcher.cli.CommandLineActionFactory$WithLogging.execute(CommandLineActionFactory.java:246) [ ] at org.gradle.launcher.cli.CommandLineActionFactory$WithLogging.execute(CommandLineActionFactory.java:182) [ ] at org.gradle.launcher.Main.doAction(Main.java:33) [ ] at org.gradle.launcher.bootstrap.EntryPoint.run(EntryPoint.java:45) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) [ ] at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) [ ] at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) [ ] at java.base/java.lang.reflect.Method.invoke(Unknown Source) [ ] at org.gradle.launcher.bootstrap.ProcessBootstrap.runNoExit(ProcessBootstrap.java:60) [ ] at org.gradle.launcher.bootstrap.ProcessBootstrap.run(ProcessBootstrap.java:37) [ ] at org.gradle.launcher.GradleMain.main(GradleMain.java:23) [ ] at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) [ ] at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) [ ] at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) [ ] at java.base/java.lang.reflect.Method.invoke(Unknown Source) [ ] at org.gradle.wrapper.BootstrapMainStarter.start(BootstrapMainStarter.java:30) [ ] at org.gradle.wrapper.WrapperExecutor.execute(WrapperExecutor.java:129) at org.gradle.wrapper.GradleWrapperMain.main(GradleWrapperMain.java:61) ] * Get more help at https://help.gradle.org [ +34 ms] Running Gradle task 'assembleRelease'... (completed in 529ms) [ +5 ms] "flutter apk" took 20,334ms. [ +3 ms] Gradle task assembleRelease failed with exit code 1 [ ] #0 throwToolExit (package:flutter_tools/src/base/common.dart:10:3) #1 AndroidGradleBuilder.buildGradleApp (package:flutter_tools/src/android/gradle.dart:456:9) #2 AndroidGradleBuilder.buildApk (package:flutter_tools/src/android/gradle.dart:208:5) #3 BuildApkCommand.runCommand (package:flutter_tools/src/commands/build_apk.dart:116:5) #4 FlutterCommand.run. (package:flutter_tools/src/runner/flutter_command.dart:1336:27) #5 AppContext.run. (package:flutter_tools/src/base/context.dart:150:19) #6 CommandRunner.runCommand (package:args/command_runner.dart:212:13) #7 FlutterCommandRunner.runCommand. (package:flutter_tools/src/runner/flutter_command_runner.dart:296:9) #8 AppContext.run. (package:flutter_tools/src/base/context.dart:150:19) #9 FlutterCommandRunner.runCommand (package:flutter_tools/src/runner/flutter_command_runner.dart:244:5) #10 run.. (package:flutter_tools/runner.dart:91:9) #11 AppContext.run. (package:flutter_tools/src/base/context.dart:150:19) #12 main (package:flutter_tools/executable.dart:91:3)
解决方案
- 验证终端Java环境:执行
java -version和javac -version,确认输出为1.8.0_381。若仍显示17,执行source ~/.bash_profile或source ~/.zshrc(根据你使用的Shell)重新加载环境变量配置。 - 确认全局环境变量配置:
- 打开Shell配置文件(如
~/.bash_profile、~/.zshrc),添加以下配置:export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk-1.8.jdk/Contents/Home export PATH=$JAVA_HOME/bin:$PATH - 保存后执行
source命令生效,再用echo $JAVA_HOME和java -version验证配置是否正确。
- 打开Shell配置文件(如
- 指定Gradle使用的JDK:
- 进入项目的
android目录,编辑gradle.properties,添加:org.gradle.java.home=/Library/Java/JavaVirtualMachines/jdk-1.8.jdk/Contents/Home - 或编辑项目根目录的
local.properties,添加:java.home=/Library/Java/JavaVirtualMachines/jdk-1.8.jdk/Contents/Home
- 进入项目的
- 清理缓存重新构建:
- 执行
flutter clean,删除项目android/.gradle目录,再重新运行flutter build apk -v。
- 执行
- 检查IDE配置(如果用IDE构建):
- 若使用Android Studio或VS Code,在IDE设置中指定JDK路径为OracleJDK 1.8的安装目录,避免IDE沿用旧的JDK配置。
内容的提问来源于stack exchange,提问作者Amin Memariani
相关产品推荐
相关产品推荐

