Gradle, Android и местоположение ANDROID_HOME SDK

152

редактировать: (август-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 не работает и что нужно сделать, чтобы он работал?

Budius
источник
1
Попробуйте указать путь к вашему SDK в файле local.properties в корневом каталоге вашего проекта. Файл должен иметь это: sdk.dir = <sdk_install_dir>
Габриэле Мариотти
1
Привет @GabrieleMariotti спасибо за предложение. Но я уже сделал это, и это работает. Но это усложняет перенос кода на системы и сервер сборки. Я хотел бы знать, если кто-то знает, почему ANDROID_HOME не работает и что нужно сделать, чтобы он работал? Я добавил эту информацию в вопрос.
Будий
Я предлагаю вам написать в этом сообществе G +. plus.google.com/communities/114791428968349268860 Это официальное сообщество Google. Обычно команда Google отвечает быстро.
Габриэле Мариотти
да, я дам им попытку. Спасибо!
Будий
2
@Budius У меня был похожий случай с сообщением об ошибке. Решением было добавить settings.gradleфайл в папку проекта.
JJD

Ответы:

94

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

В

/ My_current_project /

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

sdk.dir = / my_current_path_to / SDK

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

set ANDROID_HOME = / my_current_path_to / sdk

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

u53r
источник
8
Это не решает проблему, потому что файлы local.properties должны быть «Локальными» и не иметь версий. (Та же проблема, что и у Budius: я хочу, чтобы этот файл local.properties на моем ноутбуке создавал сборку во время разработки, но я не хочу, чтобы этот файл на моей сборочной машине, потому что путь sdks не тот!)
Tobliug
7
По крайней мере, в Windows это сработало после обратной косой черты sdk.dir = D: \\ Soft \\ adt-bundle-windows-x86_64-20140702 \\ sdk
Чебурек,
@Tobulug: вы можете контролировать, какие файлы контролируются версиями, а не добавлять или
отменять выбор
Использование экспорта вместо набора исправить это.
AugustoL
1
набор был неправильным, я использую экспорт . Но таким образом, если вы экспортируете эту переменную, вам не нужен файл local.properties в вашей папке Projekt. Чтобы сохранить этот параметр при каждой перезагрузке, добавьте экспортный запятую в ваш ~ / .bashrc
suther
52

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

Мэтью Даумен
источник
4
К вашему сведению, это решение для OSX.
Мэтью Даумен
4
Да, работал для меня на elcapitan. launchctl setenv ANDROID_HOME ~/Library/Android/sdk
agmcleod
2
Или вы можете просто прокси свои переменные окружения, как launchctl setenv ANDROID_HOME $ANDROID_HOMEи launchctl setenv JAVA_HOME $JAVA_HOME
Vagif
Просто для справки, для OSX это исправление также помогает для построения командной строки через gradle, когда та же ошибка возникает при использовании оболочки, отличной от bash (например, zsh). Просто запустите эту команду и перезапустите окно терминала.
прервать
30

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

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

Снимок экрана:

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

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

Хирен Патель
источник
Или кто-то не добавил ваш подмодуль в файл settings.gradle. В нашей команде был младший, который не сделал этого после добавления подмодуля. Не уверен, как их IntellIJ настроен, но это потратило нетривиальное количество моего времени.
Стиверс
25

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

$ export ANDROID_HOME=/path_to_sdk/
$ ./gradlew
giopromolla
источник
1
Вы также можете добавить эту вышеупомянутую строку «export» в ваш ~ / .bashrc или ~ / .bash_profile, чтобы сделать его постоянным даже после перезагрузки.
Süther
19

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

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

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

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

ZoFreX
источник
2
Определение ANDROID_SDK ничего не сделало для меня.
Хит Бордерс
Какую версию Gradle и плагин Android вы используете, и у вас есть файл local.properties?
ZoFreX
2
добавление sdk.dir=/path/to/android/sdkсработало для меня. Я использую Gradle как часть проекта, созданного с помощью IntelliJ 13.0.2
Heath Borders
Похоже, это ошибка IntelliJ. youtrack.jetbrains.com/issue/IDEA-119361
Heath Borders
Также может быть ошибка в IntelliJ или Android Studio, но первоначальный вопрос был об использовании Gradle из командной строки, который, похоже, имеет свою собственную ошибку (может быть или не быть связано с проблемой, которую вы видите). Редактировать: Кроме того, в моей системе IntelliJ не наследует переменные среды из командной строки, что может быть вашей проблемой?
ZoFreX
16

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

$ ANDROID_HOME=<sdk location> ./gradlew
Эндрю Маршалл
источник
1
Что-то шаткое - это работает для ANDROID_HOME, но не работает для ANDROID_NDK_HOME. Мне пришлось использовать local.properties для последнего.
Эндрю Смарт
Этот обходной путь ничего не делает для меня (в контейнере докера).
Игорь Ганапольский
14

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

Эта проблема была устранена, когда я скопировал файл local.properties, который находился в моём главном модуле проекта, в корень всего проекта (т. Е. Родительский каталог для вашего основного модуля).

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

joecizac
источник
1
Я думал, что файл local.properties автоматически генерируется IDE. Почему необходимо вручную скопировать или переместить этот файл в другие каталоги?
Игорь Ганапольский
13

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

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

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

Bulwinkel
источник
12

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

Хавьер Армендарис
источник
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

Так что ты хороший.

и RESTART андроид студия!

И, убедитесь, что у вас есть Java :)

java -version

И градл :)

gradle --version

Nimitack
источник
Я думаю, что вы пропали без вести:export ANDROID_HOME
К Кра
1
Я установил ANDROID_HOMEи затем выполнил source ~/.bash_profile, это является проникающим (выполнить sourceхорошо, если вы не хотите выходить из системы и входить или перезагружаться). В вашем случае, export ANDROID_HOMEпосле перезагрузки или входа в систему переменная окружения ANDROID_HOMEв mac исчезнет.
Нимитак
7

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

Сантьяго Медина Чаверра
источник
4

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

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

Перезагрузка.

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

Naren
источник
2

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

Megoc
источник
1

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

PraveenMax
источник
Файл local.properties генерируется IDE автоматически. Это должно быть подделано?
Игорь Ганапольский
1

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

PS: не забудьте ключевые слова "export", чтобы сделать ANDROID_HOME глобальным.

Jindowin
источник
В exportэтом ответе важно отметить. Я ANDROID_HOMEопределил и даже добавил это к PATH, но если вы этого не сделаете export ANDROID_HOME, Gradle не сможет найти его.
генерируют излучение
1

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

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

kinath_ru
источник
1

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

Правин Абхале
источник
0

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

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

Joe3112
источник
0

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

Горацио
источник
0

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

TheBetterJORT
источник
0

решения:

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

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

$ ANDROID_HOME = path_of_sdk ./gradlw

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

Мали Реморкер
источник
0

Я столкнулся с той же проблемой на 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)

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

Lukas
источник
0

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

Диди Пеппл
источник
0

Для Windows:

  1. Добавьте ANDROID_HOME в переменные среды: ANDROID_HOME = C: / Users / YOUR_USERNAME / AppData / Local / Android / sdk
  2. Добавьте% ANDROID_HOME% \ platform-tools в PATH.
Дж. Херес
источник
0

В моей системе (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начал работать как положено.

Руслан
источник
-3

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

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

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

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