更新
仅适用于 macOS
,且发生在 macOS Mojave 10.14.6
。在 macOS Catalina 10.15.3
上,你只需要在 shell 中设置 JAVA_HOME
。
本答案仅处理 macOS
情况,不涉及 Linux 或 Windows 解决方案。
简述
在 macOS
上,当从 Finder.app
启动 Android Studio 时,它不会接收到在 .bash_profile
中定义的环境变量。你必须在 launchctl
中定义你的环境变量:
launchctl setenv JAVA_HOME /path/to/my/project/specific/jdk
或者,如果您想使用系统定义的JDK:
launchctl setenv JAVA_HOME `/usr/libexec/java_home`
但这仅适用于您机器的当前会话。接下来,您需要创建一个
~/Library/LaunchAgents/environment.plist
文件:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>my.startup</string>
<key>ProgramArguments</key>
<array>
<string>sh</string>
<string>-c</string>
<string>
launchctl setenv JAVA_HOME /path/to/my/project/specific/jdk
</string>
</array>
<key>RunAtLoad</key>
<true/>
</dict>
</plist>
或者,如果您想使用系统定义的JDK:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>my.startup</string>
<key>ProgramArguments</key>
<array>
<string>sh</string>
<string>-c</string>
<string>
launchctl setenv JAVA_HOME `/usr/libexec/java_home`
</string>
</array>
<key>RunAtLoad</key>
<true/>
</dict>
</plist>
系统重启后,plist文件将被激活。您也可以使用launchctl load ~/Library/LaunchAgents/environment.plist
立即启动它。
更深入的解释
我怀疑Android Studio实际上没有看到我的JAVA_HOME
环境变量,所以我检查了Android Studio进程的环境变量:
$ ps ax | grep Android
13466 ?? S 177:42.60 /path/to/my/Android/sdk/emulator/qemu/darwin-x86_64/qemu-system-x86_64 -netdelay none -netspeed full -no-snapstorage -avd Pixel_2_API_28
13478 ?? S 0:04.88 /path/to/my/Android/sdk/emulator/emulator64-crash-service -pipe com.google.AndroidEmulator.CrashService.13466 -ppid 13466 -data-dir /tmp/foo/9ecb0c71-921f-44b8-8b77-f34ac80bb8fa
40253 ?? R 6:21.34 /Applications/Android Studio-3.5-Preview.app/Contents/MacOS/studio
40342 ?? S 0:00.07 /Applications/Android Studio-3.5-Preview.app/Contents/bin/fsnotifier
40610 s001 S+ 0:00.00 grep Android
$ ps eww 40253
/Applications/Android Studio-3.5-Preview.app/Contents/MacOS/studio TMPDIR=/var/folders/j4/htlnmbf97vlcdszj7_x8g0vh4k3_fp/T/ __CF_USER_TEXT_ENCODING=0x921A9D6:0x0:0x0 SHELL=/bin/false HOME=/Users/myusername Apple_PubSub_Socket_Render=/private/tmp/com.apple.launchd.zL6tIxvlEo/Render SSH_AUTH_SOCK=/private/tmp/com.apple.launchd.sKG8qr6MNW/Listeners PATH=/usr/bin:/bin:/usr/sbin:/sbin LOGNAME=myusername XPC_SERVICE_NAME=com.google.android.studio-EAP.21860 USER=myusername XPC_FLAGS=0x1
这意味着Android Studio没有识别到我的JAVA_HOME
,正如我所怀疑的那样。
接下来,我尝试从终端启动Android Studio:
$ echo $JAVA_HOME
/path/to/my/project/specific/jdk
$ open /Applications/Android Studio-3.5-Preview.app
$ ps eww <Android Studio Pid>
这导致输出了更多的内容,包括我的
JAVA_HOME
。因此,我需要找出如何为从
Finder.app
启动的应用程序设置环境变量,我在上面进行了描述。
WRONG
是什么意思?请更具体和建设性地说明。 - Heath Borders