Android Studio同步gradle项目后,我在事件日志中看到以下消息:
Android Studio正在使用以下JDK位置:
/path/to/my/project/specific/jdk
这与Gradle默认使用的不同:/path/to/android/studio/embedded/jdk
使用不同的位置可能会产生多个Gradle守护进程,如果 使用Android Studio时,可从命令行运行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
设置用于运行Studio的JDK的位置。当您启动时 Android Studio,它检查
STUDIO_JDK
,JDK_HOME
和JAVA_HOME
环境变量的顺序。
因此,我希望Android Studio可以找到/path/to/my/project/specific/jdk
,但找不到。是否有专门用于gradle的特殊JDK设置?
答案 0 :(得分:10)
在更新到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.
为解决此警告,我将项目JDK位置更改为Gradle JDK位置。
从下拉列表中选择Gradle的JDK位置。就我而言,它位于以下位置:
Gradle: C:\Program Files\AdoptOpenJDK\jdk-11.0.3.7-hotspot
单击“应用”,然后单击“确定”。
答案 1 :(得分:3)
我正在Windows系统上工作。我转到控制面板并打开环境变量,然后复制JAVA_HOME项的位置。我将此目录放入Android Studio的“项目结构/ SDK位置”窗口中。保存更改后,Gradle可以没有问题地进行同步。 SDK位置窗口的位置在此问题中。
答案 2 :(得分:2)
我正在运行Windows,升级到AS 3.6.1时遇到相同的错误。
除了Android项目之外,我还在同一台机器上构建Java项目,这两个机器都使用不同版本的Java。因此,将AS / Gradle包装器指向我的JAVA_HOME并不是一种选择。
要解决此问题,我需要环境变量JAVA_HOME指向我的Java项目,并需要AS / Gradle的JAVA_HOME指向AS附带的JRE版本。
有一个简单的解决方案。有点混乱,但是可以用。为此,您将需要能够看到隐藏文件。然后按以下方式修改Gradle包装器批处理文件:
C:/Users/your_user_name/.gradle/wrapper/dists/the_latest_gradle_version(mine is 5.6.4)/bxirm19lnfz6nurbatndyydux/gradle-5.6.4/bin/gradle.bat
转到功能:
:findJavaFromJavaHome
set JAVA_HOME=%JAVA_HOME:"=%
set JAVA_EXE=%JAVA_HOME%/bin/java.exe
并更改为:
:findJavaFromJavaHome
set JAVA_HOME=%C:/Program Files/Android/AndroidStudio/jre:"=%
set JAVA_EXE=%JAVA_HOME%/bin/java.exe
这不是一个永久性的解决方案,因为它可能会被新版本的Gradle覆盖,但是它现在可以正常工作,并且希望可以使某人(希望是Google)指向AS,并且可以将Gradle包装器定位到正确的位置默认。
答案 3 :(得分:1)
设置您的 JAVA_HOME 环境变量以指向已安装的jdk。在我的情况下是 C:\ Program Files \ Java \ jdk-9.0.1
然后,在Android Studio中,从“偶数日志”中单击从文件系统中选择 JDK ,或转到项目结构,然后到sdk位置。
按照上图所示设置jdk位置,然后单击Apply。
答案 4 :(得分:0)
TLDR
从.bash_profile
启动时,Android Studio不会收到Finder.app
中定义的环境变量。您必须define your environment variables in launchctl
:
launchctl setenv JAVA_HOME /path/to/my/project/specific/jdk
但这仅适用于计算机的当前会话。接下来,您必须创建一个~/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>
plist将在系统重启后激活。您还可以使用launchctl load ~/Library/LaunchAgents/environment.plist
立即启动它。
更深入的解释
我怀疑Android Studio实际上没有看到我的JAVA_HOME
环境变量,所以我检查了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
这意味着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
启动的应用程序设置环境变量,如上所述。
答案 5 :(得分:0)
在 MacOS Catalina 10.15.7 上使用 Android Studio 4.1,从 finder 启动 Android Studio 仍然无法获取 JAVA_HOME(尽管已接受答案的更新说明了这一点)。因此,Android Studio 使用的是其嵌入式 JDK,而 gradle 使用的是 JAVA_HOME 中指定的 JDK。
就我而言,我并不特别关心版本(它们已经足够接近了),所以我只是将 gradle 设置为使用嵌入式 JDK(Android Studio 默认使用)。如果您确实关心并且不希望使用嵌入式 JDK,请遵循已接受的答案。否则,我所做的可能会更快。
这里是如何选择使用嵌入式JDK for gradle。至少现在 Android Studio 中的措辞更清晰,该设置仅适用于 Gradle 使用的 JDK。