【问题标题】:Gradle, Android and the ANDROID_HOME SDK locationGradle、Android 和 ANDROID_HOME SDK 位置
【发布时间】:2013-11-16 15:13:48
【问题描述】:

编辑:(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 文件添加到项目文件夹中。

标签: android gradle android-build android-gradle-plugin


【解决方案1】:

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

/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:可以控制哪些文件受版本控制,不添加或取消选择本地文件
  • 使用导出而不是设置修复它。
  • set 错误,我使用 export。但是这样一来,如果你导出这个变量,你就不需要你的 Projekt-Folder 中的 local.properties 文件了。要在每次重新启动时保留此设置,请将 export-commad 添加到您的 ~/.bashrc
【解决方案2】:

在 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)时发生相同的错误。只需运行此命令并重新启动终端窗口。
【解决方案3】:

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

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

截图参考:

希望这会节省您的时间。

【讨论】:

  • 或者有人没有将你的子模块添加到 settings.gradle 文件中。我的团队中有一个大三学生在添加子模块后没有这样做。不确定他们的 IntellIJ 是如何配置的,但这浪费了我不少时间。
【解决方案4】:

这对我有用:

$ export ANDROID_HOME=/path_to_sdk/
$ ./gradlew

【讨论】:

  • 您也可以将上面的“导出”行添加到您的 ~/.bashrc 或 ~/.bash_profile 中,即使在重新启动后也可以使其永久化。
【解决方案5】:

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 中也可能存在 bug,但最初的问题是关于从命令行使用 Gradle,这似乎有自己的 bug(可能与你看到的问题)。编辑:另外,在我的系统上,IntelliJ 不会从命令行继承环境变量,这可能是你的问题?
【解决方案6】:

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

$ ANDROID_HOME=<sdk location> ./gradlew

【讨论】:

  • 有点奇怪 - 这适用于 ANDROID_HOME,但不适用于 ANDROID_NDK_HOME。我不得不为后者使用 local.properties。
  • 这个解决方法对我没有任何作用(在 docker 容器中)。
  • 这对我有用,但有谁知道为什么 gradle 无法从环境变量中获取值
【解决方案7】:

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

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

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

【讨论】:

  • 我认为 local.properties 文件是由 IDE 自动生成的。为什么需要手动复制或移动这个文件到其他目录?
【解决方案8】:

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

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

文件 >> 导入项目 >>

【讨论】:

    【解决方案9】:

    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

    【讨论】:

      【解决方案10】:

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

      【讨论】:

      • 觉得你不见了:export ANDROID_HOME
      • 我设置了ANDROID_HOME,然后执行source ~/.bash_profile,这是永久的(如果您不想注销并重新启动,请执行source 很好)。在你的情况下,使用export ANDROID_HOME,重启或登录后,mac中的环境变量ANDROID_HOME将消失。
      【解决方案11】:

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

      【讨论】:

        【解决方案12】:

        这对我有用(Ubuntu):

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

        重启。

        【讨论】:

        • 我被这个东西难住了好几天,只有这个东西有效。谢谢先生。
        【解决方案13】:

        在 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 之类的路径
        【解决方案14】:

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

        之后只需在 Eclipse 中导入项目即可:)

        【讨论】:

          【解决方案15】:

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

          【讨论】:

            【解决方案16】:

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

            【讨论】:

              【解决方案17】:

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

              【讨论】:

              • local.properties 文件由 IDE 自动生成。它应该被篡改吗?
              【解决方案18】:

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

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

              【讨论】:

              • 这个答案中的export 需要注意。我定义了ANDROID_HOME,甚至将其添加到PATH,但如果你不export ANDROID_HOME,gradle 将无法找到它。
              【解决方案19】:

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

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

              【讨论】:

                【解决方案20】:

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

                【讨论】:

                  【解决方案21】:

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

                  的 shell 脚本文件中

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

                  【讨论】:

                    【解决方案22】:

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

                    【讨论】:

                      【解决方案23】:

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

                      【讨论】:

                        【解决方案24】:

                        解决方案:

                        1 添加“sdk.dir=path_of_sdk”

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

                        $ANDROID_HOME=path_of_sdk ./gradlw

                        【讨论】:

                          【解决方案25】:

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

                          #!/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)。

                          【讨论】:

                            【解决方案26】:

                            我在 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 内)

                            也许会有所帮助。

                            【讨论】:

                              【解决方案27】:

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

                              【讨论】:

                                【解决方案28】:

                                对于 Windows:

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

                                【讨论】:

                                  【解决方案29】:

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

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

                                  【讨论】:

                                    【解决方案30】:

                                    我的问题是该目录不存在。 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
                                    

                                    【讨论】:

                                      猜你喜欢
                                      • 2013-10-16
                                      • 2018-11-27
                                      • 2015-08-15
                                      • 1970-01-01
                                      • 2014-09-30
                                      • 1970-01-01
                                      • 1970-01-01
                                      • 1970-01-01
                                      • 2018-04-06
                                      相关资源
                                      最近更新 更多