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 定位。

相关推荐
BD_Marathon1 小时前
消息对象中字段的说明
java·前端·python
八荒启·交互动画1 小时前
Web特效025—用 Canvas 2D 做Web特效的定义与边界:这支画笔能做到哪一步
前端·webgl·网页特效·八荒启-交互动画·八荒启
Ai-_Man1 小时前
您您这可以把Dola的多个会话比如说。左侧的多个会话一次性导出吗?不是单条会话里面的多次会对话。用AI导出鸭,答案是可以的
开发语言·前端·人工智能·小程序
码上有光1 小时前
Linux进程通信——共享内存、消息队列和信号量
android·linux·运维·共享内存·通信
excel2 小时前
Nuxt 中使用 useHead 优化 SEO 与 GEO
前端
IT_陈寒3 小时前
SpringBoot启动慢得像蜗牛?原来是这个配置在捣鬼
前端·人工智能·后端
计算机魔术师3 小时前
Muse Spark跑赢Gemini,但真正的底牌是这种设计
前端
PYB33 小时前
【Web·JS·基础】函数的使用和展运算符...objs
前端·javascript
指针向南3 小时前
Chrome读不了HEIC怎么办:原生解码和WASM两条路
前端·图像处理·人工智能·chrome·计算机视觉·wasm