settings.gradle中的环境变量不适用于Android Studio

settings.gradle中的环境变量不适用于Android Studio,android,android-studio,Android,Android Studio,我有一个多模块项目,其中一个库项目位于不同的根路径中。如图所示,您可以想象如下: /projects_home/projects/app_root |--app/ | |--build.gradle |--build.gradle |--settings.gradle /libraries_home/libraries |--libA |--build.gradle include ':app' include ':libA' project

我有一个多模块项目,其中一个库项目位于不同的根路径中。如图所示,您可以想象如下:

/projects_home/projects/app_root
   |--app/
   |   |--build.gradle
   |--build.gradle
   |--settings.gradle

/libraries_home/libraries
   |--libA
       |--build.gradle
include ':app'
include ':libA'

project(':libA').projectDir = new File("$System.env.LIB_ROOT", '/libraries/libA')
$USER_HOME/.gradle/gradle.properties:

LIB_ROOT=/libraries_home
在我的settings.gradle文件中,我可以使用projectDir属性设置库项目的绝对路径。这在控制台和Android Studio中都可以正常工作

但是,如果我尝试使用环境变量,它将停止与Android Studio一起工作。上面示例中的settings.gradle如下所示:

/projects_home/projects/app_root
   |--app/
   |   |--build.gradle
   |--build.gradle
   |--settings.gradle

/libraries_home/libraries
   |--libA
       |--build.gradle
include ':app'
include ':libA'

project(':libA').projectDir = new File("$System.env.LIB_ROOT", '/libraries/libA')
$USER_HOME/.gradle/gradle.properties:

LIB_ROOT=/libraries_home
如果我从控制台使用graddle包装器构建,它仍然可以工作。但AS停止工作时出现以下错误消息:

Gradle 'app' project refresh failed:
Configuration with name 'default' not found.
如果我取消设置环境变量,则构建控制台将失败,并显示相同的消息:

* What went wrong:
A problem occurred configuring project ':app'.
> Configuration with name 'default' not found.
因此,我猜AS不知何故无法访问使用my~/.bashrc设置的环境变量


你们中有人知道我如何让AS意识到我的环境吗?

Android Studio不读取环境变量,所以这种方法不起作用。此外,在settings.gradle中使用
projectDir
方案可能会导致问题。Android Studio有一个限制,即其所有模块都必须位于项目根目录下。如果您有多个项目中使用的库,并且它们不能放在单个项目根目录下,最好的建议是让它们将JAR或AAR发布到本地Maven存储库中,单个项目可以获取这些存储库。

尽管Scott Barta的回答是正确的,我意识到有一种方法可以解决我的问题,如果其他人有同样的要求,我不想分享

我现在使用gradle.properties文件来定义和使用gradle属性,而不是系统属性。此功能的文档可能会被罚款

我最初问题的解决方案如下所示:

/projects_home/projects/app_root
   |--app/
   |   |--build.gradle
   |--build.gradle
   |--settings.gradle

/libraries_home/libraries
   |--libA
       |--build.gradle
include ':app'
include ':libA'

project(':libA').projectDir = new File("$System.env.LIB_ROOT", '/libraries/libA')
$USER_HOME/.gradle/gradle.properties:

LIB_ROOT=/libraries_home
必须修改settings.gradle文件以使用gradle属性而不是系统属性:

include ':app'
include ':libA'

project(':libA').projectDir = new File(LIB_ROOT, '/libraries/libA')
这对我来说很好,无头的,还有

关于我使用的模块不是放在一个项目根目录下这一事实,还有一些话要说。到目前为止,看起来AS并没有对此抱怨。但我刚刚开始使用这种结构,可能以后会遇到问题。我喜欢的是AS中更扁平的表示,这更像是我在Eclipse中使用的


《用户指南》中还介绍了如何使用gradle.properties文件设置系统属性。我也试过了,但在使用环境变量时遇到了同样的问题。

Android Studio是否读取环境变量。你可以通过从那些env所在的shell中启动androidstudio来证明这一点。指定变量,而不是从X-window仪表板指定变量

没有这些变量的原因是您使用的X-window环境没有读取包含这些变量的
$HOME/.bashrc
。这是有意义的,因为
bashrc
用于Bash而不是X

假设您使用的是GNOME或Unity,要使用指定的环境变量启动Android Studio,只需修改Android Studio的
.desktop
文件(例如
~/.local/share/applications/Android Studio.desktop
):

找到这一行:

Exec="/home/username/tools/android/android-studio/bin/studio.sh" %f
将其更改为:

Exec=env LIB_ROOT=/libraries_home "/home/username/tools/android/android-studio/bin/studio.sh" %f
注:

此修改只是将
env LIB_ROOT=/libraries\u home
添加到原始命令之前。您必须用自己的用户名替换
用户名

更新


如果您有任何问题,请留下评论,而不是直接编辑答案。

以下步骤对我有效:

  • 在Windows中设置变量
  • 重新启动
  • 在gradle构建中实现它:
    System.env.MYVARIABLE

  • 在Mac上,Android Studio显然不读取Gradle中使用的环境变量。我相信这是在这里的答案混乱的原因-也许它在Windows上

    为了让Android Studio读取环境变量,我从命令行运行应用程序:

    > /Applications/Android\ Studio.app/Contents/MacOS/studio 
    
    这里的其他答案提供了使用环境变量以外的解决方案。在我的情况下,我使用的库不是我编写的,它需要使用环境变量,我不想编辑它们的代码,这样以后更容易更新


    编辑:并且,我有一个dock图标来启动Android Studio,如下所示:说明如何设置环境变量。

    您可以通过附加以下内容来设置环境变量:

    -DYOUR_VARIABLE=variable_value
    
    ~/Library/Preferences/AndroidStudioX.X/studio.vmoptions
    ,您可以通过选择“帮助”->“编辑自定义虚拟机选项”打开它。。。从Android Studio菜单

    然后你可以像这样使用它:

    System.env.YOUR_VARIABLE
    
    在build.gradle或settings.gradle.

    MAC OS更新中 我确认我在Mac OS Catalina上使用了环境变量

    您只需要在您使用的shell中设置它。我使用的是zsh,试图设置~/.bash_配置文件,所以它不起作用

    例如:

    ZSH剖面


    非常感谢您提供的信息。由于我正在使用git,我将首先尝试使用git子模块将所有模块置于项目根目录下。这对我来说是可行的:在Windows reboot$System.env.YourVariable中设置变量请检查我的答案:。“AS不读取env vars”语句不正确。那么,如何让android studio读取environMet变量呢?在$USER_HOME/.gradle/gradle.properties中输入一个值就是我所需要的,以替换原本是环境变量的内容。谢谢非常有用。谢谢。这就是我说的原因。我正在尝试使用~/.Androidstudio2.2/studio64.vmoptions(由Androidstudio2.2创建)中的vmoptions。但是,当我尝试生成/同步项目的build.gradle时,生成无法获取vmoptions中指定的变量值。您确定这是正确的路径吗?选择时打开的文件是什么