Android 打包报错 25.0.3

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

反直觉的三点

  1. AS 里的 Gradle JDK 设置,管不到命令行打包。

  2. java -version 看的是 PATH,跟 JAVA_HOME 没关系。

  3. 命令行里一条命令一行,别把多条 set 写一行,会被当成一个变量值白设。

遇到裸版本号报错别猜,直接跑 gradlew :app:assembleDebug --stacktrace 定位。

相关推荐
汪海游龙9 小时前
流式回复结尾的那一下闪:逐帧定位 Compose 聊天列表的三处布局跳动
android·性能优化·kotlin
Amos_Web9 小时前
Markdonw语法
开发语言·前端·javascript
小万7429 小时前
刚发布就冲上GitHub热榜!Filee支持244种格式转换,完全免费还全本机运行
前端
星光不问赶路人9 小时前
Vue 3 对象监听与快照:ref 和 reactive 的关键差异
前端·vue.js
世界一刘先生9 小时前
不引入 JSZip,自己写一个 ZIP 打包器:CRC32、中央目录与 UTF-8 文件名
前端
全栈项目管理程序猿9 小时前
ArcGIS JS 基础教程(34):体元系列 - 等值面 VoxelIsosurface
前端·javascript
代码搬运媛9 小时前
如何使用 @codemirror/view 库创建一个简单的代码编辑器
前端
huali9 小时前
草稿该存在哪:per-session 是怎么成为共识的
前端·产品经理·产品
IPIPD9 小时前
Proxifier规则为什么没有生效?从连接日志定位规则命中与DNS路径
前端
baiyunfan9 小时前
微信小程序做 PDA 扫码出入库:库存并发控制与 4 个坑
前端