且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

从Android Studio gradle构建访问环境变量

更新时间:2022-10-16 08:43:17

在此找到答案:
Mac中的环境变量OS X



本质上,您还需要通过 launchd 使用的环境变量$ c> launchctl - 这种环境变量将可用于从MacOS UI启动的任何内容



所以我修改了我的 〜/ .bash_profile 如下:

  export MY_CUSTOM_VAR ='Hello World'
launchctl setenv MY_CUSTOM_VAR $ MY_CUSTOM_VAR


In my Android Gradle build I need to get access to environment variables I set from .bash.profile. It works fine when I build from command line - Gradle script can see all the variables.

However, when I try to run my build from Android Studio - I don't have my environment variables anymore.

Here is a rough picture of what I'm facing:

1) Set custom environment variable via ~/.bash.profile:

export MY_CUSTOM_VAR='Hello World'

2) In build.gradle create task which prints this environment variable:

task printVar << {
    println System.getenv("MY_CUSTOM_VAR")
}

3) execute printVar from command line. Output is correct - env variable is set:

output: Hello World

4) execute printVar from Android Studio. Environment variable is not set. Output is empty

Common sense tells me that by doing export MY_CUSTOM_VAR='Hello World' I just make this variable available to shell process (and its subprocesses). And it would probable work if I launch my Android Studio from command line (so it would inherit my environment). But since I launch Android Studio from dock (i'm on Mac by the way) - it has its own environment which doesn't have any idea about my ~/.bash.profile.

Is there any way I can populate custom environment variables to Android Studio?

Found an answer here: Environment variables in Mac OS X

Essentially, you need to also set environment variables used by launchd via launchctl - this way environment variable will be available for anything launched from MacOS UI

So I modified my ~/.bash_profile as follows:

export MY_CUSTOM_VAR='Hello World'
launchctl setenv MY_CUSTOM_VAR $MY_CUSTOM_VAR