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
添加到原始命令之前。您必须用自己的用户名替换用户名
更新
如果您有任何问题,请留下评论,而不是直接编辑答案。以下步骤对我有效:
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中指定的变量值。您确定这是正确的路径吗?选择时打开的文件是什么