Windows11下Android Studio无法识别hg路径的解决求助
问题根源:Windows系统中Mercurial的可执行文件是hg.bat,但Android Studio/Gradle默认调用不带后缀的hg,导致找不到命令。以下是几种彻底解决的方法:
方法1:创建无后缀的符号链接指向hg.bat
- 找到Mercurial的安装目录(默认路径一般是
C:\Program Files\Mercurial) - 右键以管理员身份打开命令提示符
- 执行命令:
mklink "C:\Program Files\Mercurial\hg" "C:\Program Files\Mercurial\hg.bat" - 确保该目录已添加到系统
PATH环境变量中(安装Mercurial时一般会自动添加,若没有需手动添加) - 重启Android Studio,此时调用
hg会自动映射到hg.bat
方法2:全局修改Gradle任务中的命令映射
如果不想修改系统文件,可以在项目根目录的build.gradle中添加全局配置,自动将所有hg命令替换为hg.bat:
allprojects { tasks.withType(Exec) { if (commandLine.contains("hg")) { commandLine = commandLine.collect { it == "hg" ? "hg.bat" : it } } } }
同步Gradle后,所有项目中的hg调用都会被自动替换,无需逐个修改配置文件
方法3:检查并修复系统PATH环境变量
- 右键「此电脑」→「属性」→「高级系统设置」→「环境变量」
- 在系统变量的
PATH中确认是否存在Mercurial的安装目录(如C:\Program Files\Mercurial) - 若不存在,点击「新建」添加该路径,然后点击「确定」保存
- 重启Android Studio和命令提示符,确保环境变量生效
附上报错信息:
Caused by: java.io.IOException: Cannot run program "hg": CreateProcess error=2, The system cannot find the file specified
at org.gradle.internal.classpath.Instrumented.exec(Instrumented.java:250)
at Config.execReadStandardOutOrThrow(ConfigPlugin.kt:204)
at Config.execReadStandardOutOrThrow$default(ConfigPlugin.kt:203)
at Config.getVcsHash(ConfigPlugin.kt:184)
at Config$getVcsHash.call(Unknown Source)
at build_4y7vgpadg1wghwfvlmkpx6hcz$_run_closure1$_closure16.doCall$original(D:\RESEARCH\mozilla-source\mozilla-unified\mobile\android\fenix\app\build.gradle:125)
at build_4y7vgpadg1wghwfvlmkpx6hcz$_run_closure1$_closure16.doCall(D:\RESEARCH\mozilla-source\mozilla-unified\mobile\android\fenix\app\build.gradle)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at org.gradle.util.internal.ClosureBackedAction.execute(ClosureBackedAction.java:73)
at org.gradle.util.internal.ConfigureUtil.configureTarget(ConfigureUtil.java:149)
at org.gradle.util.internal.ConfigureUtil.configure(ConfigureUtil.java:106)
at org.gradle.util.internal.ConfigureUtil$WrappedConfigureAction.execute(ConfigureUtil.java:167)
at org.gradle.api.internal.AbstractNamedDomainObjectContainer.create(AbstractNamedDomainObjectContainer.java:80)
at org.gradle.api.internal.AbstractNamedDomainObjectContainer.create(AbstractNamedDomainObjectContainer.java:71)
at org.gradle.api.internal.NamedDomainObjectContainerConfigureDelegate._configure(NamedDomainObjectContainerConfigureDelegate.java:39)
at org.gradle.internal.metaobject.ConfigureDelegate.invokeMethod(ConfigureDelegate.java:72)
at build_4y7vgpadg1wghwfvlmkpx6hcz$_run_closure1$_closure17.doCall$original(D:\RESEARCH\mozilla-source\mozilla-unified\mobile\android\fenix\app\build.gradle:144)
内容的提问来源于stack exchange,提问作者Tony

