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

tcbh2hod  于 2022-12-26  发布在  Android
关注(0)|答案(7)|浏览(335)

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并同步项目
我在Project Structure-〉SDK Location-〉JDK Location-〉Other x1c 0d1x中设置了/path/to/my/project/specific/jdk
我的.bash_profile中包含以下内容:

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

STUDIO_JDK文档中写道:
设置运行Studio所使用的JDK的位置。启动Android Studio时,它将按顺序检查STUDIO_JDKJDK_HOMEJAVA_HOME环境变量。
因此,我希望Android Studio能够找到/path/to/my/project/specific/jdk,但它没有找到。是否有专门针对gradle的特殊JDK设置?

aiazj4mn

aiazj4mn1#

    • 更新**

对于macOS,仅在macOS Mojave 10.14.6上发生。在macOS Catalina 10.15.3上,您只需在shell中设置JAVA_HOME
这个答案只涉及macOS的情况,并不意味着Linux或Windows解决方案。

    • 顶级域名注册商**

macOS上,从Finder.app启动时,Android Studio不会接收在.bash_profile中定义的环境变量。您必须define your environment variables in 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 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启动的应用程序设置环境变量,我上面已经描述过了。

3phpmpom

3phpmpom2#

我开始得到这个警告后,更新到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.右键单击项目窗口中的应用程序
1.打开模块设置

  1. SDK位置
  2. JDK位置
    1.从下拉列表中选择您的Gradle的JDK位置。在我的示例中,该位置如下:
Gradle: C:\Program Files\AdoptOpenJDK\jdk-11.0.3.7-hotspot

单击应用和确定。

3pmvbmvn

3pmvbmvn3#

x1c 0d1x我也使用微软的windows系统。要解决这个问题,只需按照以下简单的步骤操作。

1.设置您的JAVA_HOME环境变量以指向您安装的jdk。在我的示例中是C:\Program Files\Java\jdk-9.0.1
1.然后,在Android studio中,点击选择JDK从文件系统从您的事件日志或转到项目结构,然后SDK位置.
1.设置jdk位置,如上图所示,然后单击应用。

pgpifvop

pgpifvop4#

我正在运行Windows,升级到AS 3.6.1时出现同样的错误。
除了Android项目之外,我还在同一台机器上构建Java项目,这两个项目使用不同版本的Java。因此,将AS / Gradle Package 器指向我的JAVA_HOME不是一个选项。
要解决这个问题,我需要环境变量JAVA_HOME指向我的Java项目,并需要JAVA_HOME for AS / Gradle指向AS附带的JRE版本。
有一个简单的解决方案。虽然有点混乱,但它很有效。要做到这一点,您需要能够看到隐藏文件。然后按如下所示对Gradle Package 器批处理文件进行mod:

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和Is Gradle Package 器默认指向正确的位置。

ct3nt3jp

ct3nt3jp5#

我使用的是Windows系统。我转到控制面板,打开环境变量并复制JAVA_HOME键的位置。我将此目录放入Android Studio中的“项目结构/SDK位置”窗口。保存更改后,Gradle能够同步,没有任何问题。“SDK位置”窗口的位置在本文的问题中。

62lalag4

62lalag46#

在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,请遵循公认的答案。否则,我所做的可能会更快。
下面介绍如何选择将嵌入式JDK用于Gradle。至少现在Android Studio中的措辞更加明确,即此设置仅适用于Gradle使用的JDK。

6ss1mwsb

6ss1mwsb7#

在我的例子中,这个问题是在我创建一个新项目时出现的。为了解决这个问题,我选择了下面显示的JDK。

相关问题