android 项目编译的时候 报错* What went wrong: 25.0.3
排查半天发现根因是 Gradle 用了 JDK 25,而项目需要 JDK 21。
核心坑
Android Studio 里设置的 Gradle JDK,只对 IDE 内部构建生效。命令行跑 flutter build/ gradlew,用的是 shell 环境变量 JAVA_HOME或 GRADLE_LOCAL_JAVA_HOME。
所以在 AS 里把 Gradle JDK 切到 21,终端打包照样用 25。
还有一个特别误导人的点:java -version 显示的是 25,让人以为没设对。其实 java 命令从 PATH 找 java.exe,根本不看 JAVA_HOME 。就算设对了,java -version 可能还是 25,这很正常。
解决(Windows)
临时切到 JDK 21:
swift
set "GRADLE\\\_LOCAL\\\_JAVA\\\_HOME=C:\Users\Administrator\\\\.jdks\jbr-21.0.11"
cd android
gradlew --stop
cd ..
flutter build apk --debug
GRADLE_LOCAL_JAVA_HOME 是 Gradle 专用变量,优先级最高。
永久生效(setx 后要重开终端):
swift
setx JAVA\\\_HOME "C:\Users\Administrator\\\\.jdks\jbr-21.0.11"
setx GRADLE\\\_LOCAL\\\_JAVA\\\_HOME "C:\Users\Administrator\\\\.jdks\jbr-21.0.11"
钉死在项目里(对命令行最强制,任何终端都绕不过):
ini
\\# gradle.properties
org.gradle.java.home=C:/Users/Administrator/.jdks/jbr-21.0.11
反直觉的三点
-
AS 里的 Gradle JDK 设置,管不到命令行打包。
-
java -version看的是 PATH,跟 JAVA_HOME 没关系。 -
命令行里一条命令一行,别把多条 set 写一行,会被当成一个变量值白设。
遇到裸版本号报错别猜,直接跑 gradlew :app:assembleDebug --stacktrace 定位。