LoginSignup
40

More than 5 years have passed since last update.

AndroidStudioに環境変数を渡す

Last updated at Posted at 2014-12-21

Retrolambdaの設定とかで環境変数から参照する例が沢山あるけど、具体的なやりかたについてです。Macでの話。

問題となる設定

build.gradleのこんなやつです。

retrolambda {
    jdk System.getenv("JAVA8_HOME")
    oldJdk System.getenv("JAVA7_HOME")
    javaVersion JavaVersion.VERSION_1_7
}

android-best-practiceにも載ってますね。
環境変数のJAVA7_HOMEとJAVA8_HOMEを参照しています。
しかしこのまま貼り付けてAndroid Studioを起動しビルドしようとすると

Error:Execution failed for task ':lib:patchAndroidJar'.
> Retrolambda: null/jre/lib/rt.jar does not exist, make sure that the environment variable JAVA_HOME or JAVA8_HOME, or the gradle property retrolambda.jdk points to a valid version of java8.

というエラーに遭遇します。
JAVA8_HOMEなどの環境変数が読めずにnullと解釈し、結果期待するpathが取得できてないために起こるエラーっぽいですね。
定義を見るとJAVA7_HOMEも必要そうです。

retrolambda.jdkにpathを直接指定しても行けそうですが、環境依存になるのもんなんだかなあ、ということで環境変数を参照する解決方法を探しました。

ターミナルから起動

JAVA7_HOMEとJAVA8_HOMEが環境変数として定義された状態で、

open -a Android\ Studio

でとりあえずは渡せますが、Alfred等を普段から使っているとこれもだるい。
ということで他の方法を検討します。

lanunchctlを使う

Android Studioに限らずMacのアプリケーションは環境変数を指定できます。

定義

僕の場合はjenvを使っているのでこんな感じです。

launchctl setenv JAVA_HOME /Users/tmiyamon/.jenv/versions/1.7
launchctl setenv JAVA7_HOME /Users/tmiyamon/.jenv/versions/1.7
launchctl setenv JAVA8_HOME /Users/tmiyamon/.jenv/versions/1.8

確認

launchctl getenv JAVA_HOME
launchctl getenv JAVA7_HOME
launchctl getenv JAVA8_HOME

これでAlfredから起動した時もちゃんと参照してくれます。
tmuxを使っているときは一度tmuxからexitしてから定義してやる必要があります。

削除

削除したいときは

launchctl unsetenv JAVA_HOME
launchctl unsetenv JAVA7_HOME
launchctl unsetenv JAVA8_HOME

まとめ

launchctl setenv JAVA7_HOME path
launchctl setenv JAVA8_HOME path

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
40