ChatGPT解决这个技术问题 Extra ChatGPT

Gradle、Android 和 ANDROID_HOME SDK 位置

编辑:(2016 年 8 月)

这个问题来自 2013 年 11 月(当时 Android Studio 仍处于开发者预览模式),

目前(AS v2.2,2016 年 8 月)在安装期间,AS 要求选择 SDK 文件夹(或默认安装),它会自动应用于您打开的任何项目。

这意味着任何可能的解决方法或修复都无关紧要,因为该问题不再可重现。

原始问题:

我们有这个项目,其中有几个模块已经配置并使用包装器在另一台开发人员 PC 上正确执行。我将完整的 git 子模块克隆到我的机器中。

下面是我的命令行的直接打印:

$ ./gradlew

FAILURE: Build failed with an exception.

* Where:
Build file '/home/budius/project_name/ActionBar-PullToRefresh/library/build.gradle' line: 1

* What went wrong:
A problem occurred evaluating project ':ActionBar-PullToRefresh:library'.
> SDK location not found. Define location with sdk.dir in the local.properties file or with an ANDROID_HOME environment variable.

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.

BUILD FAILED

Total time: 6.378 secs

$ echo $ANDROID_HOME
/home/budius/Applications/android-studio/sdk
$ 

所以,你可以看到 ANDROID_HOME 在那里。他们还想要什么?这里有什么问题。

在 Ubuntu 13.04 上运行

编辑:

我已经在项目根目录上创建了一个带有 sdk.dir=<path> 的 local.properties 文件,它可以工作。但这使得代码更难跨系统 n 构建服务器移植,所以问题仍然存在。

任何人都知道为什么 ANDROID_HOME 不工作以及如何使其工作?

尝试在项目根目录下的 local.properties 文件中指定 SDK 的路径。该文件应该有这个:sdk.dir=
嗨@GabrieleMariotti 感谢您的建议。但我已经这样做了,而且效果很好。但这使得代码更难跨系统和构建服务器移植。我想知道是否有人知道为什么 ANDROID_HOME 不工作以及如何使它工作?我在问题中添加了这一点信息。
我建议你在这个 G+ 社区发帖。 plus.google.com/communities/114791428968349268860 这是一个官方的 Google 社区。通常谷歌团队会很快回答。
是的,我会试试看。谢谢!
@Budius 我有类似的错误消息。解决方案是将 settings.gradle 文件添加到项目文件夹中。

b
bsma

我已经解决了这个问题。这对我有用:

/my_current_project/

我创建了一个名为 local.properties 的文件并将其放入

sdk.dir=/my_current_path_to/sdk

在控制台中我需要做

设置 ANDROID_HOME=/my_current_path_to/sdk

希望这可以帮助。


它不能解决问题,因为 local.properties 文件应该是“本地”而不是在版本控制下。 (与 Budius 相同的问题:我希望我的笔记本电脑中的这个 local.properties 文件在开发过程中创建构建,但我不希望在我的构建机器中使用这个文件,因为 sdks 路径不一样!)
至少在 Windows 上它在反斜杠字符串 sdk.dir=D:\\Soft\\adt-bundle-windows-x86_64-20140702\\sdk 后工作
@Tobulug:您可以控制哪些文件受版本控制,而不是添加或取消选择本地文件
使用 export 而不是 set 修复它。
设置错误,我使用导出。但是这样一来,如果你导出这个变量,你就不需要你的 Projekt-Folder 中的 local.properties 文件了。要在每次重新启动时保留此设置,请将 export-commad 添加到您的 ~/.bashrc
F
Fran Marzoa

在 OSX 上,IntelliJ 不会获取您在 .bash_profile 或 .bash_rc 等中设置的环境变量...

试试这个,替换你自己的 sdk 位置的值:

launchctl setenv ANDROID_HOME /usr/local/opt/android-sdk

然后重新启动 IntelliJ,Bob 就是你的叔叔了。

以下是对问题的引用,更笼统地说:https://emmanuelbernard.com/blog/2012/05/09/setting-global-variables-intellij/


仅供参考,此解决方案适用于 osx。
是的,在elcapitan上为我工作。 launchctl setenv ANDROID_HOME ~/Library/Android/sdk
或者您可以简单地代理您的环境变量,例如 launchctl setenv ANDROID_HOME $ANDROID_HOMElaunchctl setenv JAVA_HOME $JAVA_HOME
仅供参考,对于 OSX,此修复还有助于通过 gradle 构建命令行,当您使用 bash 以外的 shell(例如 zsh)时发生相同的错误。只需运行此命令并重新启动终端窗口。
H
Hiren Patel

在我的情况下,settings.gradle 丢失了。

保存文件并将其放在项目的顶层文件夹中,即使您也可以从另一个项目中复制。

截图参考:

https://i.stack.imgur.com/h4C2a.png

希望这会节省您的时间。


或者有人没有将您的子模块添加到 settings.gradle 文件中。我团队中有一个大三学生在添加子模块后没有这样做。不确定他们的 IntellIJ 是如何配置的,但这浪费了我大量的时间。
g
giopromolla

这对我有用:

$ export ANDROID_HOME=/path_to_sdk/
$ ./gradlew

您也可以将上面的“导出”行添加到您的 ~/.bashrc 或 ~/.bash_profile 中,即使在重新启动后也可以使其永久化。
Z
ZoFreX

Android Gradle 插件仍处于测试阶段,这可能只是一个错误。对我来说,设置 ANDROID_HOME 有效,但我们可能使用不同的版本(请使用最新版本再试一次,让我知道它是否有效)。

设置环境变量 ANDROID_SDK 和 ANDROID_HOME 也是值得的。

我已经在某些机器上看到了这个问题,所以我们确实在这些情况下创建了 local.properties - 我还注意到最新版本的 Android Studio 将为您创建这个文件并填写 sdk.dir 属性。

请注意,您不应该将 local.properties 检查到版本控制中,我们已将其添加到我们的 gitignore 中,这样它就不会干扰跨系统移植您正确识别为潜在问题的代码。


定义 ANDROID_SDK 对我没有任何帮助。
您使用的是哪个版本的 Gradle 和 Android 插件,是否有 local.properties 文件?
添加 sdk.dir=/path/to/android/sdk 对我有用。我正在运行 gradle 作为使用 IntelliJ 13.0.2 创建的项目的一部分
看起来这是一个 IntelliJ 错误。 youtrack.jetbrains.com/issue/IDEA-119361
IntelliJ 或 Android Studio 中也可能存在错误,但最初的问题是关于从命令行使用 Gradle,这似乎有自己的错误(可能与您看到的问题相关,也可能不相关)。编辑:另外,在我的系统上,IntelliJ 不会从命令行继承环境变量,这可能是你的问题?
A
Andrew Marshall

无论出于何种原因,gradle 脚本都没有从环境中获取 ANDROID_HOME 的值。尝试在命令行上明确指定它

$ ANDROID_HOME=<sdk location> ./gradlew

有些东西很奇怪——这适用于 ANDROID_HOME,但不适用于 ANDROID_NDK_HOME。我不得不为后者使用 local.properties。
这种解决方法对我没有任何作用(在 docker 容器中)。
这对我有用,但有谁知道为什么 gradle 不能从环境变量中获取值
j
joecizac

我遇到了同样的问题,尽管我的主模块中有 local.properties 文件,并且在系统级别设置了 ANDROID_HOME 环境变量。

解决此问题的方法是,我将主项目模块中的 local.properties 文件复制到整个项目的根目录(即主模块的父目录)

尝试在模块和根目录中复制 local.properties 文件。应该管用。


我认为 local.properties 文件是由 IDE 自动生成的。为什么需要手动复制或移动这个文件到其他目录?
B
Bulwinkel

打开克隆的 git 存储库时遇到了同样的问题。 local.properties 文件会自动添加到 .gitignore 文件中,因为它特定于每台机器的构建环境,因此不是 repo 的一部分。

解决方案是导入项目,而不是在从 git 克隆项目后打开它,这会强制 android studio 创建特定于您机器的 local.properties 文件:

文件 >> 导入项目 >>


J
Javier Armendariz

MAC OSX:

打开终端并编辑文件:

~/.bash_profile

添加:

export ANDROID_HOME=~/Library/Android/sdk export PATH=${PATH}:${ANDROID_HOME}/tools export PATH=${PATH}:${ANDROID_HOME}/platform-tools

运行:source ~/.bash_profile 重启终端和Android Studio


N
Nimitack

如何在 MAC OSX 上执行此操作:

1) 打开终端,然后编辑:vi ~/.bash_profile 如果那里没有文件,只需添加它。

2)添加(更改为您的用户名并添加):

#Java var home: JAVA_HOME="/usr/libexec/java_home" ANDROID_HOME="/Users/<YOUR USER NAME>/Library/Android/sdk"

3) 运行 source ~/.bash_profile

4) 运行 echo $JAVA_HOME; echo $ANDROID_HOME;

5)如果您的输出是:

/usr/libexec/java_home /Users/<YOUR USER NAME>/Library/Android/sdk

所以你很好。

并重新启动安卓工作室!

而且,确保你有 java :)

java -version

和毕业:)

gradle --version


认为你失踪了:export ANDROID_HOME
我设置 ANDROID_HOME 然后执行 source ~/.bash_profile,这是永久的(如果您不想注销并重新启动,则执行 source 很好)。在您的情况下,使用 export ANDROID_HOME,在重新启动或登录后,mac 中的环境变量 ANDROID_HOME 将消失。
S
Santiago Medina Chaverra

将 local.properties 复制到根文件夹并再次运行。


e
everyman

这对我有用(Ubuntu):

ANDROID_HOME=/path/to/android-sdk 添加到 /etc/environment

重启。


我被这件事难住了好几天,只有这件事有效。谢谢你,先生。
r
richard

在 Windows 中,我设置 ANDROID_HOME=E:\android\adt-bundle-windows-x86_64-20131030\sdk 然后它按预期工作。

在 Linux 中,您需要设置 sdk.dir。

该脚本使用两个不同的变量。


我添加了它,添加到 location.properties 文件中,但仍然面临同样的问题
在 Windows 上,确保对路径中的反斜杠进行转义。我必须输入像 sdk.dir=C:\\Users\\username\\AppData\\Local\\Android\\Sdk 这样的路径
G
Guillermo Gutiérrez

我有同样的问题,似乎示例代码找不到android环境,而是尝试修复我只是从settings.gradle中删除示例代码,然后安装正常。

之后只需在eclipse中导入项目就可以了:)


N
Naren

在 Linux 中,尝试从终端运行 studio.sh 并在此终端中设置 ANDROID_HOME。这对我有用。


M
Megoc

如果您使用的是 windows Plantform,请尝试以管理员身份运行 Android Studio


P
PraveenMax

只需删除 local.preoperties 文件中的 sdk.dir 并设置 ANDROID_HOME 环境变量。它对我有用。


local.properties 文件由 IDE 自动生成。它应该被篡改吗?
J
Jindowin

在 shell 中导出 ANDROID_HOME=/xxx/xxx/,然后在 gradle 文件中由 System.env.ANDROID_HOME 使用。

PS:不要忘记'export'关键字使ANDROID_HOME全局化。


此答案中的 export 需要注意。我定义了 ANDROID_HOME,甚至将其添加到 PATH,但如果您不 export ANDROID_HOME,gradle 将无法找到它。
k
kinath_ru

您的 local.properties 文件可能丢失。如果是这样,在 /local.properties 中添加一个名为“local.properties”的文件,并提供如下 sdk 位置。

sdk.dir=C:\Users\\AppData\Local\Android\Sdk


P
Pravin Abhale

我已将 ANDROID_HOME = [PATH_OF_MY_ANDROID_SDK] 设置为我的环境变量。该解决方案对我有用。


J
Joe3112

我刚刚通过将 ANDROID_HOME 添加为系统范围的变量解决了完全相同的问题。在 Ubuntu 中,它应该在 /etc/profile 或 /etc/profile.d/ 的 shell 脚本文件中

然后注销并再次登录,现在 Gradle 应该可以识别 ANDROID_HOME 变量。


H
Horatio

我遇到了类似的问题。不知何故,我的项目中没有构建文件夹。通过将此文件夹从另一个项目复制到我遇到的问题,这解决了这个问题。


T
TheBetterJORT

安装 Build-Tools 23.0.1 而不是 23.0.2 为我解决了这个问题。


R
RoFF

解决方案:

1 添加“sdk.dir=path_of_sdk”

2 使用 evn 变量执行 gradlew,如下所示:

$ANDROID_HOME=path_of_sdk ./gradlw


M
Mali Remorker

您说版本控制 local.properties 会给您带来问题。我已经编写了一个脚本,该脚本使用 android 命令行工具在生产中涉及的机器上刷新 local.properties 文件。 android update project 命令,除了 local.properties 会产生很多不需要的垃圾(至少对我来说),这就是脚本末尾所有这些 rm 命令的原因。

#!/bin/bash
scname="$0"
echo "${scname}: updating local properties..."
ln -fs src/main/AndroidManifest.xml
android update project -t 24 -p "$(pwd)"
echo "${scname}: ...done"
echo "${scname}: removing android update project junk ..."
rm -v project.properties
rm -v build.xml
rm -v proguard-project.txt
rm -v AndroidManifest.xml
echo "${scname}: ...done"

这个脚本是我们在任何我们编码的新机器上运行的第一件事。它必须在根项目目录中运行。当然,android studio 可能有一种 GUI 方式来处理这个问题,但我不知道,因为我使用的是不同的编辑器。我也不能声称该解决方案是通用的,但它“对我有用”(tm)。


L
Lukas

我在 Ubuntu 上遇到了同样的问题(添加了 local.propertiesANDROID_HOME),但构建失败仍然存在。所以解决方法是添加以下行

export ANDROID_HOME=/home/<user>/Android/Sdk export PATH=$PATH:/home/<user>/Android/Sdk/tools

直接到 studio.sh 脚本(在 /usr/local/android-studio/bin 内)

也许会有所帮助。


D
Didi Pepple

我遇到了同样的错误,但在我的情况下,我正在克隆一个项目,克隆的项目是用我当时没有安装的 Android API 22 构建的(我安装了 API 24 和 25)........所以我必须下载 API 22 的 sdk 工具


J
J. Jerez

对于 Windows:

将 ANDROID_HOME 添加到环境变量: ANDROID_HOME = C:/Users/YOUR_USERNAME/AppData/Local/Android/sdk 将 %ANDROID_HOME%\platform-tools 添加到 PATH。


R
Ruslan

在我的系统上(从 19.04 升级两个版本后的 Ubuntu 20.04),症状就像 gradle(从 APT 存储库安装的 4.4.1)忽略了 ANDROID_HOME 环境变量,同时从 local.properties 获取 sdk.dir 值如果我创造了一个。

原因似乎是 java 命令引用了 openjdk version "11.0.7"。在我安装 openjdk-8-jdk 软件包并执行 update-alternatives --config java 以使默认 java 成为版本 8 ("1.8.0_252") 后,gradle 开始按预期工作。


t
tir38

我的问题是该目录不存在。 env vars 设置正确,但底层目录不存在。第一次打开 AS 并让它创建目录后,一切正常。

echo $ANDROID_HOME
/Users/x/Library/Android/sdk

$ echo $ANDROID_SDK_ROOT
/Users/x/Library/Android/sdk

$ cd $ANDROID_HOME
-bash: cd: /Users/x/Library/Android/sdk: No such file or directory