根本原因是CMD/PowerShell与Android Studio Terminal继承环境变量的时机不同:CMD需重启窗口,AS Terminal需重启IDE;GRADLE_HOME必须指向Gradle根目录,PATH须含%GRADLE_HOME%\bin,且GRADLE_USER_HOME仅影响缓存路径,不决定命令可用性。

环境变量配对了,但没被进程读到——这是绝大多数“不生效”的根本原因。
为什么 gradle -v 在 CMD 里报错,但在 Android Studio Terminal 里却能跑?
这不是 Gradle 配错了,而是两个终端继承的环境变量来源完全不同:
- CMD/PowerShell 启动时读取的是系统当前的环境变量快照;改完变量后必须关掉旧窗口、新开一个才能生效
- Android Studio 的 Terminal 是 IDE 的子进程,它只继承 IDE 启动那一刻加载的环境变量;改完系统变量后,不重启 Android Studio,Terminal 永远不会更新
- 如果你在 IDE 运行中修改了
GRADLE_HOME或PATH,哪怕刷新 Terminal、重开 Shell、甚至执行refreshenv,都无效
GRADLE_HOME 和 PATH 必须严格配对
常见错误不是没设 GRADLE_HOME,而是路径指向错位或拼写不一致:
-
GRADLE_HOME必须指向解压后的根目录,比如D:\gradle\gradle-8.10,不能是D:\gradle\gradle-8.10\bin或D:\gradle -
PATH中必须包含%GRADLE_HOME%\bin(Windows)或$GRADLE_HOME/bin(macOS/Linux),且不能漏掉\bin - 如果用的是用户变量而非系统变量,CMD 可能读不到——尤其在以管理员身份运行时,建议统一设为系统变量
- 路径中含空格(如
Program Files)无需引号,但若手动写死路径进PATH,务必确认反斜杠转义正确(%GRADLE_HOME%\bin不要写成%GRADLE_HOME%/bin)
Android Studio 明明设置了 GRADLE_USER_HOME,为什么命令行还是走默认路径?
因为 GRADLE_USER_HOME 和 GRADLE_HOME 完全是两回事,名字像但作用不同:
-
GRADLE_HOME:告诉系统哪里能找到gradle可执行文件(即命令行能调用的入口) -
GRADLE_USER_HOME:只控制.gradle缓存目录位置(下载的依赖、构建产物等),不影响命令是否可用 - AS 内部构建会优先读取 IDE 设置里的 “Gradle user home”,而不是系统环境变量;但命令行
gradlew或gradle会严格遵循GRADLE_USER_HOME - 所以你看到 AS 构建缓存到了 D 盘,而
gradle build还在往 C:\Users\xxx\.gradle 写——这说明命令行根本没读到GRADLE_USER_HOME,大概率是没设对变量作用域或没重启终端
最常被忽略的一点:Windows 下环境变量名区分大小写吗?不区分。但 GRADLE_HOME 和 gradle_home 在某些老旧脚本里可能被当作不同变量处理;统一用大写、全角符号零容忍、路径末尾不加斜杠,能避开一堆隐性故障。


















