Gradle, Android i lokalizacja ANDROID_HOME SDK

152

edycja: (sierpień-2016)

To pytanie pochodzi z listopada 2013 r. (Gdy Android Studio było jeszcze w trybie Developer Preview),

Obecnie (AS v2.2, sierpień-2016) podczas instalacji AS prosi o wybranie folderu SDK (lub instalacji domyślnej) i automatycznie stosuje się do każdego otwieranego projektu.

Oznacza to, że wszelkie możliwe obejścia lub poprawki są nieistotne, ponieważ problemu nie można już odtworzyć.

oryginalne pytanie:

mamy ten projekt z kilkoma modułami, które są już skonfigurowane i działają poprawnie na innym komputerze deweloperskim przy użyciu opakowania. Sklonowałem całe podmoduły git do mojego komputera.

Poniżej znajduje się bezpośredni wydruk mojego wiersza poleceń:

$ ./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
$ 

więc, jak widać, ANDROID_HOME tam jest. Czego jeszcze chcą? Co tu jest nie tak.

działający na Ubuntu 13.04

edytować:

Utworzyłem już plik local.properties sdk.dir=<path>w katalogu głównym projektu i działa. Ale to sprawia, że ​​kod jest trudniejszy do przeniesienia na serwer kompilacji systemów, więc pytanie jest nadal otwarte.

Czy ktoś wie, dlaczego ANDROID_HOME nie działa i co zrobić, aby działał?

Budius
źródło
1
Spróbuj określić ścieżkę do swojego SDK w pliku local.properties w katalogu głównym projektu. Plik powinien mieć następującą treść: sdk.dir = <sdk_install_dir>
Gabriele Mariotti
1
Cześć @GabrieleMariotti dzięki za sugestię. Ale już to zrobiłem i działa. Ale to sprawia, że ​​kod jest trudniejszy do przeniesienia na serwer kompilacji systemów. Chciałbym wiedzieć, czy ktoś wie, dlaczego ANDROID_HOME nie działa i co zrobić, aby działał? Dodałem tę informację do pytania.
Budius
Proponuję publikować posty w tej społeczności G +. plus.google.com/communities/114791428968349268860 To jest oficjalna społeczność Google. Zwykle zespół Google szybko odpowiada.
Gabriele Mariotti
tak, spróbuję. Dzięki!
Budius
2
@Budius Miałem podobny przypadek z komunikatem o błędzie. Rozwiązaniem było dodanie settings.gradlepliku do folderu projektu.
JJD

Odpowiedzi:

94

Rozwiązałem problem. To działa dla mnie:

W

/ my_current_project /

Utworzyłem plik o nazwie local.properties i umieściłem go w nim

sdk.dir = / my_current_path_to / sdk

W konsoli muszę zrobić

set ANDROID_HOME = / my_current_path_to / sdk

Mam nadzieję że to pomoże.

u53r
źródło
8
Nie rozwiązuje to problemu, ponieważ pliki local.properties powinny mieć wartość „Lokalne”, a nie podlegać wersjonowaniu. (Ten sam problem co Budius: chcę, aby ten plik local.properties w moim laptopie utworzył kompilację podczas programowania, ale nie chcę tego pliku na mojej maszynie do kompilacji, ponieważ ścieżka
sdks
7
Przynajmniej na Windows działało po odwrotnym ukośniku sdk.dir = D: \\ Soft \\ adt-bundle-windows-x86_64-20140702 \\ sdk
Cheburek
@Tobulug: możesz kontrolować, które pliki są pod kontrolą wersji i nie dodawać ani nie
odznaczać
Używanie eksportu zamiast ustawiania, napraw to.
AugustoL
1
zestaw był zły, używam eksportu . Ale w ten sposób, jeśli eksportujesz tę zmienną, nie potrzebujesz pliku local.properties w swoim folderze Projekt. Aby zachować to ustawienie przy każdym ponownym uruchomieniu, dodaj polecenie export-commad do swojego ~ / .bashrc
suther
52

W OSX IntelliJ nie pobierze zmiennych środowiskowych, które ustawiłeś w swoim .bash_profile lub .bash_rc itp ...

Spróbuj tego, zastępując wartość swojej własnej lokalizacji SDK:

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

Następnie uruchom ponownie IntelliJ, a Bob jest twoim wujem.

Oto odniesienie do problemu, wyrażone bardziej ogólnie: https://emmanuelbernard.com/blog/2012/05/09/setting-global-variables-intellij/

Matthew Daumen
źródło
4
FYI to rozwiązanie jest dla osx.
Matthew Daumen
4
Tak, pracował dla mnie w elcapitan. launchctl setenv ANDROID_HOME ~/Library/Android/sdk
agmcleod
2
Lub możesz po prostu proxy dla zmiennych środowiskowych, takich jak launchctl setenv ANDROID_HOME $ANDROID_HOMEi launchctl setenv JAVA_HOME $JAVA_HOME
Vagif,
Do Twojej wiadomości, dla OSX ta poprawka pomaga również w budowaniu wiersza poleceń za pomocą gradle, gdy ten sam błąd występuje, gdy używasz powłoki innej niż bash (na przykład zsh). Po prostu uruchom to polecenie i uruchom ponownie okno terminala.
przerwania
30

W moim przypadku settings.gradlebrakowało.

Zapisz plik i umieść go w folderze najwyższego poziomu w swoim projekcie, nawet jeśli możesz skopiować również z innego projektu.

Odniesienie do zrzutu ekranu:

wprowadź opis obrazu tutaj

Mam nadzieję, że zaoszczędzi to Twój czas.

Hiren Patel
źródło
Albo ktoś nie dodał Twojego modułu podrzędnego do pliku settings.gradle. Miałem juniora w naszym zespole, który nie zrobił tego po dodaniu modułu podrzędnego. Nie jestem pewien, jak skonfigurowany jest ich IntellIJ, ale zmarnowało to niebanalną ilość mojego czasu.
Stevers
25

To działa dla mnie:

$ export ANDROID_HOME=/path_to_sdk/
$ ./gradlew
giopromolla
źródło
1
możesz również dodać powyższą linię "eksportu" do swojego ~ / .bashrc lub ~ / .bash_profile, aby stała się trwała nawet po restarcie.
suther
19

Wtyczka Android Gradle jest nadal w wersji beta i może to być po prostu błąd. Dla mnie ustawienie ANDROID_HOME działa, ale możemy być w różnych wersjach (spróbuj ponownie z najnowszą wersją i daj mi znać, czy działa, czy nie).

Warto też ustawić zmienną środowiskową ANDROID_SDK oraz ANDROID_HOME.

Widziałem problemy z tym na niektórych komputerach, więc w takich przypadkach tworzymy local.properties - zauważyłem również, że najnowsza wersja Android Studio utworzy ten plik za Ciebie i wypełni właściwość sdk.dir.

Zauważ, że nie powinieneś sprawdzać local.properties w kontroli wersji, dodaliśmy go do naszego gitignore, aby nie kolidował z przenoszeniem kodu między systemami, które słusznie zidentyfikowałeś jako potencjalny problem.

ZoFreX
źródło
2
Zdefiniowanie ANDROID_SDK nic dla mnie nie dało.
Heath Borders
Której wersji Gradle i wtyczki dla Androida używasz i czy masz plik local.properties?
ZoFreX
2
dodawanie sdk.dir=/path/to/android/sdkdziałało dla mnie. Używam gradle w ramach projektu utworzonego za pomocą IntelliJ 13.0.2
Heath Borders
Wygląda na to, że to błąd IntelliJ. youtrack.jetbrains.com/issue/IDEA-119361
Heath Borders
Może również występować błąd w IntelliJ lub Android Studio, ale pierwotne pytanie dotyczyło używania Gradle z wiersza poleceń, który wydaje się mieć swój własny błąd (może, ale nie musi, być związany z napotkanym problemem). Edycja: Ponadto w moim systemie IntelliJ nie dziedziczy zmiennych środowiskowych z wiersza poleceń, co może być przyczyną Twojego problemu?
ZoFreX
16

Z jakiegoś powodu skrypt gradle nie pobiera wartości ANDROID_HOME ze środowiska. Spróbuj wyraźnie określić to w wierszu poleceń

$ ANDROID_HOME=<sdk location> ./gradlew
Andrew Marshall
źródło
1
Coś jest nie tak - to działa w przypadku ANDROID_HOME, ale nie działa w przypadku ANDROID_NDK_HOME. Musiałem użyć local.properties dla tego ostatniego.
Andrew Smart
To obejście nic nie daje (w kontenerze Dockera).
Igor Ganapolsky
14

Napotkałem ten sam problem, chociaż miałem plik local.properties w moim głównym module i zmienną środowiskową ANDROID_HOME ustawioną na poziomie systemu.

Naprawiono ten problem, kiedy skopiowałem plik local.properties, który znajdował się w moim głównym module projektu, do katalogu głównego całego projektu (tj. Katalogu nadrzędnego do twojego głównego modułu)

Spróbuj skopiować plik local.properties do modułów i katalogu głównego. Powinno działać.

joecizac
źródło
1
Myślałem, że plik local.properties jest automatycznie generowany przez IDE. Dlaczego trzeba ręcznie kopiować lub przenosić ten plik do innych katalogów?
Igor Ganapolsky
13

Natknąłem się na ten sam problem podczas otwierania sklonowanego repozytorium git. Plik local.properties jest automatycznie dodawany do pliku .gitignore, ponieważ jest specyficzny dla środowiska kompilacji każdej maszyny i dlatego nie jest częścią repozytorium.

Rozwiązaniem jest zaimportowanie projektu zamiast otwierania go po sklonowaniu go z git, co zmusza Android Studio do utworzenia pliku local.properties odpowiedniego dla twojego komputera:

Plik >> Importuj projekt >>

Bulwinkel
źródło
12

MAC OS X:

  1. Otwórz Terminal i edytuj plik:

~/.bash_profile

dodać:

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

  1. Biegać:

    source ~/.bash_profile

  2. Uruchom ponownie terminal i Android Studio

Javier Armendariz
źródło
8

Jak to zrobić na MAC OSX:

1) Otwórz Terminal i edytuj: vi ~/.bash_profileJeśli nie ma tam pliku, po prostu go dodaj.

2) Dodaj (zmień na SWOJĄ NAZWĘ UŻYTKOWNIKA i dodaj to):

#Java var home: JAVA_HOME="/usr/libexec/java_home" ANDROID_HOME="/Users/<YOUR USER NAME>/Library/Android/sdk"

3) Biegnij source ~/.bash_profile.

4) Uruchom echo $JAVA_HOME; echo $ANDROID_HOME;

5) Jeśli wynik to:

/usr/libexec/java_home /Users/<YOUR USER NAME>/Library/Android/sdk

Więc jesteś dobry.

i RESTART Android studio!

I upewnij się, że masz java :)

java -version

I gradle :)

gradle --version

Nimitack
źródło
myślę, że brakuje ci:export ANDROID_HOME
Do Kra
1
Ustawiam, ANDROID_HOMEa następnie wykonuję source ~/.bash_profile, to jest trwałe (wykonanie sourcejest dobre, jeśli nie chcesz się wylogować i zalogować lub ponownie uruchomić). W twoim przypadku export ANDROID_HOMEpo ponownym uruchomieniu lub zalogowaniu zmienna środowiskowa ANDROID_HOMEw systemie Mac zniknie.
Nimitack
7

Skopiuj plik local.properties do folderu głównego i uruchom ponownie.

Santiago Medina Chaverra
źródło
4

To zadziałało dla mnie (Ubuntu):

Dodaj ANDROID_HOME=/path/to/android-sdkdo /etc/environment.

Restart.

każdy
źródło
Byłem zdumiony przez kilka dni i tylko to działało. Dziękuję Panu.
Zygro
3

w systemie Windows ustawiam ANDROID_HOME = E: \ android \ adt-bundle-windows-x86_64-20131030 \ sdk Wtedy działa zgodnie z oczekiwaniami.

W Linuksie musisz ustawić sdk.dir.

Skrypt używa dwóch różnych zmiennych.

Richard
źródło
1
Dodałem go, dodałem w pliku location.properties, ale wciąż mam ten sam problem
Suneel Prakash
1
W systemie Windows upewnij się, że unikasz odwrotnych ukośników na ścieżce. Musiałem wejść na ścieżkę jaksdk.dir=C:\\Users\\username\\AppData\\Local\\Android\\Sdk
Xsasan,
2

Mam ten sam problem, wygląda na to, że przykładowy kod nie może znaleźć środowiska androida, zamiast tego próbuję naprawić, po prostu usuwam przykładowy kod z settings.gradle, a następnie instalacja przebiega pomyślnie.

potem po prostu zaimportuj projekt w zaćmieniu i to wszystko :)

Guillermo Gutiérrez
źródło
2

W systemie Linux spróbuj uruchomić studio.sh z terminala i ustaw ANDROID_HOME w tym terminalu. To zadziałało dla mnie.

Naren
źródło
2

Jeśli używasz systemu Windows Plantform, spróbuj uruchomić Android Studio jako administrator

Megoc
źródło
1

Po prostu usuń sdk.dir w pliku local.preoperties i ustaw zmienną środowiskową ANDROID_HOME . U mnie to zadziałało.

PraveenMax
źródło
Plik local.properties jest generowany automatycznie przez środowisko IDE. Czy należy przy tym majstrować?
Igor Ganapolsky
1

eksportuj ANDROID_HOME = / xxx / xxx / w powłoce, a następnie użyj go przez System.env.ANDROID_HOME w pliku gradle.

PS: nie zapomnij o słowach kluczowych „eksport”, aby ANDROID_HOME stał się globalny.

Jindowin
źródło
W exporttej odpowiedzi należy zwrócić uwagę. Miałem ANDROID_HOMEzdefiniowane, a nawet dodając, że do PATH, ale jeśli nie export ANDROID_HOME, Gradle nie będzie w stanie go znaleźć.
låse
1

Być może brakuje pliku local.properties. Jeśli tak, dodaj plik o nazwie „local.properties” w /local.properties i podaj lokalizację sdk w następujący sposób.

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

kinath_ru
źródło
1

Mam ustawić ANDROID_HOME = [PATH_OF_MY_ANDROID_SDK] do mojego zmiennej środowiskowej. To rozwiązanie działa dla mnie.

Pravin Abhale
źródło
0

Właśnie rozwiązałem ten sam problem, dodając ANDROID_HOME jako zmienną systemową. W Ubuntu powinien znajdować się w / etc / profile lub w pliku skryptu powłoki w /etc/profile.d/

Następnie wyloguj się i zaloguj ponownie, teraz Gradle powinien rozpoznać zmienną ANDROID_HOME.

Joe3112
źródło
0

Natknąłem się na podobny problem. W jakiś sposób nie miałem folderu kompilacji w moim projekcie. Kopiowanie tego folderu z innego projektu do mojego projektu, z którym miałem problem, rozwiązało ten problem.

Horatio
źródło
0

Zainstalowanie Build-Tools 23.0.1 zamiast 23.0.2 rozwiązało ten problem.

TheBetterJORT
źródło
0

rozwiązania:

1 dodaj „sdk.dir = path_of_sdk”

2 wykonaj gradlew ze zmienną evn, taką jak:

$ ANDROID_HOME = ścieżka_sdk ./gradlw

RoFF
źródło
0

Powiedziałeś, że przechowywanie wersji local.properties stwarza problemy. Zhakowałem razem skrypt, który używa narzędzia wiersza poleceń systemu Android do odświeżania pliku local.properties na maszynach zaangażowanych w produkcję. Polecenie android update project , oprócz local.properties, produkuje wiele niechcianych śmieci (przynajmniej dla mnie), co jest przyczyną wszystkich tych poleceń rm na końcu skryptu.

#!/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"

Ten skrypt jest pierwszą rzeczą, którą uruchamiamy na każdej nowej maszynie, na której kodujemy. Musi być uruchomiony w głównym katalogu projektu. Oczywiście android studio może mieć GUI sposób radzenia sobie z tym, ale nie wiedziałbym, ponieważ używam innego edytora. Nie mogę też twierdzić, że rozwiązanie jest ogólne, ale to „Działa dla mnie” (tm).

Mali Remorker
źródło
0

Napotkałem ten sam problem na Ubuntu (oba local.propertiesi ANDROID_HOMEzostały dodane), ale błąd kompilacji utrzymywał się. Więc obejściem jest dodanie następujących wierszy

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

bezpośrednio do studio.shscenariusza (wewnątrz /usr/local/android-studio/bin)

Może to będzie pomocne.

Lukas
źródło
0

napotkałem ten sam błąd, ale w moim przypadku klonowałem projekt, sklonowany projekt został zbudowany za pomocą Android API 22, którego nie instalowałem w tym czasie (miałem zainstalowane API 24 i 25) ........ więc Musiałem pobrać narzędzia SDK dla API 22

Didi Pepple
źródło
0

Dla Windowsa:

  1. Dodaj ANDROID_HOME do zmiennych środowiskowych: ANDROID_HOME = C: / Users / YOUR_USERNAME / AppData / Local / Android / sdk
  2. Dodaj% ANDROID_HOME% \ platform-tools do PATH.
J. Jerez
źródło
0

W moim systemie (Ubuntu 20.04 po dwóch aktualizacjach wersji z 19.04) symptomy wyglądały tak, jakby gradle(4.4.1 zainstalowane z repozytoriów APT) ignorował ANDROID_HOMEzmienną środowiskową, podczas pobierania sdk.dirwartości z tego, local.propertiesgdy ją utworzyłem.

Wydawało się, że powodem było javawspomniane polecenie openjdk version "11.0.7". Po zainstalowaniu openjdk-8-jdkpakietu i update-alternatives --config javaustawieniu domyślnej javawersji 8 ( "1.8.0_252"), gradlezaczęło działać zgodnie z oczekiwaniami.

Rusłan
źródło
-3

To pytanie pochodzi z listopada 2013 r. (Gdy Android Studio było jeszcze w trybie Developer Preview),

Obecnie (AS v2.2, sierpień-2016) podczas instalacji AS prosi o wybranie folderu SDK (lub instalacji domyślnej) i automatycznie stosuje się do każdego otwieranego projektu.

Oznacza to, że wszelkie możliwe obejścia lub poprawki są nieistotne, ponieważ problemu nie można już odtworzyć.

Budius
źródło
To jest niepoprawne. Obecnie próbuję rozwiązać ten sam problem, nadal bez powodzenia, wypróbowałem wiele możliwych rozwiązań zamieszczonych tutaj.
AndroidDev