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
-> Other
私は.bash_profile
:
export Java_HOME=/path/to/my/project/specific/jdk
そしてその - STUDIO_JDK
ドキュメント 言う:
Studioを実行するJDKの場所を設定します。 Android Studioを起動すると、
STUDIO_JDK
、JDK_HOME
、Java_HOME
環境変数をこの順序で。
したがって、Android Studioは/path/to/my/project/specific/jdk
、しかしそうではありません。 Gradle専用の特別なJDK設定はありますか?
更新
これは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
から起動したアプリの環境変数を設定する方法を理解する必要がありました。
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の場所に変更しました。
ドロップダウンから、GradleのJDKの場所を選択します。私の場合、それは場所の下にあります:
Gradle: C:\Program Files\AdoptOpenJDK\jdk-11.0.3.7-hotspot
[適用]をクリックして[OK]をクリックします。
私はWindowsシステムで作業しています。コントロールパネルに移動して環境変数を開き、Java_HOMEキーの場所をコピーしました。このディレクトリをAndroid StudioのProject Structure/SDK Locationウィンドウに配置しました。変更を保存した後、Gradleは問題なく同期できました。SDKLocationsウィンドウの場所は、この郵便受け。
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ラッパーが正しい場所にあります。