Gradle, Android e la posizione dell'SDK ANDROID_HOME


152

modifica: (agosto 2016)

Tale domanda è del novembre 2013 (mentre Android Studio era ancora in modalità Anteprima sviluppatore),

Attualmente (AS v2.2, ago-2016) durante l'installazione AS chiede di scegliere la cartella SDK (o installarla sul valore predefinito) e si applica automaticamente a qualsiasi progetto venga aperto.

Ciò significa che qualsiasi possibile soluzione o correzione è irrilevante in quanto il problema non è più riproducibile.

domanda originale:

abbiamo questo progetto con diversi moduli che è già configurato ed eseguito correttamente su un altro PC sviluppatore usando un wrapper. Ho clonato i sottomoduli git completi nella mia macchina.

Di seguito è una stampa diretta della mia riga di comando:

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

quindi, come puoi vedere, ANDROID_HOME è lì. Cos'altro vogliono? Cosa c'è che non va qui.

in esecuzione su Ubuntu 13.04

modificare:

Ho già creato un file local.properties con sdk.dir=<path>sulla radice del progetto e funziona. Ma ciò rende il codice più difficile da trasferire su sistemi e server di build, quindi la domanda è ancora aperta.

Qualcuno sa perché ANDROID_HOME non funziona e cosa fare per farlo funzionare?


1
Prova a specificare il percorso del tuo SDK in un file local.properties, nella directory principale del tuo progetto. Il file dovrebbe avere questo: sdk.dir = <sdk_install_dir>
Gabriele Mariotti

1
Ciao @GabrieleMariotti grazie per il suggerimento. Ma l'ho già fatto e funziona. Ma ciò rende il codice più difficile da trasferire su sistemi e server di build. Vorrei sapere se qualcuno sa perché ANDROID_HOME non funziona e cosa fare per farlo funzionare? Ho aggiunto questo pezzo di informazioni alla domanda.
Budius,

Ti suggerisco di pubblicare post in questa community G +. plus.google.com/communities/114791428968349268860 È una community Google ufficiale. Di solito il team di Google risponde rapidamente.
Gabriele Mariotti,

si, ci proverò. Grazie!
Budius,

2
@Budius Ho avuto un caso simile con il messaggio di errore. La soluzione era aggiungere il settings.gradlefile alla cartella del progetto.
JJD

Risposte:


94

Ho risolto il problema. Questo funziona per me:

Nel

/ My_current_project /

Ho creato un file chiamato local.properties e messo dentro

sdk.dir = / my_current_path_to / sdk

Nella console che devo fare

impostare ANDROID_HOME = / my_current_path_to / sdk

Spero che questo ti aiuti.


8
Non risolve il problema perché i file local.properties devono essere "Local" e non in versione. (Stesso problema di Budius: voglio che questo file local.properties nel mio laptop crei build durante lo sviluppo, ma non voglio questo file nella mia macchina build perché il percorso sdks non è lo stesso!)
Tobliug

7
Almeno su Windows ha funzionato dopo la barra rovesciata sdk.dir = D: \\ Soft \\ adt-bundle-windows-x86_64-20140702 \\ sdk
Cheburek

@Tobulug: puoi controllare quali file sono sotto il controllo della versione e non aggiungere o deselezionare i file locali
sivi

Usando export invece di set correggilo.
agosto

1
il set era sbagliato, uso export . Ma in questo modo, se esporti questa variabile, non hai bisogno del file local.properties nella tua cartella Projekt. Per mantenere questa impostazione ad ogni riavvio, aggiungi il comando export al tuo ~ / .bashrc
suther

52

Su OSX , IntelliJ non raccoglierà le variabili d'ambiente impostate nel tuo .bash_profile o .bash_rc ecc ...

Prova questo, sostituendo il valore della tua posizione sdk:

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

Quindi riavvia IntelliJ e Bob è tuo zio.

Ecco un riferimento al problema, dichiarato più in generale: https://emmanuelbernard.com/blog/2012/05/09/setting-global-variables-intellij/


4
Cordiali saluti questa soluzione è per osx.
Matthew Daumen,

4
Sì, ho lavorato per me su elcapitan. launchctl setenv ANDROID_HOME ~/Library/Android/sdk
agmcleod,

2
Oppure puoi semplicemente eseguire il proxy delle variabili di ambiente come launchctl setenv ANDROID_HOME $ANDROID_HOMEe launchctl setenv JAVA_HOME $JAVA_HOME
Vagif

Cordiali saluti, per OSX questa correzione aiuta anche per la compilazione della riga di comando tramite gradle, quando si verifica lo stesso errore mentre si utilizza shell diversa da bash (ad esempio zsh). Basta eseguire questo comando e riavviare la finestra del terminale.
interrompere il

30

Nel mio caso settings.gradlemancava.

Salva il file e inseriscilo nella cartella di livello superiore del tuo progetto, anche tu puoi copiarlo da un altro progetto.

Schermata di riferimento:

inserisci qui la descrizione dell'immagine

Spero che questo ti faccia risparmiare tempo.


Oppure qualcuno non ha aggiunto il tuo sottomodulo al file settings.gradle. Avevo un junior nel nostro team che non ha fatto questo dopo aver aggiunto un sottomodulo. Non sono sicuro di come sia configurato il loro IntellIJ ma questo ha sprecato una quantità non banale del mio tempo.
Stevers,

25

Questo funziona per me:

$ export ANDROID_HOME=/path_to_sdk/
$ ./gradlew

1
puoi anche aggiungere questa riga "export" sopra al tuo ~ / .bashrc o ~ / .bash_profile per renderlo permanente anche dopo il riavvio.
Suther,

19

Il plug-in Android Gradle è ancora in versione beta e questo potrebbe semplicemente essere un bug. Per me, l'impostazione ANDROID_HOME funziona, ma potremmo trovarci su versioni diverse (riprova con la versione più recente e fammi sapere se funziona o meno).

Vale anche la pena impostare la variabile di ambiente ANDROID_SDK e ANDROID_HOME.

Ho riscontrato problemi con questo su alcuni computer, quindi in questi casi creiamo local.properties: ho anche notato che l'ultima versione di Android Studio creerà questo file per te e compilerà la proprietà sdk.dir.

Nota che non dovresti controllare local.properties nel controllo della versione, l'abbiamo aggiunto al nostro gitignore in modo che non interferisca con il porting del codice su sistemi che hai giustamente identificato come potenziale problema.


2
La definizione di ANDROID_SDK non ha fatto nulla per me.
Heath Borders,

Quale versione di Gradle e del plug-in Android stai utilizzando e hai un file local.properties?
ZoFreX,

2
aggiungendo ha sdk.dir=/path/to/android/sdkfunzionato per me. Sto facendo il gradle come parte di un progetto creato con IntelliJ 13.0.2
Heath Borders,

Sembra che questo sia un bug di IntelliJ. youtrack.jetbrains.com/issue/IDEA-119361
Heath Borders

Potrebbe esserci anche un bug in IntelliJ o Android Studio, ma la domanda originale era sull'uso di Gradle dalla riga di comando, che sembra avere un suo bug (potrebbe essere o meno correlato al problema che stai vedendo). Modifica: Inoltre, sul mio sistema IntelliJ non eredita le variabili di ambiente dalla riga di comando, quale potrebbe essere il tuo problema?
ZoFreX

16

Per qualsiasi motivo, lo script gradle non sta rilevando il valore di ANDROID_HOME dall'ambiente. Prova a specificarlo esplicitamente nella riga di comando

$ ANDROID_HOME=<sdk location> ./gradlew

1
Qualcosa è traballante, funziona per ANDROID_HOME ma non funziona per ANDROID_NDK_HOME. Ho dovuto usare local.properties per quest'ultimo.
Andrew Smart,

Questa soluzione alternativa non fa nulla per me (in un contenitore docker).
IgorGanapolsky,

14

Ho riscontrato lo stesso problema, anche se avevo il file local.properties nel mio modulo principale e la variabile di ambiente ANDROID_HOME impostata a livello di sistema.

Ciò che ha risolto questo problema è stato quando ho copiato il file local.properties che si trovava nel mio modulo di progetto principale nella radice dell'intero progetto (ovvero la directory principale del tuo modulo principale)

Prova a copiare il file local.properties all'interno dei moduli e della directory principale. Dovrebbe funzionare.


1
Ho pensato che il file local.properties sia generato automaticamente dall'IDE. Perché è necessario copiare o spostare manualmente questo file in altre directory?
IgorGanapolsky,

13

Mi sono imbattuto nello stesso problema quando ho aperto un repository git clonato. Il file local.properties viene automaticamente aggiunto al file .gitignore in quanto è specifico per l'ambiente di compilazione di ogni macchina e quindi non fa parte del repository.

La soluzione è importare il progetto invece di aprirlo solo dopo averlo clonato da git, questo costringe Android Studio a creare il file local.properties specifico per il tuo computer:

File >> Importa progetto >>


12

MAC OSX:

  1. Apri Terminale e modifica il file:

~/.bash_profile

aggiungere:

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

  1. Correre:

    source ~/.bash_profile

  2. Riavvia il terminale e Android Studio


8

Come farlo su MAC OSX:

1) Apri Terminale e Modifica: vi ~/.bash_profilese non ci sono file, aggiungilo.

2) Aggiungi (cambia in NOME UTENTE e aggiungi questo):

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

3) Esegui source ~/.bash_profile.

4) Esegui echo $JAVA_HOME; echo $ANDROID_HOME;

5) Se l'output è:

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

Quindi sei bravo.

e RIAVVIA studio Android!

E, assicurati di avere java :)

java -version

E grado :)

gradle --version


penso che ti manchi:export ANDROID_HOME
A Kra il

1
Ho impostato ANDROID_HOMEe quindi eseguito source ~/.bash_profile, questo è permeant (eseguire sourceè buono se non si desidera disconnettersi e accedere o riavviare). Nel tuo caso, con export ANDROID_HOME, dopo un riavvio o un accesso, la variabile di ambiente ANDROID_HOMEin mac sparirà.
Nimitack,


4

Questo ha funzionato per me (Ubuntu):

Aggiungi ANDROID_HOME=/path/to/android-sdka/etc/environment .

Reboot.


Sono rimasto perplesso su questa cosa per giorni e solo questa cosa ha funzionato. Grazie Signore.
Zygro,

3

in Windows, ho impostato ANDROID_HOME = E: \ android \ adt-bundle-windows-x86_64-20131030 \ sdk Quindi funziona come previsto.

In Linux, è necessario impostare sdk.dir.

Lo script utilizza due diverse variabili.


1
L'ho aggiunto, aggiunto nel file location.properties ma ancora affrontando lo stesso problema
Suneel Prakash

1
Su Windows, assicurati di sfuggire alle barre rovesciate nel percorso. Ho dovuto entrare nel percorso comesdk.dir=C:\\Users\\username\\AppData\\Local\\Android\\Sdk
Xsasan,

2

Ho lo stesso problema, sembra che il codice di esempio non riesca a trovare l'ambiente Android, invece di provare a risolvere il problema basta rimuovere il codice di esempio da settings.gradle e quindi l'installazione va bene.

dopodiché basta importare il progetto in eclissi e basta :)


2

In Linux, prova a eseguire studio.sh da un terminale e imposta ANDROID_HOME in questo terminale. Questo ha funzionato per me.


2

Se stai utilizzando Windows Plantform, prova ad eseguire Android Studio come amministratore


1

Basta eliminare sdk.dir all'interno del file local.preoperties e impostare la variabile di ambiente ANDROID_HOME . Ha funzionato per me.


Il file local.properties viene generato automaticamente dall'IDE. Dovrebbe essere manomesso?
IgorGanapolsky,

1

esportare ANDROID_HOME = / xxx / xxx / nella shell, quindi usarlo da System.env.ANDROID_HOME nel file gradle.

PS: non dimenticare le parole chiave "export" per rendere ANDROID_HOME globale.


Il exportin questa risposta è importante notare. Avevo ANDROID_HOMEdefinito e lo stavo persino aggiungendo a PATH, ma se non lo fai export ANDROID_HOME, Gradle non sarà in grado di trovarlo.
Lase

1

Il tuo file local.properties potrebbe mancare. In tal caso aggiungere un file denominato 'local.properties' all'interno di /local.properties e fornire la posizione sdk come segue.

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


1

Ho impostato ANDROID_HOME = [PATH_OF_MY_ANDROID_SDK] sulla mia variabile di ambiente. Quella soluzione funziona per me.


0

Ho appena risolto lo stesso identico problema aggiungendo ANDROID_HOME come variabile di sistema. In Ubuntu dovrebbe essere in / etc / profile o in un file di script shell in /etc/profile.d/

Quindi disconnettersi e accedere nuovamente, ora Gradle dovrebbe riconoscere la variabile ANDROID_HOME.


0

Mi sono imbattuto in un problema simile. In qualche modo, non avevo una cartella di build nel mio progetto. Copiando questa cartella da un altro progetto al mio progetto con cui avevo riscontrato un problema, questo risolveva questo problema.


0

L'installazione di Build-Tools 23.0.1 anziché 23.0.2 ha risolto questo problema per me.


0

soluzioni:

1 aggiungi "sdk.dir = path_of_sdk"

2 esegui gradlew con la variabile evn come segue:

$ ANDROID_HOME = path_of_sdk ./gradlw


0

Hai detto che il versioning local.properties ti crea problemi. Ho hackerato insieme uno script che utilizza lo strumento da riga di comando Android per aggiornare il file local.properties tra le macchine coinvolte nella produzione. Il comando del progetto di aggiornamento Android , oltre a local.properties, produce un sacco di spazzatura indesiderata (almeno per me) che è la ragione di tutti quei comandi rm alla fine dello 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"

Questo script è la prima cosa che eseguiamo su qualsiasi nuova macchina in cui codifichiamo. Deve essere eseguito nella directory principale del progetto. Ovviamente, Android Studio potrebbe avere un modo GUI di gestirlo, ma non lo saprei poiché uso un editor diverso. Inoltre, non posso affermare che la soluzione sia generale, ma "Funziona per me" (tm).


0

Ho affrontato lo stesso problema su Ubuntu (entrambi local.propertiesed è ANDROID_HOMEstato aggiunto), ma la build non è riuscita. Quindi la soluzione è aggiungere le seguenti righe

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

direttamente allo studio.shscript (all'interno /usr/local/android-studio/bin)

Forse sarà utile.


0

ho riscontrato lo stesso errore ma nel mio caso stavo clonando un progetto, il progetto clonato è stato realizzato con l'API 22 di Android che non avevo installato al momento (avevo installato l'API 24 e 25) ........ così ho dovuto scaricare gli strumenti SDK per API 22


0

Per Windows:

  1. Aggiungi ANDROID_HOME alle variabili di ambiente: ANDROID_HOME = C: / Users / YOUR_USERNAME / AppData / Local / Android / sdk
  2. Aggiungi% ANDROID_HOME% \ platform-tools al PERCORSO.

0

Sul mio sistema (Ubuntu 20.04 dopo due aggiornamenti di versione dal 19.04) i sintomi erano come se gradle(4.4.1 installato dai repository APT) ignorasse ANDROID_HOMEla variabile d'ambiente, mentre ne prendevo il sdk.dirvalore local.propertiesse ne avessi creato uno.

Il motivo sembrava essere stato quel javacomando cui si fa riferimento openjdk version "11.0.7". Dopo aver installato il openjdk-8-jdkpacchetto e fatto update-alternatives --config javache l'impostazione predefinita javafosse la versione 8 ( "1.8.0_252"), ho gradleiniziato a funzionare come previsto.


-3

Tale domanda è del novembre 2013 (mentre Android Studio era ancora in modalità Anteprima sviluppatore),

Attualmente (AS v2.2, ago-2016) durante l'installazione AS chiede di scegliere la cartella SDK (o installarla sul valore predefinito) e si applica automaticamente a qualsiasi progetto venga aperto.

Ciò significa che qualsiasi possibile soluzione o correzione è irrilevante in quanto il problema non è più riproducibile.


Non è corretto Attualmente sto cercando di risolvere lo stesso problema, ancora senza fortuna, ho provato molte possibili soluzioni pubblicate qui.
AndroidDev
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.