Gradle, Android et l'emplacement du SDK ANDROID_HOME

152

edit: (août-2016)

Cette question date de novembre 2013 (alors qu'Android Studio était toujours en mode Developer Preview),

Actuellement (AS v2.2, août 2016) pendant l'installation, AS demande à choisir le dossier SDK (ou à installer sur leur valeur par défaut) et il s'applique automatiquement à tout projet que vous ouvrez.

Cela signifie que toute solution de contournement ou correctif possible n'est pas pertinente car le problème n'est plus reproductible.

question originale:

nous avons ce projet avec plusieurs modules qui est déjà configuré et s'exécute correctement sur un autre PC développeur à l'aide d'un wrapper. J'ai cloné les sous-modules git complets dans ma machine.

Ci-dessous, c'est une impression directe de ma ligne de commande:

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

donc, comme vous pouvez le voir, ANDROID_HOME est là. Que veulent-ils d'autre? Quel est le problème ici.

fonctionnant sous Ubuntu 13.04

Éditer:

J'ai déjà créé un fichier local.properties avec sdk.dir=<path>à la racine du projet et cela fonctionne. Mais cela rend le code plus difficile à porter sur les serveurs de build des systèmes, donc la question est toujours ouverte.

Tout le monde sait pourquoi ANDROID_HOME ne fonctionne pas et que faire pour le faire fonctionner?

Budius
la source
1
Essayez de spécifier le chemin de votre SDK dans un fichier local.properties, sous le répertoire racine de votre projet. Le fichier devrait avoir ceci: sdk.dir = <sdk_install_dir>
Gabriele Mariotti
1
Salut @GabrieleMariotti merci pour la suggestion. Mais je l'ai déjà fait et ça marche. Mais cela rend le code plus difficile à porter sur le serveur de construction des systèmes. Je voudrais savoir si quelqu'un sait pourquoi ANDROID_HOME ne fonctionne pas et que faire pour le faire fonctionner? J'ai ajouté cette information à la question.
Budius
Je vous suggère de publier dans cette communauté Google+. plus.google.com/communities/114791428968349268860 C'est une communauté Google officielle. L'équipe Google répond généralement rapidement.
Gabriele Mariotti
ouais, je vais leur donner un essai. Merci!
Budius
2
@Budius J'ai eu un cas similaire avec le message d'erreur. La solution était d'ajouter le settings.gradlefichier dans le dossier du projet.
JJD

Réponses:

94

J'ai résolu le problème. Cela fonctionne pour moi:

Dans

/ mon_projet_actuel /

J'ai créé un fichier appelé local.properties et mis à l'intérieur

sdk.dir = / mon_chemin_actuel_à / sdk

Dans la console, je dois faire

set ANDROID_HOME = / my_current_path_to / sdk

J'espère que cela t'aides.

u53r
la source
8
Cela ne résout pas le problème car les fichiers local.properties doivent être "Local" et non sous contrôle de version. (Même problème que Budius: je veux que ce fichier local.properties dans mon ordinateur portable crée une compilation pendant le développement, mais je ne veux pas ce fichier dans ma machine de construction car le chemin sdks n'est pas le même!)
Tobliug
7
Au moins sur Windows, cela fonctionnait après la chaîne de barres obliques inversées sdk.dir = D: \\ Soft \\ adt-bundle-windows-x86_64-20140702 \\ sdk
Cheburek
@Tobulug: vous pouvez contrôler les fichiers sous contrôle de version et ne pas ajouter ou désélectionner les fichiers locaux
sivi
Utiliser l'exportation au lieu de définir le réparer.
AugustoL
1
ensemble était faux, j'utilise l' exportation . Mais de cette façon, si vous exportez cette variable, vous n'avez pas besoin du fichier local.properties dans votre dossier Projekt. Pour conserver ce paramètre à chaque redémarrage, ajoutez la commande d'exportation à votre ~ / .bashrc
suther
52

Sous OSX , IntelliJ ne récupérera pas les variables d'environnement que vous avez définies dans votre .bash_profile ou .bash_rc etc ...

Essayez ceci, en remplaçant la valeur de votre propre emplacement SDK:

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

Puis redémarrez IntelliJ et Bob est votre oncle.

Voici une référence au problème, énoncé plus généralement: https://emmanuelbernard.com/blog/2012/05/09/setting-global-variables-intellij/

Matthew Daumen
la source
4
Pour info, cette solution est pour osx.
Matthew Daumen
4
Ouais a travaillé pour moi sur elcapitan. launchctl setenv ANDROID_HOME ~/Library/Android/sdk
agmcleod
2
Ou vous pouvez simplement proxy vos variables d'environnement comme launchctl setenv ANDROID_HOME $ANDROID_HOMEet launchctl setenv JAVA_HOME $JAVA_HOME
Vagif
Juste pour info, pour OSX, ce correctif aide également à la construction de la ligne de commande via gradle, lorsque la même erreur se produit lorsque vous utilisez un shell autre que bash (zsh par exemple). Exécutez simplement cette commande et redémarrez la fenêtre de votre terminal.
interrompre
30

Dans mon cas, settings.gradleil manquait.

Enregistrez le fichier et placez-le dans le dossier de niveau supérieur de votre projet, même si vous pouvez également copier à partir d'un autre projet.

Référence de la capture d'écran:

entrez la description de l'image ici

J'espère que cela vous fera gagner du temps.

Hiren Patel
la source
Ou quelqu'un n'a pas ajouté votre sous-module au fichier settings.gradle. J'avais un junior dans notre équipe qui ne l'a pas fait après avoir ajouté un sous-module. Je ne sais pas comment leur IntellIJ est configuré, mais cela a perdu une quantité non négligeable de mon temps.
Stevers le
25

Cela fonctionne pour moi:

$ export ANDROID_HOME=/path_to_sdk/
$ ./gradlew
giopromolla
la source
1
vous pouvez également ajouter cette ligne "d'exportation" ci-dessus à votre ~ / .bashrc ou ~ / .bash_profile pour le rendre permanent même après le redémarrage.
suther le
19

Le plugin Android Gradle est toujours en version bêta et cela peut simplement être un bug. Pour moi, la configuration de ANDROID_HOME fonctionne, mais nous pouvons être sur des versions différentes (veuillez réessayer avec la version la plus récente et me faire savoir si cela fonctionne ou non).

Il vaut également la peine de définir la variable d'environnement ANDROID_SDK ainsi que ANDROID_HOME.

J'ai vu des problèmes avec cela sur certaines machines, nous créons donc local.properties dans ces cas - j'ai également remarqué que la dernière version d'Android Studio créera ce fichier pour vous et remplira la propriété sdk.dir.

Notez que vous ne devriez pas vérifier local.properties dans le contrôle de version, nous l'avons ajouté à notre gitignore afin qu'il n'interfère pas avec le portage du code sur les systèmes que vous avez légitimement identifiés comme un problème potentiel.

ZoFreX
la source
2
Définir ANDROID_SDK n'a rien fait pour moi.
Heath Borders
Quelle version de Gradle et du plugin Android utilisez-vous et disposez-vous d'un fichier local.properties?
ZoFreX
2
l'ajout a sdk.dir=/path/to/android/sdkfonctionné pour moi. J'exécute gradle dans le cadre d'un projet créé avec IntelliJ 13.0.2
Heath Borders
On dirait que c'est un bogue IntelliJ. youtrack.jetbrains.com/issue/IDEA-119361
Heath Borders
Il peut également y avoir un bogue dans IntelliJ ou Android Studio, mais la question d'origine concernait l'utilisation de Gradle à partir de la ligne de commande, qui semble avoir son propre bogue (peut ou non être lié au problème que vous rencontrez). Edit: De plus, sur mon système, IntelliJ n'hérite pas des variables d'environnement de la ligne de commande, ce qui pourrait être votre problème?
ZoFreX
16

Pour une raison quelconque, le script gradle ne récupère pas la valeur de ANDROID_HOME de l'environnement. Essayez de le spécifier explicitement sur la ligne de commande

$ ANDROID_HOME=<sdk location> ./gradlew
Andrew Marshall
la source
1
Quelque chose ne va pas - cela fonctionne pour ANDROID_HOME mais ne fonctionnera pas pour ANDROID_NDK_HOME. J'ai dû utiliser local.properties pour ce dernier.
Andrew Smart
Cette solution de contournement ne fait rien pour moi (dans un conteneur Docker).
IgorGanapolsky
14

J'ai rencontré le même problème, même si j'avais le fichier local.properties dans mon module principal et la variable d'environnement ANDROID_HOME définie au niveau du système.

Ce qui a résolu ce problème, c'est lorsque j'ai copié le fichier local.properties qui se trouvait dans mon module de projet principal à la racine de l'ensemble du projet (c'est-à-dire le répertoire parent de votre module principal)

Essayez de copier le fichier local.properties dans les modules et le répertoire racine. Devrait marcher.

joécizac
la source
1
Je pensais que le fichier local.properties était généré automatiquement par l'EDI. Pourquoi la nécessité de copier ou déplacer manuellement ce fichier vers d'autres répertoires?
IgorGanapolsky
13

Je suis tombé sur le même problème lors de l'ouverture d'un référentiel git cloné. Le fichier local.properties est automatiquement ajouté au fichier .gitignore car il est spécifique à l'environnement de construction de chaque machine et ne fait donc pas partie du dépôt.

La solution est d'importer le projet au lieu de simplement l'ouvrir après l'avoir cloné depuis git, cela oblige android studio à créer le fichier local.properties spécifique à votre machine:

Fichier >> Importer un projet >>

Bulwinkel
la source
12

MAC OS X:

  1. Ouvrez le Terminal et modifiez le fichier:

~/.bash_profile

ajouter:

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

  1. Courir:

    source ~/.bash_profile

  2. Redémarrez le terminal et Android Studio

Javier Armendariz
la source
8

Comment le faire sur MAC OSX:

1) Ouvrez le terminal et modifiez: vi ~/.bash_profiles'il n'y a pas de fichier, ajoutez-le simplement.

2) Ajoutez (Changez à VOTRE NOM D'UTILISATEUR et ajoutez ceci):

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

3) Courez source ~/.bash_profile.

4) Courir echo $JAVA_HOME; echo $ANDROID_HOME;

5) Si votre sortie est:

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

Alors tu es bon.

et RESTART android studio!

Et, assurez-vous que vous avez java :)

java -version

Et gradle :)

gradle --version

Nimitack
la source
en pensant qu'il vous manque:export ANDROID_HOME
To Kra
1
J'ai défini ANDROID_HOMEpuis exécuté source ~/.bash_profile, c'est permanent (exécuter sourceest bon si vous ne voulez pas vous déconnecter et vous connecter ou redémarrer). Dans votre cas, avec export ANDROID_HOME, après un redémarrage ou une connexion, la variable d'environnement ANDROID_HOMEsous mac aura disparu.
Nimitack
7

Copiez le fichier local.properties dans le dossier racine et réexécutez.

Santiago Medina Chaverra
la source
4

Cela a fonctionné pour moi (Ubuntu):

Ajouter ANDROID_HOME=/path/to/android-sdkà /etc/environment.

Redémarrez.

chaque homme
la source
J'ai été perplexe sur cette chose pendant des jours et seule cette chose a fonctionné. Merci Monsieur.
Zygro
3

dans Windows, j'ai mis ANDROID_HOME = E: \ android \ adt-bundle-windows-x86_64-20131030 \ sdk Ensuite, cela fonctionne comme prévu.

Sous Linux, vous devez définir sdk.dir.

Le script utilise deux variables différentes.

Richard
la source
1
Je l'ai ajouté, ajouté dans le fichier location.properties mais toujours confronté au même problème
Suneel Prakash
1
Sous Windows, assurez-vous d'échapper aux contre-obliques dans le chemin. Je devais entrer dans le chemin commesdk.dir=C:\\Users\\username\\AppData\\Local\\Android\\Sdk
Xsasan
2

J'ai le même problème, il semble que l'exemple de code ne trouve pas l'environnement Android, mais pour essayer de résoudre le problème, je supprime simplement l'exemple de code de settings.gradle, puis l'installation se passe bien.

après cela, il suffit d'importer le projet dans eclipse et c'est tout :)

Guillermo Gutiérrez
la source
2

Sous Linux, essayez d'exécuter studio.sh à partir d'un terminal et définissez ANDROID_HOME dans ce terminal. Cela a fonctionné pour moi.

Naren
la source
2

Si vous utilisez Windows Plantform, essayez d'exécuter Android Studio en tant qu'administrateur

Megoc
la source
1

Supprimez simplement le sdk.dir dans le fichier local.preoperties et définissez la variable d'environnement ANDROID_HOME . Cela a fonctionné pour moi.

PraveenMax
la source
Le fichier local.properties est généré automatiquement par l'EDI. Est-il censé être falsifié?
IgorGanapolsky
1

export ANDROID_HOME = / xxx / xxx / dans le shell, puis utilisez-le par System.env.ANDROID_HOME dans le fichier gradle.

PS: n'oubliez pas les mots-clés 'export' pour rendre l'ANDROID_HOME global.

Jindowin
la source
Il exportest important de noter le contenu de cette réponse. J'avais ANDROID_HOMEdéfini et j'ajoutais même cela PATH, mais si vous ne le faites pas export ANDROID_HOME, Gradle ne pourra pas le trouver.
lase
1

Votre fichier local.properties est peut-être manquant. Si c'est le cas, ajoutez un fichier nommé 'local.properties' dans /local.properties et indiquez l'emplacement du sdk comme suit.

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

kinath_ru
la source
1

J'ai défini ANDROID_HOME = [PATH_OF_MY_ANDROID_SDK] sur ma variable d'environnement. Cette solution fonctionne pour moi.

Pravin Abhale
la source
0

Je viens de résoudre exactement le même problème en ajoutant ANDROID_HOME en tant que variable à l'échelle du système. Dans Ubuntu, il devrait être dans / etc / profile ou dans un fichier de script shell dans /etc/profile.d/

Puis déconnectez-vous et reconnectez-vous, maintenant Gradle doit reconnaître la variable ANDROID_HOME.

Joe3112
la source
0

Je suis tombé sur un problème similaire. D'une manière ou d'une autre, je n'avais pas de dossier de construction dans mon projet. En copiant ce dossier d'un autre projet vers mon projet avec lequel j'avais un problème, cela a résolu ce problème.

Horatio
la source
0

L'installation de Build-Tools 23.0.1 au lieu de 23.0.2 a résolu ce problème pour moi.

TheBetterJORT
la source
0

solutions:

1 ajouter "sdk.dir = path_of_sdk"

2 exécutez gradlew avec la variable evn comme suit:

$ ANDROID_HOME = chemin_du_sdk ./gradlw

RoFF
la source
0

Vous avez dit que le contrôle de version local.properties vous posait des problèmes. J'ai piraté un script qui utilise l'outil de ligne de commande Android pour actualiser le fichier local.properties sur les machines impliquées dans la production. La commande de projet de mise à jour android , en plus de local.properties, produit beaucoup de déchets indésirables (du moins pour moi), ce qui est la raison de toutes ces commandes rm à la fin du script.

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

Ce script est la première chose que nous exécutons sur toute nouvelle machine sur laquelle nous codons. Il doit être exécuté dans le répertoire racine du projet. Bien sûr, Android Studio peut avoir une manière graphique de gérer cela, mais je ne le saurais pas car j'utilise un éditeur différent. Je ne peux pas non plus prétendre que la solution est générale, mais elle "fonctionne pour moi" (tm).

Mali Remorker
la source
0

J'ai été confronté au même problème sur Ubuntu (à la fois local.propertieset a ANDROID_HOMEété ajouté), mais l'échec de la construction a persisté. La solution de contournement consiste donc à ajouter les lignes suivantes

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

directement au studio.shscript (à l'intérieur /usr/local/android-studio/bin)

Ce sera peut-être utile.

Lukas
la source
0

J'ai rencontré la même erreur mais dans mon cas, je clonais un projet, le projet cloné a été construit avec l'API Android 22 que je n'ai pas installée à l'époque (j'avais les API 24 et 25 installées) ........ j'ai dû télécharger les outils sdk pour l'API 22

Didi Pepple
la source
0

Pour les fenêtres:

  1. Ajoutez ANDROID_HOME aux variables d'environnement: ANDROID_HOME = C: / Users / YOUR_USERNAME / AppData / Local / Android / sdk
  2. Ajoutez% ANDROID_HOME% \ platform-tools au PATH.
J. Jerez
la source
0

Sur mon système (Ubuntu 20.04 après deux mises à niveau de version à partir de 19.04), les symptômes étaient comme si gradle(4.4.1 installé à partir des dépôts APT) ignorait ANDROID_HOMEla variable d'environnement, tout en récupérant la sdk.dirvaleur delocal.properties si j'en avais créé une.

La raison semble avoir été cette javacommande mentionnée openjdk version "11.0.7". Après avoir installé le openjdk-8-jdkpackage et fait update-alternatives --config javapour que la javaversion par défaut soit la version 8 ( "1.8.0_252"), j'ai gradlecommencé à fonctionner comme prévu.

Ruslan
la source
-3

Cette question date de novembre 2013 (alors qu'Android Studio était toujours en mode Developer Preview),

Actuellement (AS v2.2, août 2016) pendant l'installation, AS demande à choisir le dossier SDK (ou à installer sur leur valeur par défaut) et il s'applique automatiquement à tout projet que vous ouvrez.

Cela signifie que toute solution de contournement ou correctif possible n'est pas pertinente car le problème n'est plus reproductible.

Budius
la source
C'est incorrect. J'essaie actuellement de résoudre le même problème, toujours pas de chance, j'ai essayé de nombreuses solutions possibles affichées ici.
AndroidDev