Android Studio正在使用此JDK位置...与Gradle默认使用的位置不同

时间:2019-05-17 20:13:11

标签: android-studio gradle jvm

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 Project Structure -> SDK Location -> JDK Location -> Other

我的.bash_profile中有以下内容:

export JAVA_HOME=/path/to/my/project/specific/jdk

STUDIO_JDK documentation说:

  

设置用于运行Studio的JDK的位置。当您启动时   Android Studio,它检查STUDIO_JDKJDK_HOMEJAVA_HOME   环境变量的顺序。

因此,我希望Android Studio可以找到/path/to/my/project/specific/jdk,但找不到。是否有专门用于gradle的特殊JDK设置?

6 个答案:

答案 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位置。

  1. 在项目窗口中右键单击应用程序
  2. 打开模块设置
  3. SDK位置
  4. JDK位置
  5. 从下拉列表中选择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)

enter image description here我也正在使用Microsoft的Windows系统。要解决此问题,只需执行以下简单步骤。

  1. 设置您的 JAVA_HOME 环境变量以指向已安装的jdk。在我的情况下是 C:\ Program Files \ Java \ jdk-9.0.1

  2. 然后,在Android Studio中,从“偶数日志”中单击从文件系统中选择 JDK ,或转到项目结构,然后到sdk位置。

  3. 按照上图所示设置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。 Setting the JDK used by gradle in Android Studio project settings