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

gt0wga4j  于 2023-10-23  发布在  Android
关注(0)|答案(9)|浏览(156)

我确实有一个多模块项目,在不同的根路径中有一个库项目。作为例证,你可以想象这样的事情:

/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 Package 器构建,它仍然可以工作。但是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意识到我的环境吗?

zqry0prt

zqry0prt1#

Android Studio读取环境变量。您可以通过从这些env.变量被指定,而不是从X窗口 Jmeter 板。
你没有这些变量的原因是你使用的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替换为您自己的用户名。

更新

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

sq1bmfud

sq1bmfud2#

在Mac上,Android Studio显然不会读取Gradle中使用的环境变量。我相信这就是这里答案混乱的原因-也许在Windows上是这样。
为了让Android Studio读取环境变量,我从命令行运行应用程序:

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

这里的其他答案提供了使用环境变量以外的解决方案。就我的情况而言,我使用的库不是我写的,需要使用环境变量,我宁愿不编辑它们的代码,这样以后更新更容易。
编辑:而且,我有一个码头图标,以这种方式启动Android Studio:

vxqlmq5t

vxqlmq5t3#

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

k4emjkb1

k4emjkb14#

尽管斯科特·巴塔的回答是正确的,但我意识到有一种方法可以解决我的问题,如果其他人有同样的要求,我就不想分享了。
我现在使用gradle.properties文件定义和使用gradle属性,而不是系统属性。此功能的文档可以在用户指南中找到
我最初问题的解决方案现在看起来像这样:

$USER_HOME/.gradle/gradle.properties:

LIB_ROOT=/libraries_home

必须修改settings.gradle文件以使用gradle属性而不是system属性:

include ':app'
include ':libA'

project(':libA').projectDir = new File(LIB_ROOT, '/libraries/libA')

这对我来说很好,无头以及与AS。
关于我正在使用的模块没有放在一个项目根下的事实,还有一些话。到目前为止,AS似乎并没有抱怨这一点。但我刚开始使用这个结构,可能以后会遇到问题。我喜欢的是AS中更扁平的表示,这更像是我习惯于在Eclipse中使用它。
用户指南中也描述了使用gradle.properties文件设置系统属性。我也尝试过这个方法,但我确实遇到了AS使用环境变量的相同问题。

up9lanfz

up9lanfz5#

它适用于我与以下步骤:
1.在Windows中设置变量
1.重新启动
1.在Gradle Build中实现它:System.env.MYVARIABLE

2jcobegt

2jcobegt6#

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

-DYOUR_VARIABLE=variable_value

~/Library/Preferences/AndroidStudioX.X/studio.vmoptions,您可以通过从Android Studio菜单中选择 * 帮助->编辑自定义VM选项. * 打开。
然后你可以像这样使用它:

System.env.YOUR_VARIABLE

build.gradlesettings.gradle 中。

syqv5f0l

syqv5f0l7#

在Android Studio Bumblebee更新后,我在苹果笔记本电脑中遇到了同样的问题。这似乎是由于Android Studio的一些权限问题而发生的。
解决方法是添加缺失标志:

chmod +x /Applications/Android\ Studio.app/Contents/bin/printenv

您可以查看this问题跟踪器了解更多详细信息。

wmvff8tz

wmvff8tz8#

在Mac OS上,Android Studio实际上在一段时间前开始读取env vars。在它没有之前。但是在导入这些变量的过程中可能会发生错误。您可以在intellij官方支持页面https://youtrack.jetbrains.com/articles/IDEA-A-19/Shell-Environment-Loading上阅读更多信息

lx0bsm1f

lx0bsm1f9#

MAC OS更新

我确认我有环境变量在Mac OS Catalina 上工作
你只需要在你使用的shell中设置它。我正在使用zsh,并试图设置~/.bash_profile,所以它不工作。
范例:
公司简介

相关问题