当前位置: 首页 > 知识库问答 >
问题:

Android Studio正在使用这个JDK位置…这与Gradle默认使用的不同

姜磊
2023-03-14

在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和sync项目相同的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设置吗?

共有1个答案

公孙宇
2023-03-14

更新

对于macOS只发生在macOS Mojave10.14.6上。在macOS Catalina10.15.3上,您只需要在Shell中设置JAVA_HOME

此答案涉及macos案例。它并不意味着Linux或Windows解决方案

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>

我怀疑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

接下来,我尝试从终端上线安卓工作室:

$ 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启动的应用程序设置一个环境变量,我在上面介绍了这一点。

 类似资料:
  • Android Studio同步我的gradle项目后,我在事件日志中看到以下消息: Android Studio正在使用这个JDK位置:,这与Gradle默认使用的不同:如果在使用Android Studio时从命令行运行Gradle任务,使用不同位置可能会产生多个Gradle守护程序。将Android Studio设置为使用与Gradle和sync项目相同的JDK 我的: 而文档中说: 设置运

  • IntelliJ Idea使用作为所有导入的Gradle项目的默认Gradle位置: 我想在默认情况下对导入的Gradle项目使用< code >指定位置: 但是,不可能选择作为默认选项。 如何强制Idea对新的导入项目使用? 联系: IDEA以及如何禁用分级包装生成 对新项目使用本地梯度分布而不是包装

  • 默认情况下,如果安装Oracle JDK,它将不会用作默认java环境。 从/usr/bin/java*到/system/Library/Frameworks/JavaVM的所有系统符号链接都会转发到/system/Library/Frameworks。framework/Versions/Current而不是CurrentJDK。 我怎么能改变这些,有什么脚本可以改变默认的java吗?

  • 我从Ronak Shah和akrun(在本文中)那里学到了如何构造正则表达式,以从数据帧(在我的示例中为alldata)中排除除这些单词之外的所有术语, ^\B WORD 1|WORD 2|WORD 3|WORD 4|WORD 5\ 但出于某些原因,我不明白为什么它给了我 “WORD2”,“WORD3”,不适用 而不是 “WORD1 WORD2 WORD5”,“WORD3”,不适用 以下是我的示例

  • 我们使用gradle构建我们的Java项目,有些基于JDK7,有些基于JDK8。我知道org.gradle.java.home属性,但在我看来它有缺陷。 如果我在'~/.gradle/gradle.properties'中配置它,这将迫使我对所有gradle项目使用相同的JDK。 对此最好的解决方案/变通办法是什么?

  • 我正在使用下面的代码裁剪一个图像。当我打印裁剪的,它的显示和空数组。谁能帮我把这剪裁做好吗