Android Studio - cmake - 如何访问环境变量?

4

这个问题是关于在Android Studio构建过程中使用cmake的。

我正在linux(ubuntu)上使用Android Studio 2.2 preview 7。 在CMakeLists.txt中,我能够使用${ANDROID_NDK}来访问Android NDK路径。

但是如何访问:

  • 任何环境变量?
  • 如果不可能,至少要访问Android SDK路径?

我已经尝试使用$ENV{name_of_the_environment_variable_here},但它总是为空,即使环境变量存在。我猜测当gradle调用cmake时会以某种方式“隐藏”环境变量。


可能是[如何在CMake(Windows)中检索用户环境变量]的重复问题(https://dev59.com/kXRB5IYBdhLWcg3wNk53)。 - usr1234567
我非常熟悉cmake,但是Android Studio封装cmake并调用它的方式非常独特。cmake和gradle之间有很多交互,事实上,我发现从gradle向cmake发送环境变量比直接从cmake获取更可靠,在这种情况下。 - Sistr
嘿,你找到解决方案了吗? - Evgeni Roitburg
除了我下面发布的那个回答(被踩了-_-)之外,没有... - Sistr
六年过去了,仍然没有答案。 - Andra
1个回答

0

我认为你不能使用$ENV,它只是一个变量的例子,因为它们是环境变量。然而,你应该能够输入env并回车,以获取你当前设置的变量列表。然后,在列表中看到的变量,你可以通过在它们前面使用命令来调用它们执行一些操作,例如:echo $VARIABLE将你的变量回显到标准输出。

我不确定$ANDROID_SDK是如何设置的,是否是安装过程的一部分等等,但通常你会在.profile.bash_profile.bashrc配置文件中设置用户环境变量。这些文件按照顺序由shell读取。系统级别的变量则设置在/etc/environment/etc/profile/etc/bash.bashrc中,但你可能不想随便更改它们(大多数发行版鼓励在/etc/profile.local中进行辅助添加,但这是另一个答案的故事)。

使用这些文件中的哪一个并不特别重要,除非你尝试的操作与它们被加载的顺序有关。通常,我会查找变量是由操作系统或其他我添加的内容设置的位置,并将它们放在附近。你可以通过输入以下命令来查找环境变量的设置位置:

% for i in .profile .bash_profile .bashrc; do grep -H PATH $HOME/$i; done

(% 是提示符,不要输入 %)

这将循环遍历 3 个文件,并显示用户是否在其中任何一个文件中设置了 $PATH

Bash 使用 export ENV 命令,而不是来自原始 sh 的 set ENV 命令,据我所知,后者只在 FreeBSD 和类似 pfSense 的衍生产品上是默认的。几乎所有其他操作系统都默认使用 Bash,除了最近转向 zsh 并且也使用 export 的 MacOS,以及使用 ksh(没有人使用 OpenBSD)的 OpenBSD。

如果您想验证正在使用哪个 shell,请键入 echo $SHELLecho $0 并按回车键,它应该会告诉您。

您可以通过在 bash 终端中键入此命令并按回车键来短暂添加环境变量:

% export ANDROID_SDK_ROOT=/home/username/AndroidSDK

明确一下,这是一个示例路径,因此最好使用您的Android SDK文件实际所在的路径。 但是,这个示例是Android Studio尝试在我最近安装它时使用的默认安装位置,因此如果您不确定它们在哪里,那么这可能是一个好地方进行检查。

为了拥有更持久的环境变量设置,请打开文本编辑器并将上面的行添加到我在第一段中提到的配置文件之一中(它们将位于您的$HOME文件夹中)。 或者,您可以从提示符中运行此命令,它将自动将其添加到您的文件中:

% echo 'export ANDROID_SDK_ROOT=/home/username/AndroidSDK' >> $HOME/.bashrc

请注意使用两个尖括号而不是一个,因为一个尖括号会用单行覆盖整个文件。

如何访问任何环境变量?

如果您不确定哪个文件夹是$HOME,请尝试输入cd $HOME并按回车键-这将带您到那里。这就是如何访问环境变量-使用带有变量调用的命令,它应该像您键入整个内容一样运作。

要访问环境变量,请键入echo $NAME_OF_VARIABLE,它应该将其回显到屏幕上。如果您想在我之前提到的三个配置文件中搜索设置环境变量的位置,则可以像我之前所做的那样使用grep,只需更改搜索字符串即可找到您要查找的内容。例如(在$HOME中):

% grep SDK_ROOT .bashrc .profile .bash_profile

或者您可以输入env来列出所有当前设置的变量,并通过将输出导入到grep命令来过滤它们:

% env | grep SDK

如果您只想列出所有的設定變數和根目錄,只需輸入env而不是將其傳送到grepgrep是一種過濾器)。
最後,我會在我的.bashrc中給您展示我的$ANDROID_SDK_ROOT$ANDROID_SDK$SDK_ROOT變量的例子- 我注意到在安裝這些工具時,它們都使用了這三個變量(這不是很有趣嗎?)。
% grep ANDROID .bashrc
   export ANDROID_SDK=$HOME/development/Android/SDK
   export ANDROID_SDK_ROOT=$HOME/development/Android/SDK
export PATH=$PATH:$ANDROID_SDK:$JAVA_HOME:$ANDROID_SDK/cmdline-tools/latest/bin:$ANDROID_SDK/build-tools/32.0.0:$ANDROID_SDK/emulator:$ANDROID_SDK/emulator/bin64:$ANDROID_SDK/tools:$ANDROID_SDK/tools/bin:$ANDROID_SDK/extras:$ANDROID_SDK/platform-tools:$HOME/development/AndroidStudio/bin
export ANDROID_STUDIO=$HOME/development/AndroidStudio

% grep SDK_ROOT .bashrc
   export SDK_ROOT=$HOME/development/Android/SDK
   export ANDROID_SDK_ROOT=$HOME/development/Android/SDK

希望这回答了一些问题,很抱歉花了这么长时间才给你回复。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接