Android Studio использует это местоположение JDK ... которое отличается от того, которое использует Gradle по умолчанию - PullRequest
0 голосов
/ 17 мая 2019

После того, как Android Studio синхронизирует мой проект gradle, я вижу следующее сообщение в журнале событий:

Android Studio использует это расположение JDK: /path/to/my/project/specific/jdk, которое отличается от того, которое Gradle использует по умолчанию: /path/to/android/studio/embedded/jdk Использование разных местоположений может порождать несколько демонов Gradle, если задачи Gradle запускаются из командной строки при использовании Android Studio.Установите в Android Studio тот же JDK, что и в Gradle, и синхронизируйте проект

У меня установлено /path/to/my/project/specific/jdk в Project Structure -> SDK Location -> JDK Location -> Other image SDK Location -> JDK Location -> Other">

В моем .bash_profile есть следующее:

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

и STUDIO_JDK документация говорит:

Устанавливает расположение JDK для запуска Studio.Когда вы запускаете Android Studio, он проверяет переменные окружения STUDIO_JDK, JDK_HOME и JAVA_HOME в указанном порядке.

Так что я ожидаю, что Android Studio найдет /path/to/my/project/specific/jdk, ноэто не так.Есть ли специальная настройка JDK специально для gradle?

1 Ответ

1 голос
/ 17 мая 2019

TLDR

Android Studio не получает переменные среды, определенные в .bash_profile, при запуске из Finder.app.Вы должны определить переменные окружения в 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>

Плист активируется после перезагрузки системы.Вы также можете использовать launchctl load ~/Library/LaunchAgents/environment.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, как я и подозревал.

Далее,Я попытался запустить 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, которые я описал выше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...