Gradle, Android и расположение SDK ANDROID_HOME

изменить: (август 2016 г.)

Этот вопрос относится к ноябрю 2013 года (пока Android Studio все еще находилась в режиме предварительного просмотра для разработчиков),

В настоящее время (AS v2.2, август 2016 г.) во время установки AS просит выбрать папку SDK (или установить их по умолчанию), и она автоматически применяется к любому проекту, который вы открываете.

Это означает, что любой возможный обходной путь или исправление не имеют значения, поскольку проблема больше не воспроизводится.

исходный вопрос:

у нас есть этот проект с несколькими модулями, который уже настроен и правильно выполняется на другом ПК разработчика с использованием оболочки. Я клонировал полные подмодули 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

изменить:

Я уже создал файл local.properties с sdk.dir=<path> в корне проекта, и он работает. Но это затрудняет портирование кода между системами и серверами сборки, поэтому вопрос остается открытым.

Кто-нибудь знает, почему ANDROID_HOME не работает и что сделать, чтобы он заработал?


person Budius    schedule 05.11.2013    source источник
comment
Попробуйте указать путь к вашему SDK в файле local.properties в корневом каталоге вашего проекта. В файле должно быть следующее: sdk.dir=‹sdk_install_dir›   -  person Gabriele Mariotti    schedule 06.11.2013
comment
Привет @GabrieleMariotti, спасибо за предложение. Но я уже сделал это, и это работает. Но это затрудняет портирование кода между системами и сервером сборки. Я хотел бы знать, знает ли кто-нибудь, почему ANDROID_HOME не работает и что делать, чтобы он работал? Я добавил эту информацию к вопросу.   -  person Budius    schedule 06.11.2013
comment
Я предлагаю вам размещать сообщения в этом сообществе G+. plus.google.com/communities/114791428968349268860 Это официальное сообщество Google. Обычно команда Google отвечает быстро.   -  person Gabriele Mariotti    schedule 06.11.2013
comment
да, я дам им попробовать. Спасибо!   -  person Budius    schedule 06.11.2013
comment
@Budius У меня был похожий случай с сообщением об ошибке. Решение состояло в том, чтобы добавить файл settings.gradle в папку проекта.   -  person JJD    schedule 16.03.2014
comment
В своем обновлении от августа 2016 года вы говорите, что это означает, что любой возможный обходной путь или исправление не имеют значения, поскольку проблема больше не воспроизводится. Это совсем не так. Это правда, что запуск Android Studio сначала решит проблему, потому что он создает local.properties, а после этого gradlew работает нормально. Но это бесполезно для тех, кто проверяет проект из VCS и хотел бы просто запустить gradlew, даже не запуская IDE. Нет необходимости даже устанавливать IDE.   -  person Don Hatch    schedule 16.01.2017
comment
@DonHatch и IDE действительно не нужны. Вы можете вручную создать local.properties, и он будет работать. Просто на 99% это делается автоматически IDE.   -  person Budius    schedule 16.01.2017


Ответы (30)


Я решил проблему. Это работает для меня:

In

/мой_текущий_проект/

Я создал файл с именем local.properties и поместил внутрь

sdk.dir=/my_current_path_to/sdk

В консоли мне нужно сделать

установить ANDROID_HOME =/my_current_path_to/sdk

Надеюсь это поможет.

person u53r    schedule 17.07.2014
comment
Это не устраняет проблему, потому что файлы local.properties должны быть локальными, а не версиями. (Та же проблема, что и у Budius: я хочу, чтобы этот файл local.properties на моем ноутбуке создавал сборку во время разработки, но мне не нужен этот файл на моем компьютере для сборки, потому что путь sdks не тот же!) - person Tobliug; 03.02.2015
comment
По крайней мере, в Windows это работало после обратной косой черты sdk.dir=D:\\Soft\\adt-bundle-windows-x86_64-20140702\\sdk - person Cheburek; 08.07.2015
comment
@Tobulug: вы можете контролировать, какие файлы находятся под контролем версий, а не добавлять или отменять выбор локальных файлов. - person sivi; 04.03.2016
comment
Использование экспорта вместо установки исправить это. - person AugustoL; 18.07.2016
comment
set был неправильным, я использую export. Но таким образом, если вы экспортируете эту переменную, вам не нужен файл local.properties в вашей папке проекта. Чтобы этот параметр сохранялся при каждой перезагрузке, добавьте команду export-commad в файл ~/.bashrc. - person suther; 07.10.2016
comment
К сожалению, gradlew использует путь local.properties sdk вместо переменной среды $ANDROID_HOME. - person IgorGanapolsky; 15.11.2016

В OSX IntelliJ не будет использовать переменные среды, которые вы установили в своем .bash_profile или .bash_rc и т. д.

Попробуйте это, подставив значение вашего собственного местоположения sdk:

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

Затем перезапустите IntelliJ и ваш дядя Боб.

Вот ссылка на проблему в более общем виде: https://emmanuelbernard.com/blog/2012/05/09/setting-global-variables-intellij/

person Matthew Daumen    schedule 28.08.2015
comment
К вашему сведению, это решение предназначено для osx. - person Matthew Daumen; 17.09.2015
comment
Да работал для меня на elcapitan. launchctl setenv ANDROID_HOME ~/Library/Android/sdk - person agmcleod; 22.12.2015
comment
Или вы можете просто проксировать свои переменные среды, такие как launchctl setenv ANDROID_HOME $ANDROID_HOME и launchctl setenv JAVA_HOME $JAVA_HOME - person Vagif; 17.04.2018
comment
Просто к вашему сведению, для OSX это исправление также помогает для сборки командной строки через gradle, когда та же ошибка возникает при использовании оболочки, отличной от bash (например, zsh). Просто запустите эту команду и перезапустите окно терминала. - person interrupt; 04.12.2018

В моем случае settings.gradle отсутствовал.

Сохраните файл и поместите его в папку верхнего уровня в вашем проекте, даже вы можете скопировать его из другого проекта.

Ссылка на скриншот:

введите описание изображения здесь

Надеюсь, это сэкономит ваше время.

person Hiren Patel    schedule 29.06.2016
comment
Или кто-то не добавил ваш подмодуль в файл settings.gradle. У меня в команде был джуниор, который не сделал этого после добавления подмодуля. Не уверен, как настроен их IntelIJ, но это потратило нетривиальное количество моего времени. - person Stevers; 18.02.2020

Это работает для меня:

$ export ANDROID_HOME=/path_to_sdk/
$ ./gradlew
person giopromolla    schedule 14.12.2015
comment
вы также можете добавить указанную выше строку экспорта в свой ~/.bashrc или ~/.bash_profile, чтобы сделать ее постоянной даже после перезагрузки. - person suther; 26.06.2018

Плагин Android Gradle все еще находится в стадии бета-тестирования, и это может быть просто ошибкой. Для меня настройка ANDROID_HOME работает, но у нас могут быть разные версии (пожалуйста, попробуйте еще раз с самой последней версией и дайте мне знать, работает она или нет).

Также стоит установить переменную среды ANDROID_SDK, а также ANDROID_HOME.

Я видел проблемы с этим на некоторых машинах, поэтому в этих случаях мы создаем local.properties — я также заметил, что последняя версия Android Studio создаст этот файл для вас и заполнит свойство sdk.dir.

Обратите внимание, что вам не следует проверять local.properties в системе контроля версий, мы добавили его в наш gitignore, чтобы он не мешал переносу кода между системами, которые вы справедливо определили как потенциальную проблему.

person ZoFreX    schedule 23.01.2014
comment
Определение ANDROID_SDK мне ничего не дало. - person Heath Borders; 03.02.2014
comment
Какую версию Gradle и плагин для Android вы используете, и есть ли у вас файл local.properties? - person ZoFreX; 03.02.2014
comment
добавление sdk.dir=/path/to/android/sdk сработало для меня. Я использую Gradle как часть проекта, созданного с помощью IntelliJ 13.0.2. - person Heath Borders; 03.02.2014
comment
Похоже, это ошибка IntelliJ. youtrack.jetbrains.com/issue/IDEA-119361 - person Heath Borders; 03.02.2014
comment
Также может быть ошибка в IntelliJ или Android Studio, но первоначальный вопрос касался использования Gradle из командной строки, которая, похоже, имеет свою собственную ошибку (может быть связана или не связана с проблемой, которую вы видите). Изменить: Кроме того, в моей системе IntelliJ не наследует переменные среды из командной строки, что может быть вашей проблемой? - person ZoFreX; 05.03.2014
comment
создайте файл local.properties в той же папке, что и build.gradle, и добавьте внутрь sdk.dir=/path/to/android/sdk. - person Raymond Chenon; 09.10.2014
comment
Зачем нужна переменная ANDROID_SDK? - person IgorGanapolsky; 15.11.2016

По какой-то причине скрипт gradle не получает значение ANDROID_HOME из среды. Попробуйте указать его в командной строке явно

$ ANDROID_HOME=<sdk location> ./gradlew
person Andrew Marshall    schedule 08.07.2015
comment
Что-то не так: это работает для ANDROID_HOME, но не работает для ANDROID_NDK_HOME. Мне пришлось использовать local.properties для последнего. - person Andrew Smart; 27.02.2016
comment
Этот обходной путь ничего не делает для меня (в док-контейнере). - person IgorGanapolsky; 15.11.2016

Я столкнулся с той же проблемой, хотя у меня был файл local.properties в моем основном модуле и переменная среды ANDROID_HOME, установленная на системном уровне.

Что решило эту проблему, так это то, что я скопировал файл local.properties, который был в моем основном модуле проекта, в корень всего проекта (т.е. в родительский каталог для вашего основного модуля)

Попробуйте скопировать файл local.properties внутри модулей и в корневой каталог. Должно сработать.

person joecizac    schedule 22.08.2015
comment
Я думал, что файл local.properties создается IDE автоматически. Почему необходимо вручную копировать или перемещать этот файл в другие каталоги? - person IgorGanapolsky; 15.11.2016

Я столкнулся с той же проблемой при открытии клонированного репозитория git. Файл local.properties автоматически добавляется в файл .gitignore, поскольку он специфичен для среды сборки каждой машины и поэтому не является частью репозитория.

Решение состоит в том, чтобы импортировать проект, а не просто открывать его после того, как вы клонировали его из git, это заставляет студию Android создавать файл local.properties, специфичный для вашей машины:

Файл >> Импорт проекта >>

person Bulwinkel    schedule 04.02.2014

MAC OS X:

  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.

person Javier Armendariz    schedule 20.01.2017

Как это сделать на 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

person Nimitack    schedule 22.08.2016
comment
в думаю, что вы пропали без вести: export ANDROID_HOME - person To Kra; 07.11.2016
comment
Я устанавливаю ANDROID_HOME, а затем запускаю source ~/.bash_profile, это постоянно (выполнение source хорошо, если вы не хотите выходить из системы, а затем перезагружаться). В вашем случае с export ANDROID_HOME после перезагрузки или входа в систему переменная среды ANDROID_HOME в Mac исчезнет. - person Nimitack; 08.11.2016

Скопируйте local.properties в корневую папку и запустите снова.

person Santiago Medina Chaverra    schedule 12.02.2016

Это сработало для меня (Ubuntu):

Добавьте ANDROID_HOME=/path/to/android-sdk к /etc/environment.

Перезагрузить.

person everyman    schedule 15.08.2016
comment
Я был в тупике на этой вещи в течение нескольких дней, и только это работало. Спасибо, сэр. - person Zygro; 28.09.2018

в окнах я устанавливаю ANDROID_HOME=E:\android\adt-bundle-windows-x86_64-20131030\sdk Тогда все работает как положено.

В Linux вам нужно установить sdk.dir.

Сценарий использует две разные переменные.

person richard    schedule 25.06.2014
comment
Я добавил его, добавил в файл location.properties, но все еще сталкиваюсь с той же проблемой. - person Suneel Prakash; 16.05.2015
comment
В Windows убедитесь, что вы избегаете обратной косой черты в пути. Мне пришлось ввести путь как sdk.dir=C:\\Users\\username\\AppData\\Local\\Android\\Sdk - person Xsasan; 11.02.2017

У меня та же проблема, кажется, пример кода не может найти среду Android, вместо того, чтобы попытаться исправить это, я просто удаляю пример кода из settings.gradle, и тогда установка проходит нормально.

после этого просто импортируйте проект в eclipse и все :)

person Guillermo Gutiérrez    schedule 03.07.2014

В Linux попробуйте запустить studio.sh из терминала и установите ANDROID_HOME в этом терминале. Это сработало для меня.

person Naren    schedule 07.07.2015

Если вы используете Windows Plantform, попробуйте запустить Android Studio от имени администратора.

person Megoc    schedule 25.03.2017

Просто удалите sdk.dir из файла local.preoperties и задайте переменную среды ANDROID_HOME . Это сработало для меня.

person PraveenMax    schedule 04.01.2016
comment
Файл local.properties создается IDE автоматически. Предполагается, что это подделка? - person IgorGanapolsky; 15.11.2016

экспортируйте ANDROID_HOME=/xxx/xxx/ в оболочку, затем используйте его с помощью System.env.ANDROID_HOME в файле gradle.

PS: не забудьте ключевые слова «экспорт», чтобы сделать ANDROID_HOME глобальным.

person Jindowin    schedule 01.08.2016
comment
Важно отметить export в этом ответе. Я определил ANDROID_HOME и даже добавлял это к PATH, но если вы не export ANDROID_HOME, gradle не сможет его найти. - person lase; 02.11.2017

Ваш файл local.properties может отсутствовать. Если это так, добавьте файл с именем «local.properties» внутрь /local.properties и укажите местоположение SDK, как показано ниже.

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

person kinath_ru    schedule 07.08.2016

Я установил ANDROID_HOME = [PATH_OF_MY_ANDROID_SDK] в свою переменную среды. Это решение работает для меня.

person Pravin Abhale    schedule 03.12.2019

Я только что решил точно такую ​​же проблему, добавив ANDROID_HOME в качестве общесистемной переменной. В Ubuntu он должен быть в /etc/profile или в файле сценария оболочки в /etc/profile.d/

Затем выйдите из системы и войдите снова, теперь Gradle должен распознать переменную ANDROID_HOME.

person Joe3112    schedule 06.06.2014

Я столкнулся с похожей проблемой. Почему-то у меня не было папки сборки в моем проекте. Скопировав эту папку из другого проекта в мой проект, с которым у меня возникла проблема, это решило эту проблему.

person Horatio    schedule 09.08.2015

Установка Build-Tools 23.0.1 вместо 23.0.2 устранила эту проблему для меня.

person TheBetterJORT    schedule 12.03.2016

решения:

1 добавить "sdk.dir=path_of_sdk"

2 выполнить gradlew с переменной evn следующим образом:

$ANDROID_HOME=path_of_sdk ./gradlw

person RoFF    schedule 09.04.2016

Вы сказали, что управление версиями 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 может быть графический интерфейс для решения этой проблемы, но я не знаю, поскольку использую другой редактор. Я также не могу утверждать, что решение является общим, но оно «работает для меня» (tm).

person Mali Remorker    schedule 18.08.2016

Я столкнулся с той же проблемой в Ubuntu (были добавлены как local.properties, так и ANDROID_HOME), но ошибка сборки не устранена. Таким образом, обходным путем является добавление следующих строк

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

непосредственно к скрипту studio.sh (внутри /usr/local/android-studio/bin)

Может быть, это будет полезно.

person Lukas    schedule 22.08.2016

я столкнулся с той же ошибкой, но в моем случае я клонировал проект, клонированный проект был построен с Android API 22, который я не устанавливал в то время (у меня были установлены API 24 и 25) ........ так мне пришлось скачать инструменты SDK для API 22

person Didi Pepple    schedule 29.03.2017

Для Windows:

  1. Добавьте ANDROID_HOME в переменные среды: ANDROID_HOME = C:/Users/YOUR_USERNAME/AppData/Local/Android/sdk
  2. Добавьте %ANDROID_HOME%\platform-tools в ПУТЬ.
person J. Jerez    schedule 07.11.2017

В моей системе (Ubuntu 20.04 после двух обновлений версии с 19.04) симптомы были такими, как если бы gradle (4.4.1, установленный из репозиториев APT) игнорировал переменную среды ANDROID_HOME, при этом получая значение sdk.dir из local.properties, если я его создал.

Причина, по-видимому, заключалась в том, что команда java ссылалась на openjdk version "11.0.7". После того, как я установил пакет openjdk-8-jdk и сделал update-alternatives --config java, чтобы по умолчанию java была версия 8 ("1.8.0_252"), gradle заработало, как и ожидалось.

person Ruslan    schedule 16.06.2020

Этот вопрос относится к ноябрю 2013 года (пока Android Studio все еще находилась в режиме предварительного просмотра для разработчиков),

В настоящее время (AS v2.2, август 2016 г.) во время установки AS просит выбрать папку SDK (или установить их по умолчанию), и она автоматически применяется к любому проекту, который вы открываете.

Это означает, что любой возможный обходной путь или исправление не имеют значения, поскольку проблема больше не воспроизводится.

person Budius    schedule 17.08.2016
comment
Это неправильно. В настоящее время я пытаюсь решить ту же проблему, но все равно не повезло, перепробовал множество возможных решений, опубликованных здесь. - person AndroidDev; 31.01.2017