MacOS Apple Silicon升级Android SDK后Flutter仍用旧Java无法编译
解决Flutter识别旧版JDK导致的Android许可证签署失败问题
核心原因
Android SDK 35要求使用JDK 17+,但Flutter默认优先读取Android Studio内置的JDK(11.0.10),与你通过Homebrew安装的OpenJDK 22路径冲突,导致sdkmanager无法正常运行,进而无法完成许可证签署。
具体解决步骤
1. 确认Homebrew安装的JDK路径
执行以下命令获取OpenJDK 22的完整安装路径:
/usr/libexec/java_home -v 22
输出示例:/Library/Java/JavaVirtualMachines/openjdk-22.jdk/Contents/Home
2. 强制Flutter使用指定JDK
通过配置环境变量让Flutter优先读取你安装的JDK,分两种方式:
临时生效(仅当前终端会话)
执行以下命令替换为你实际的JDK路径:
export JAVA_HOME=/Library/Java/JavaVirtualMachines/openjdk-22.jdk/Contents/Home export PATH=$JAVA_HOME/bin:$PATH
随后运行flutter doctor检查JDK版本是否更新为22.0.2。
永久生效(所有终端会话)
编辑你的shell配置文件(zsh用户为~/.zshrc,bash用户为~/.bash_profile):
open ~/.zshrc
在文件末尾添加以下内容(自动获取JDK 22路径):
export JAVA_HOME=$(/usr/libexec/java_home -v 22) export PATH=$JAVA_HOME/bin:$PATH
保存后执行命令使配置生效:
source ~/.zshrc
3. 验证配置并签署许可证
重新运行:
flutter doctor
确认JDK版本显示为22.0.2后,执行许可证签署命令:
flutter doctor --android-licenses
按提示输入y完成所有许可证的签署操作。
4. 额外排查(若问题仍存在)
- 打开Android Studio,进入
File > Project Structure > SDK Location,确认JDK location选择的是你安装的OpenJDK 22路径,而非Android Studio内置JDK。 - 重启Android Studio和终端,确保环境变量完全生效。
内容的提问来源于stack exchange,提问作者shababhsiddique
相关产品推荐
相关产品推荐

