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


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

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


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

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, чтобы он не мешал переносу кода между системами, которые вы по праву определили как потенциальную проблему.


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 внутри модулей и корневого каталога. Должно сработать.


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

13

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

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

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


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


Я думаю, что вы пропали без вести:export ANDROID_HOME
К Кра

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


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 в этом терминале. Это сработало для меня.


2

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


1

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


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

1

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

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



0

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

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


0

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


0

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


0

решения:

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

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

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


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)

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


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 (или установить по умолчанию), и она автоматически применяется к любому проекту, который вы открываете.

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


Это неверно В настоящее время я пытаюсь решить ту же проблему, но все же не повезло, перепробовал множество возможных решений, размещенных здесь.
AndroidDev
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.