【Android Studio】解决升级 macOS High Sierra 后 Android Studio 同步项目时 gradle 构建脚本中无法执行 git 命令的问题...

1. 起因

升级 maxOS High Sierra 后在 Android Stuido 中同步项目失败,报错原因是 gradle 构建脚本中 git 相关的 shell 命令执行结果始终返回空,导致无法继续构建,如下:

def static getGitVersion() {
    return 'git rev-parse --short HEAD'.execute().text.trim()
}

2. 怀疑人生

刚升级完新系统,就出问题,心情相当不好,但没办法还是得解决啊

首先试着在终端中执行编译,结果时能正常运行,这就奇怪了

然后怀疑是不是写法有什么问题导致不兼容新的 macOS 版本,Google 找到一篇文章 https://stackoverflow.com/questions/25556005/git-rev-list-not-working-in-android-studio-build-gradle 说是默认工作目录是在 module 下,要将工作目录切到根目录下才行,于是改成了

def static getGitVersion() {
    'git rev-parse --short HEAD'.execute([], project.rootDir).text.trim()
}

结果依然不行,并且这样改了之后导致终端下也不行了

接下来就想看看当前工作目录到底在哪里,是不是真如上述问题说的在 module 目录下,代码如下:

def static getGitVersion() {
    String files = 'ls'.execute([], project.rootDir).text.trim()
    new throw IllegalStateException("Files: " + files)
}

由于 Android Studio 同步操作的异常只能在 Gradle Console 窗口中看,并且通过 println 输出的信息并不会出现在这个窗口里,所以只能通过异常的方式在 Gradle Console 窗口中看我们想要的信息

通过分析 ls 命令返回的结果发现工作目录就是在项目的根目录下,并不是像问题中说的那样在 module 下,再看问题的提问时间是在 3 年前了,可能那时的确是在 module 下

3. 柳暗花明

就在一筹莫展之际蓦然间发现并不是所有的命令都不行,ls 命令就可以执行,而 git 命令不行。ls 命令是系统自带的,git 命令(自己重新安装的最新版本)不是系统自带的,需要额外的环境变量配置,会不会是在 Android Studio 中执行同步操作时的 shell 的环境变量有问题

赶紧试了试 java 命令,发现同样无法执行,这时候有了新的侦查方向了。

Google 搜索关键字 'android studio macos gradle shell not found git' 找到一篇文章 http://depressiverobot.com/2016/02/05/intellij-path.html,文章中提到在 maxOS 上 GUI 程序的环境变量和终端是不一样的,GUI 程序的环境变量只有 /usr/bin:/bin:/usr/sbin:/sbin,而通过 Spotlight 启动的程序就只有 GUI 程序的环境变量

而我的操作方式就是通过 Spotlight 启动的 Android Studio ,而我的 git 却在 usr/local/bin 下,至此真相已经浮出水面了

4. 解决问题

文章中提供了几种解决办法,一种是从终端启动 Android Studio,如下:

open -a "Android Studio"

另一种是执行如下命令让 GUI 程序和终端的环境变量保持一致

sudo launchctl config user path $PATH

执行完需要重启电脑

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值