Gradle, Android und der Speicherort des ANDROID_HOME SDK


152

bearbeiten: (aug-2016)

Diese Frage stammt aus dem November 2013 (während sich Android Studio noch im Entwicklervorschau-Modus befand).

Derzeit (AS v2.2, August 2016) während der Installation fordert AS Sie auf, den SDK-Ordner auszuwählen (oder standardmäßig zu installieren). Dies gilt automatisch für jedes Projekt, das Sie öffnen.

Das bedeutet, dass eine mögliche Problemumgehung oder Korrektur irrelevant ist, da das Problem nicht mehr reproduzierbar ist.

ursprüngliche Frage:

Wir haben dieses Projekt mit mehreren Modulen, die bereits konfiguriert sind und mit einem Wrapper auf einem anderen Entwickler-PC korrekt ausgeführt werden. Ich habe die kompletten Git-Submodule in meine Maschine geklont.

Unten ist ein direkter Ausdruck meiner Befehlszeile:

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

Wie Sie sehen, ist ANDROID_HOME also da. Was wollen sie noch? Was ist hier los?

läuft unter Ubuntu 13.04

bearbeiten:

Ich habe bereits eine local.properties-Datei mit sdk.dir=<path>im Projektstamm erstellt und es funktioniert. Dies erschwert jedoch die Portierung des Codes zwischen Systemen und Build-Servern, sodass die Frage noch offen ist.

Weiß jemand, warum ANDROID_HOME nicht funktioniert und was zu tun ist, damit es funktioniert?


1
Versuchen Sie, den Pfad Ihres SDK in einer Datei local.properties im Stammverzeichnis Ihres Projekts anzugeben. Die Datei sollte folgendes haben: sdk.dir = <sdk_install_dir>
Gabriele Mariotti

1
Hallo @GabrieleMariotti, danke für den Vorschlag. Aber ich habe das schon gemacht und es funktioniert. Dies erschwert jedoch die Portierung des Codes zwischen Systemen und Build-Servern. Ich würde gerne wissen, ob jemand weiß, warum ANDROID_HOME nicht funktioniert und was zu tun ist, damit es funktioniert. Ich habe diese Information zu der Frage hinzugefügt.
Budius

Ich empfehle Ihnen, in dieser G + Community zu posten. plus.google.com/communities/114791428968349268860 Es handelt sich um eine offizielle Google Community. Normalerweise antwortet das Google-Team schnell.
Gabriele Mariotti

Ja, ich werde es versuchen. Vielen Dank!
Budius

2
@ Budius Ich hatte einen ähnlichen Fall mit der Fehlermeldung. Die Lösung bestand darin, die settings.gradleDatei zum Projektordner hinzuzufügen .
JJD

Antworten:


94

Ich habe das Problem gelöst. Das funktioniert bei mir:

Im

/ my_current_project /

Ich habe eine Datei namens local.properties erstellt und eingefügt

sdk.dir = / my_current_path_to / sdk

In der Konsole muss ich tun

setze ANDROID_HOME = / my_current_path_to / sdk

Hoffe das hilft.


8
Das Problem wird dadurch nicht behoben, da die Dateien local.properties "Local" sein und nicht versioniert werden sollten. (Gleiches Problem wie bei Budius: Ich möchte, dass diese Datei local.properties in meinem Laptop während der Entwicklung erstellt wird. Ich möchte jedoch nicht, dass diese Datei auf meinem Erstellungscomputer erstellt wird, da der SDKS-Pfad nicht identisch ist!)
Tobliug

7
Zumindest unter Windows funktionierte es nach Zeichenfolge sdk.dir backslashing = D: \\ Weich \\ adt-Bündel-windows-x86_64-20140702 \\ sdk
Cheburek

@Tobulug: Sie können steuern, welche Dateien unter Versionskontrolle stehen und die lokalen Dateien nicht hinzufügen oder deren
Auswahl aufheben

Verwenden Sie Export anstelle von Set Fix it.
AugustoL

1
Set war falsch, ich benutze Export . Auf diese Weise benötigen Sie beim Exportieren dieser Variablen nicht die Datei local.properties in Ihrem Projektordner. Um diese Einstellung bei jedem Neustart beizubehalten, fügen Sie den Export-Befehl zu Ihrem ~ / .bashrc
suther

52

Unter OSX übernimmt IntelliJ nicht die Umgebungsvariablen, die Sie in Ihrem .bash_profile oder .bash_rc usw. festgelegt haben.

Versuchen Sie dies, indem Sie den Wert Ihres eigenen SDK-Speicherorts ersetzen:

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

Starten Sie dann IntelliJ neu und Bob ist Ihr Onkel.

Hier ist ein allgemeiner Hinweis auf das Problem: https://emmanuelbernard.com/blog/2012/05/09/setting-global-variables-intellij/


4
Zu Ihrer Information, diese Lösung ist für osx.
Matthew Daumen

4
Ja, ich habe bei Elcapitan gearbeitet. launchctl setenv ANDROID_HOME ~/Library/Android/sdk
Agmcleod

2
Oder Sie können einfach Ihre Umgebungsvariablen wie launchctl setenv ANDROID_HOME $ANDROID_HOMEund launchctl setenv JAVA_HOME $JAVA_HOME
Vagif

Nur zu Ihrer Information, für OSX hilft dieses Update auch beim Erstellen von Befehlszeilen über Gradle, wenn der gleiche Fehler auftritt, wenn Sie eine andere Shell als bash verwenden (z. B. zsh). Führen Sie einfach diesen Befehl aus und starten Sie Ihr Terminalfenster neu.
unterbrechen

30

In meinem Fall settings.gradlefehlte.

Speichern Sie die Datei und legen Sie sie im obersten Ordner Ihres Projekts ab, auch wenn Sie sie aus einem anderen Projekt kopieren können.

Screenshot-Referenz:

Geben Sie hier die Bildbeschreibung ein

Hoffe das würde deine Zeit sparen.


Oder jemand hat Ihr Submodul nicht zur Datei settings.gradle hinzugefügt. Ich hatte einen Junior in unserem Team, der dies nach dem Hinzufügen eines Submoduls nicht tat. Ich bin mir nicht sicher, wie ihr IntellIJ konfiguriert ist, aber dies verschwendete einen nicht trivialen Teil meiner Zeit.
Stevers

25

Das funktioniert bei mir:

$ export ANDROID_HOME=/path_to_sdk/
$ ./gradlew

1
Sie können dies auch die obige "Export" -Linie zu Ihrem ~ / .bashrc oder ~ / .bash_profile hinzufügen, um es auch nach dem Neustart dauerhaft zu machen.
Suther

19

Das Android Gradle Plugin befindet sich noch in der Beta und dies kann einfach ein Fehler sein. Für mich funktioniert das Setzen von ANDROID_HOME, aber wir haben möglicherweise unterschiedliche Versionen (versuchen Sie es erneut mit der neuesten Version und lassen Sie mich wissen, ob es funktioniert oder nicht).

Es lohnt sich auch, die Umgebungsvariable ANDROID_SDK sowie ANDROID_HOME festzulegen.

Ich habe auf einigen Computern Probleme damit festgestellt, daher erstellen wir in diesen Fällen local.properties. Ich habe auch festgestellt, dass die neueste Version von Android Studio diese Datei für Sie erstellt und die Eigenschaft sdk.dir ausfüllt.

Beachten Sie, dass Sie local.properties nicht in die Versionskontrolle einchecken sollten. Wir haben es unserem Gitignore hinzugefügt, damit die Portierung des Codes über Systeme, die Sie zu Recht als potenzielles Problem identifiziert haben, nicht beeinträchtigt wird.


2
Das Definieren von ANDROID_SDK hat nichts für mich getan.
Heath Borders

Welche Version von Gradle und das Android-Plugin verwenden Sie und haben Sie eine local.properties-Datei?
ZoFreX

2
Hinzufügen sdk.dir=/path/to/android/sdkhat bei mir funktioniert. Ich führe gradle als Teil eines Projekts aus, das mit IntelliJ 13.0.2
Heath Borders

Sieht so aus, als wäre dies ein IntelliJ-Fehler. youtrack.jetbrains.com/issue/IDEA-119361
Heath Borders

Möglicherweise gibt es auch einen Fehler in IntelliJ oder Android Studio, aber die ursprüngliche Frage betraf die Verwendung von Gradle über die Befehlszeile, die einen eigenen Fehler zu haben scheint (kann mit dem angezeigten Problem zusammenhängen oder nicht). Bearbeiten: Außerdem erbt IntelliJ auf meinem System keine Umgebungsvariablen von der Befehlszeile. Dies könnte Ihr Problem sein?
ZoFreX

16

Aus irgendeinem Grund nimmt das Gradle-Skript den Wert von ANDROID_HOME nicht aus der Umgebung auf. Versuchen Sie, es explizit in der Befehlszeile anzugeben

$ ANDROID_HOME=<sdk location> ./gradlew

1
Etwas ist wackelig - das funktioniert für ANDROID_HOME, aber nicht für ANDROID_NDK_HOME. Ich musste local.properties für letzteres verwenden.
Andrew Smart

Diese Problemumgehung tut nichts für mich (in einem Docker-Container).
IgorGanapolsky

14

Ich hatte das gleiche Problem, obwohl ich in meinem Hauptmodul die Datei local.properties und die Umgebungsvariable ANDROID_HOME auf Systemebene festgelegt hatte.

Dieses Problem wurde behoben, als ich die Datei local.properties, die sich in meinem Hauptprojektmodul befand, in das Stammverzeichnis des gesamten Projekts kopierte (dh das übergeordnete Verzeichnis Ihres Hauptmoduls).

Versuchen Sie, die Datei local.properties in die Module und in das Stammverzeichnis zu kopieren. Sollte arbeiten.


1
Ich dachte, die Datei local.properties wird von der IDE automatisch generiert. Warum muss diese Datei manuell kopiert oder in andere Verzeichnisse verschoben werden?
IgorGanapolsky

13

Beim Öffnen eines geklonten Git-Repositorys bin ich auf dasselbe Problem gestoßen. Die Datei local.properties wird automatisch zur .gitignore-Datei hinzugefügt, da sie für die Build-Umgebung jedes Computers spezifisch ist und daher nicht Teil des Repos ist.

Die Lösung besteht darin, das Projekt zu importieren, anstatt es nur zu öffnen, nachdem Sie es von git geklont haben. Dies zwingt Android Studio, die für Ihren Computer spezifische Datei local.properties zu erstellen:

Datei >> Projekt importieren >>


12

MAC OS X:

  1. Öffnen Sie das Terminal und bearbeiten Sie die Datei:

~/.bash_profile

hinzufügen:

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

  1. Lauf:

    source ~/.bash_profile

  2. Starten Sie das Terminal und Android Studio neu


8

So geht's unter MAC OSX:

1) Öffnen Sie das Terminal und bearbeiten Sie: vi ~/.bash_profile Wenn dort keine Datei vorhanden ist, fügen Sie sie einfach hinzu.

2) Hinzufügen (Ändern Sie zu IHREM BENUTZERNAMEN und fügen Sie diesen hinzu):

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

3) Ausführen source ~/.bash_profile .

4) Ausführen echo $JAVA_HOME; echo $ANDROID_HOME;

5) Wenn Ihre Ausgabe ist:

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

Du bist also gut.

und Android Studio neu starten!

Und stellen Sie sicher, dass Sie Java haben :)

java -version

Und gradle :)

gradle --version


in denken, Sie fehlen:export ANDROID_HOME
Zu Kra

1
Ich setze ANDROID_HOMEund source ~/.bash_profileführe dann aus , dies ist permeant (ausführen sourceist gut, wenn Sie sich nicht abmelden und neu starten oder neu starten möchten). In Ihrem Fall ist export ANDROID_HOMEdie Umgebungsvariable ANDROID_HOMEin mac nach einem Neustart oder einer Anmeldung nicht mehr vorhanden.
Nimitack


4

Das hat bei mir funktioniert (Ubuntu):

Hinzufügen ANDROID_HOME=/path/to/android-sdkzu /etc/environment.

Starten Sie neu.


Ich war tagelang ratlos und nur dieses Ding hat funktioniert. Danke mein Herr.
Zygro

3

In Windows setze ich ANDROID_HOME = E: \ android \ adt-bundle-windows-x86_64-20131030 \ sdk. Dann funktioniert es wie erwartet.

Unter Linux müssen Sie sdk.dir festlegen.

Das Skript verwendet zwei verschiedene Variablen.


1
Ich habe es hinzugefügt, in der Datei location.properties hinzugefügt, aber immer noch vor dem gleichen Problem
Suneel Prakash

1
Stellen Sie unter Windows sicher, dass Sie die Backslashes im Pfad umgehen. Ich musste den Pfad wie sdk.dir=C:\\Users\\username\\AppData\\Local\\Android\\Sdk
folgt

2

Ich habe das gleiche Problem, anscheinend kann der Beispielcode die Android-Umgebung nicht finden, stattdessen versuche ich zu beheben, dass ich nur den Beispielcode aus settings.gradle entferne und dann die Installation gut geht.

danach einfach das projekt in eclipse importieren und das ist alles :)


2

Versuchen Sie unter Linux, studio.sh von einem Terminal aus auszuführen und setzen Sie ANDROID_HOME in diesem Terminal. Das hat bei mir funktioniert.


2

Wenn Sie Windows Plantform verwenden, führen Sie Android Studio als Administrator aus


1

Löschen Sie einfach die Datei sdk.dir in der Datei local.preoperties und legen Sie die Umgebungsvariable ANDROID_HOME fest . Es hat bei mir funktioniert.


Die Datei local.properties wird von der IDE automatisch generiert. Soll es manipuliert werden?
IgorGanapolsky

1

Exportieren Sie ANDROID_HOME = / xxx / xxx / in die Shell und verwenden Sie es dann von System.env.ANDROID_HOME in der Gradle-Datei.

PS: Vergessen Sie nicht die 'Export'-Schlüsselwörter, um ANDROID_HOME global zu machen.


Das exportin dieser Antwort ist wichtig zu beachten. Ich hatte das ANDROID_HOMEdefiniert und fügte es sogar hinzu PATH, aber wenn Sie es nicht tun export ANDROID_HOME, wird Gradle es nicht finden können.
Lase

1

Möglicherweise fehlt Ihre Datei local.properties. Fügen Sie in diesem Fall eine Datei mit dem Namen 'local.properties' in /local.properties hinzu und geben Sie den SDK-Speicherort wie folgt an.

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


1

Ich habe ANDROID_HOME = [PATH_OF_MY_ANDROID_SDK] auf meine Umgebungsvariable gesetzt. Diese Lösung funktioniert bei mir.


0

Ich habe gerade genau das gleiche Problem gelöst, indem ich ANDROID_HOME als systemweite Variable hinzugefügt habe. In Ubuntu sollte es sich in / etc / profile oder in einer Shell-Skriptdatei in /etc/profile.d/ befinden.

Dann abmelden und erneut anmelden, jetzt sollte Gradle die Variable ANDROID_HOME erkennen.


0

Ich bin auf ein ähnliches Problem gestoßen. Irgendwie hatte ich keinen Build-Ordner in meinem Projekt. Durch Kopieren dieses Ordners von einem anderen Projekt in mein Projekt, mit dem ich ein Problem hatte, wurde dieses Problem behoben.


0

Die Installation von Build-Tools 23.0.1 anstelle von 23.0.2 hat dieses Problem für mich behoben.


0

Lösungen:

1 füge "sdk.dir = path_of_sdk" hinzu

2 Führen Sie gradlew mit der Variablen evn wie folgt aus:

$ ANDROID_HOME = path_of_sdk ./gradlw


0

Sie sagten, dass die Versionierung von local.properties Probleme für Sie verursacht. Ich habe ein Skript gehackt, das das Android-Befehlszeilentool verwendet, um die Datei local.properties auf den an der Produktion beteiligten Computern zu aktualisieren. Der Befehl android update project erzeugt neben local.properties (zumindest für mich) viel unerwünschten Papierkorb, was der Grund für all diese rm- Befehle am Ende des Skripts ist.

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

Dieses Skript ist das erste, was wir auf einem neuen Computer ausführen, auf dem wir codieren. Es muss im Stammprojektverzeichnis ausgeführt werden. Natürlich kann Android Studio eine GUI-Methode haben, um damit umzugehen, aber ich würde es nicht wissen, da ich einen anderen Editor verwende. Ich kann auch nicht behaupten, dass die Lösung allgemein ist, aber sie funktioniert "für mich" (tm).


0

Ich habe mit dem gleichen Problem unter Ubuntu zu kämpfen (beide local.propertiesund ANDROID_HOMEwurde hinzugefügt), aber der Build-Fehler blieb bestehen. Umgehung besteht also darin, die folgenden Zeilen hinzuzufügen

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

direkt zum studio.shSkript (innen/usr/local/android-studio/bin )

Vielleicht wird es hilfreich sein.


0

Ich habe den gleichen Fehler festgestellt, aber in meinem Fall habe ich ein Projekt geklont. Das geklonte Projekt wurde mit der Android-API 22 erstellt, die ich zu diesem Zeitpunkt nicht installiert hatte (ich hatte API 24 und 25 installiert) Ich musste die SDK-Tools für API 22 herunterladen


0

Für Windows:

  1. Fügen Sie ANDROID_HOME zu den Umgebungsvariablen hinzu: ANDROID_HOME = C: / Users / YOUR_USERNAME / AppData / Local / Android / sdk
  2. Fügen Sie dem PATH% ANDROID_HOME% \ platform-tools hinzu.

0

Auf meinem System (Ubuntu 20.04 nach zwei Versions-Upgrades von 19.04) waren die Symptome so, als ob gradle(4.4.1 von APT-Repos installiert) die ANDROID_HOMEUmgebungsvariable ignoriert hätte , während der sdk.dirWert von übernommen wurdelocal.properties wenn ich eine erstellt habe, übernommen wurde.

Der Grund schien der javaBefehl gewesen zu sein, auf den Bezug genommen wurde openjdk version "11.0.7". Nachdem ich das openjdk-8-jdkPaket installiert und update-alternatives --config javadie Standardversion java8 ( "1.8.0_252") festgelegt hatte, gradlebegann ich wie erwartet zu arbeiten.


-3

Diese Frage stammt aus dem November 2013 (während sich Android Studio noch im Entwicklervorschau-Modus befand).

Derzeit (AS v2.2, August 2016) während der Installation fordert AS Sie auf, den SDK-Ordner auszuwählen (oder standardmäßig zu installieren). Dies gilt automatisch für jedes Projekt, das Sie öffnen.

Das bedeutet, dass eine mögliche Problemumgehung oder Korrektur irrelevant ist, da das Problem nicht mehr reproduzierbar ist.


Das ist falsch Ich versuche derzeit, das gleiche Problem zu lösen, habe aber immer noch kein Glück und habe viele mögliche Lösungen ausprobiert, die hier veröffentlicht wurden.
AndroidDev
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.