web-dev-qa-db-ja.com

Android StudioはこのJDKロケーションを使用しています...これはGradleがデフォルトで使用するものとは異なります

Android Studioがgradleプロジェクトを同期した後、イベントログに次のメッセージが表示されます。

Android Studioは次のJDKロケーションを使用しています:/path/to/my/project/specific/jdkこれは、Gradleがデフォルトで使用するものとは異なります:/path/to/Android/studio/embedded/jdk Android Studio。Set Android Studio to use the same JDK to as the same J Gradle and syncプロジェクト

私が持っています /path/to/my/project/specific/jdk 始まる Project Structure-> SDK Location-> JDK Location-> OtherProject Structure -> SDK Location -> JDK Location -> Other

私は.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設定はありますか?

16
Heath Borders

更新

これはmacOS Mojave 10.14.6でのみ発生します。 macOS Catalina 10.15.3では、シェルでJava_HOMEを設定するだけで済みます。

[〜#〜] tldr [〜#〜]

Android Studioは、.bash_profileから起動した場合、Finder.appで定義された環境変数を受け取りません。 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プロセスの環境変数 を検査しました。

$ 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から起動したアプリの環境変数を設定する方法を理解する必要がありました。

7
Heath Borders

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
    

[適用]をクリックして[OK]をクリックします。

5
user3930098

私はWindowsシステムで作業しています。コントロールパネルに移動して環境変数を開き、Java_HOMEキーの場所をコピーしました。このディレクトリをAndroid StudioのProject Structure/SDK Locationウィンドウに配置しました。変更を保存した後、Gradleは問題なく同期できました。SDKLocationsウィンドウの場所は、この郵便受け。

2
David Hash

Windowsを実行していますが、AS 3.6.1にアップグレードするときに同じエラーが発生しました。

Androidプロジェクトだけでなく、同じマシンでJavaプロジェクトもビルドします。どちらも異なるバージョンのJavaを使用しています。そのため、AS/GradleラッパーをJava_HOMEはオプションではありません。

この問題を解決するには、環境変数Java_HOMEがmy Javaプロジェクトを指し、Java_HOME for AS/Gradleが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ラッパーが正しい場所にあります。

0
Peter Wanden