Gradle,Android和ANDROID_HOME SDK位置


152

编辑:(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文件,它可以工作。但这使代码更难跨构建服务器的系统移植,因此问题仍然悬而未决。

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


1
尝试在项目根目录下的local.properties文件中指定SDK的路径。该文件应具有以下内容:sdk.dir = <sdk_install_dir>
Gabriele Mariotti

1
嗨@GabrieleMariotti感谢您的建议。但是我已经做到了,并且有效。但是,这使得代码更难跨构建服务器的系统移植。我想知道是否有人知道为什么ANDROID_HOME不起作用以及如何使它起作用?我将此信息添加到了问题中。
Budius

我建议您在这个G +社区中发帖。plus.google.com/communities/114791428968349268860这是一个正式的Google社区。通常,Google小组会迅速回答。
加布里埃里奥·马里奥蒂

是的,我会尝试的。谢谢!
Budius

2
@Budius我在错误消息中也遇到了类似的情况。解决方案是将settings.gradle文件添加到项目文件夹。
JJD

Answers:


94

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

/ my_current_project /

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

sdk.dir = / my_current_path_to / sdk

在控制台中,我需要做

设置ANDROID_HOME = / my_current_path_to / sdk

希望这可以帮助。


8
它不能解决问题,因为local.properties文件应为“ Local”而不是版本控制。(与Budius相同的问题:我希望笔记本电脑中的local.properties文件在开发期间创建内部版本,但由于sdks路径不同,因此我不想在内部构建计算机中使用此文件!)
Tobliug

7
至少在Windows上,它在反斜杠字符串sdk.dir = D:\\ Soft \\ adt-bundle-windows-x86_64-20140702 \\ sdk后
起作用

@Tobulug:您可以控制版本控制下的文件,而无需添加或取消选择本地文件
sivi

使用导出而不是设置修复它。
AugustoL

1
设置错误,我使用export。但是通过这种方式,如果导出此变量,则不需要Projekt-Folder中的local.properties文件。为了保持在每次重新启动此设置,出口commad添加到您的〜/ .bashrc
suther

52

在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/


4
仅供参考,此解决方案适用于osx。
马修·道门

4
是的,我为Elcapitan工作。launchctl setenv ANDROID_HOME ~/Library/Android/sdk
agmcleod 2015年

2
或者,您可以简单地代理环境变量,例如launchctl setenv ANDROID_HOME $ANDROID_HOMElaunchctl setenv JAVA_HOME $JAVA_HOME
Vagif

仅供参考,对于OSX,此修补程序还有助于通过gradle构建命令行,当您在使用除bash以外的其他shell(例如zsh)时发生相同的错误时。只需运行此命令并重新启动您的终端窗口即可。
中断

30

就我而言settings.gradle,不见了。

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

屏幕截图参考:

在此处输入图片说明

希望这可以节省您的时间。


或者有人没有将您的子模块添加到settings.gradle文件中。我的团队有一个初级,在添加一个子模块后没有这样做。不知道如何配置他们的IntellIJ,但这浪费了我很多时间。
Stevers

25

这对我有用:

$ export ANDROID_HOME=/path_to_sdk/
$ ./gradlew

1
您还可以将上述“导出”行添加到您的〜/ .bashrc或〜/ .bash_profile中,以使其即使在重新启动后也永久存在。
Suther

19

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

还需要设置环境变量ANDROID_SDK和ANDROID_HOME。

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

请注意,您不应将local.properties签入版本控制中,而是将其添加到了gitignore中,以免干扰在您正确确定为潜在问题的系统之间移植代码。


2
定义ANDROID_SDK对我没有任何帮助。
Heath Borders

您正在使用哪个版本的Gradle和Android插件,并且您具有local.properties文件?
ZoFreX 2014年

2
添加sdk.dir=/path/to/android/sdk为我工作。我正在使用IntelliJ 13.0.2创建的项目中运行gradle
Heath Borders

看起来这是一个IntelliJ错误。youtrack.jetbrains.com/issue/IDEA-119361
Heath Borders

IntelliJ或Android Studio中可能还存在一个错误,但是最初的问题是关于从命令行使用Gradle的,它似乎有自己的错误(可能与您看到的问题无关)。编辑:另外,在我的系统上,IntelliJ不会从命令行继承环境变量,这可能是您的问题?
ZoFreX 2014年

16

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

$ ANDROID_HOME=<sdk location> ./gradlew

1
有点奇怪-这适用于ANDROID_HOME,但不适用于ANDROID_NDK_HOME。我必须为后者使用local.properties。
Andrew Smart

这种解决方法对我没有任何作用(在Docker容器中)。
IgorGanapolsky '16

14

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

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

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


1
我认为local.properties文件是由IDE自动生成的。为什么需要手动将此文件复制或移动到其他目录?
IgorGanapolsky '16

13

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

解决方案是导入项目,而不是从git克隆项目后仅打开它,这将迫使android studio创建特定于您的计算机的local.properties文件:

文件>>导入项目>>


12

MAC OSX:

  1. 打开终端并编辑文件:

~/.bash_profile

添加:

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

  1. 跑:

    source ~/.bash_profile

  2. 重新启动终端和Android Studio


8

如何在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

所以你很好。

并重新启动android studio!

并且,确保您有java :)

java -version

和gradle :)

gradle --version


认为您失踪了:export ANDROID_HOME
致Kra

1
我先设置ANDROID_HOME然后执行source ~/.bash_profile,这很正常(source如果您不想注销,登录或重新启动,则执行是很好的)。在您的情况下,使用export ANDROID_HOME重启或登录后,ANDROID_HOMEmac中的环境变量将消失。
Nimitack '16


4

这对我有用(Ubuntu):

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

重启。


我被这件事困扰了好几天,只有这个事情有效。谢谢你,先生。
Zygro

3

在Windows中,我设置ANDROID_HOME = E:\ android \ adt-bundle-windows-x86_64-20131030 \ sdk然后它可以正常工作。

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

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


1
我添加了它,添加到location.properties文件中,但仍然遇到相同的问题
Suneel Prakash

1
在Windows上,请确保在路径中转义反斜杠。我不得不输入类似的路径sdk.dir=C:\\Users\\username\\AppData\\Local\\Android\\Sdk
Xsasan

2

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

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


2

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


2

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


1

只要删除sdk.dir的local.preoperties文件中,并设置ANDROID_HOME环境变量。它为我工作。


IDE将自动生成local.properties文件。它应该被篡改吗?
IgorGanapolsky '16

1

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

PS:别忘了使用'export'关键字将ANDROID_HOME设置为全局。


export这个答案是需要注意的重要。我已经ANDROID_HOME定义了,甚至将其添加到PATH,但如果不这样export ANDROID_HOME,gradle将无法找到它。
租赁

1

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

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


1

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


0

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

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


0

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



0

解决方案:

1添加“ sdk.dir = path_of_sdk”

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

$ ANDROID_HOME = path_of_sdk ./gradlw


0

您说过版本化local.properties会为您带来问题。我一起编写了一个脚本,该脚本使用android命令行工具在生产中涉及的所有计算机之间刷新local.properties文件。在Android的更新项目命令,除了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)。


0

我已经面临着同样的问题,在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

也许会有所帮助。


0

我遇到了同样的错误,但就我而言,我正在克隆一个项目,克隆的项目是使用当时未安装的Android API 22构建的(我安装了API 24和25).. so我必须下载API 22的SDK工具


0

对于Windows:

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

0

在我的系统上(从19.04升级两个版本后,Ubuntu 20.04)的症状好像gradle(从APT存储库安装了4.4.1)忽略了ANDROID_HOME环境变量,而sdk.dirlocal.properties我创建的那个值中获取了值。

原因似乎是所提到的java命令openjdk version "11.0.7"。安装完openjdk-8-jdk软件包并将update-alternatives --config java默认java版本设置为8("1.8.0_252")后,gradle按预期开始工作。


-3

这个问题是从2013年11月开始的(当时Android Studio仍处于“开发人员预览”模式),

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

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


那是不对的。我目前正在尝试解决同一问题,但还是没有运气,尝试了此处发布的许多可能解决方案。
AndroidDev
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.