Hea*_*ers 26 jvm gradle android-studio
在 Android Studio 同步我的 gradle 项目后,我在事件日志中看到以下消息:
Android Studio 正在使用此 JDK 位置:
/path/to/my/project/specific/jdk
这与 Gradle 默认/path/to/android/studio/embedded/jdk
使用的位置不同: 如果在使用 Android Studio 时从命令行运行 Gradle 任务,则使用不同的位置可能会产生多个 Gradle 守护进程。设置 Android Studio 使用与 Gradle 相同的 JDK 并同步项目
我已经/path/to/my/project/specific/jdk
设置了Project Structure
-> SDK Location
-> JDK Location
->Other
我有以下内容.bash_profile
:
export JAVA_HOME=/path/to/my/project/specific/jdk
Run Code Online (Sandbox Code Playgroud)
并且STUDIO_JDK
文档说:
设置用于运行 Studio 的 JDK 的位置。当你推出Android Studio中,它会检查
STUDIO_JDK
,JDK_HOME
以及JAVA_HOME
依次环境变量。
所以我希望 Android Studio 会找到/path/to/my/project/specific/jdk
,但它不会。是否有专门针对 gradle 的特殊 JDK 设置?
Hea*_*ers 18
更新
因为macOS
只发生在 macOS Mojave 上10.14.6
。在 macOS Catalina 上10.15.3
,您只需要JAVA_HOME
在 shell 中进行设置。
这个答案涉及macOS
案例。它并不意味着 Linux 或 Windows 解决方案。
TLDR
在 上macOS
,Android Studio 在.bash_profile
从Finder.app
. 您必须在launchctl
以下位置定义环境变量:
launchctl setenv JAVA_HOME /path/to/my/project/specific/jdk
Run Code Online (Sandbox Code Playgroud)
或者,如果您想使用系统定义的 JDK:
launchctl setenv JAVA_HOME `/usr/libexec/java_home`
Run Code Online (Sandbox Code Playgroud)
但这仅适用于您机器的当前会话。接下来,您必须创建一个~/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>
Run Code Online (Sandbox Code Playgroud)
或者,如果您想使用系统定义的 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>
Run Code Online (Sandbox Code Playgroud)
The plist will activate after system reboot. You can also use launchctl load ~/Library/LaunchAgents/environment.plist
to launch it immediately.
Deeper explanation
I suspected that Android Studio didn't actually see my JAVA_HOME
environment variable, so I inspected the Android Studio process' environment variables:
$ 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
Run Code Online (Sandbox Code Playgroud)
which meant Android Studio didn't see my JAVA_HOME
, as I suspected.
Next, I tried launching Android Studio from the terminal:
$ echo $JAVA_HOME
/path/to/my/project/specific/jdk
$ open /Applications/Android Studio-3.5-Preview.app
$ ps eww <Android Studio Pid>
Run Code Online (Sandbox Code Playgroud)
and this dumped a lot more output, including my JAVA_HOME
. Thus, I needed to figure out how to set an environment variable for apps launched from Finder.app
, which I describe above.
小智 11
更新到 Android Studio 3.6 版后,我开始收到此警告。我收到以下警告:
Android Studio and Gradle are using different locations for the JDK.
Android Studio: C:\Program Files\Android\Android Studio\jre
Gradle: C:\Program Files\AdoptOpenJDK\jdk-11.0.3.7-hotspot
Using different JDK locations might cause Gradle to spawn multiple daemons
when executing tasks for Android Studio and other external processes.
Run Code Online (Sandbox Code Playgroud)
为了修复这个警告,我将项目 JDK 位置更改为 Gradle JDK 位置。
从下拉列表中选择 Gradle 的 JDK 位置。就我而言,它位于以下位置:
Gradle: C:\Program Files\AdoptOpenJDK\jdk-11.0.3.7-hotspot
Run Code Online (Sandbox Code Playgroud)单击应用和确定。
归档时间: |
|
查看次数: |
37936 次 |
最近记录: |