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

时间:2014-01-16 22:02:10

标签: android android-studio

我确实有一个多模块项目,其中一个库项目位于不同的根路径中。如图所示,你可以想象这样的事情:

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

/libraries_home/libraries
   |--libA
       |--build.gradle

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

但如果我尝试使用环境变量,它就会停止使用Android Studio。上面示例的settings.gradle如下所示:

include ':app'
include ':libA'

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

如果我使用控制台中的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在某种程度上无法访问使用〜/ .bashrc设置的环境变量

你们中的某些人是否知道如何让AS了解我的环境?

7 个答案:

答案 0 :(得分:13)

Android Studio 确实读取环境变量。你可以通过从那些env的shell启动Android Studio来证明它。指定变量而不是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_home添加到原始命令之前。您必须使用自己的用户名替换username

<强>更新

如果您有任何疑问,请先发表评论,而不是直接编辑答案。特别是,我不知道如何联系编辑。

答案 1 :(得分:7)

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

答案 2 :(得分:6)

尽管斯科特巴塔的回答是正确的,但我意识到有一种方法可以解决我的问题,如果其他人有同样的要求,我不想分享这个问题。

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

我原来问题的解决方案现在看起来像这样:

$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并没有抱怨这个。但我刚开始使用这种结构,可能会在以后遇到问题。我喜欢这个是AS中更扁平的表示,更像是我习惯用Eclipse。

用户指南中还介绍了使用gradle.properties文件设置系统属性。我也尝试了这个,但我确实遇到了使用环境变量的AS相同的问题。

答案 3 :(得分:5)

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

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

> /Applications/Android\ Studio.app/Contents/MacOS/studio 

此处的其他答案提供除使用环境变量之外的解决方案。对于我的情况,我正在使用一个我没写过的库,需要使用环境变量,而我宁愿不编辑它们的代码,以便以后更容易更新。

编辑:而且,我有一个停靠图标以这种方式启动Android Studio:https://superuser.com/a/260712/501568解释了如何。

答案 4 :(得分:3)

通过以下步骤对我有用:

  1. 在Windows中设置变量
  2. 重新启动
  3. 在gradle build中获取它:System.env.MYVARIABLE

答案 5 :(得分:0)

您可以通过附加:

来设置环境变量
-DYOUR_VARIABLE=variable_value
通过选择帮助 - &gt;您可以打开{p>到~/Library/Preferences/AndroidStudioX.X/studio.vmoptions从Android Studio菜单中编辑自定义VM选项...

然后您就可以使用它:

System.env.YOUR_VARIABLE
build.gradle settings.gradle 中的

答案 6 :(得分:0)

MAC 操作系统更新

我确认我有在 Mac OS Catalina 上运行的环境变量

您只需要在您使用的 shell 中设置它。我正在使用 zsh,并试图设置 ~/.bash_profile,所以它不起作用。

示例:

ZSH简介

enter image description here