Gradle, Android e o local do ANDROID_HOME SDK

152

editar: (ago-2016)

Essa pergunta é de novembro de 2013 (enquanto o Android Studio ainda estava no modo de visualização do desenvolvedor),

Atualmente (AS v2.2, agosto de 2016) durante a instalação, o AS pede para escolher a pasta SDK (ou instalar por padrão) e se aplica automaticamente a qualquer projeto que você esteja abrindo.

Isso significa que qualquer solução ou solução possível é irrelevante, pois o problema não é mais reproduzível.

pergunta original:

temos este projeto com vários módulos que já estão configurados e executados corretamente em outro PC de desenvolvedor usando um wrapper. Eu clonei os submódulos completos do git na minha máquina.

Abaixo está uma impressão direta da minha linha de 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
$ 

então, como você pode ver, o ANDROID_HOME está lá. O que mais eles querem? O que há de errado aqui.

rodando no Ubuntu 13.04

editar:

Eu já criei um arquivo local.properties sdk.dir=<path>na raiz do projeto e ele funciona. Mas isso dificulta a portabilidade do código entre os sistemas e cria o servidor, então a questão ainda está em aberto.

Alguém sabe por que o ANDROID_HOME não está funcionando e o que fazer para fazê-lo funcionar?

Budius
fonte
1
Tente especificar o caminho do seu SDK em um arquivo local.properties, no diretório raiz do seu projeto. O arquivo deve ter o seguinte: sdk.dir = <sdk_install_dir>
Gabriele Mariotti
1
Olá @GabrieleMariotti obrigado pela sugestão. Mas eu já fiz isso e funciona. Mas isso torna o código mais difícil de transportar entre sistemas e criar servidor. Gostaria de saber se alguém sabe por que o ANDROID_HOME não está funcionando e o que fazer para fazê-lo funcionar? Eu adicionei este pouco de informação à pergunta.
Budius
Sugiro que você publique nesta comunidade do G +. plus.google.com/communities/114791428968349268860 É uma comunidade oficial do Google. Normalmente, a equipe do Google responde rapidamente.
Gabriele Mariotti
Sim, eu vou experimentá-los. Obrigado!
Budius
2
@Budius Eu tive um caso semelhante com a mensagem de erro. A solução foi adicionar o settings.gradlearquivo à pasta do projeto.
JJD

Respostas:

94

Eu resolvi o problema. Isso funciona para mim:

No

/ my_current_project /

Eu criei um arquivo chamado local.properties e coloquei dentro

sdk.dir = / meu_caminho_corrente_para / sdk

No console eu preciso fazer

definir ANDROID_HOME = / my_current_path_to / sdk

Espero que isto ajude.

u53r
fonte
8
Não corrige o problema, porque os arquivos local.properties devem ser "Local" e não estar sob versão. (Mesmo problema que o Budius: quero que este arquivo local.properties no meu laptop crie build durante o desenvolvimento, mas não quero esse arquivo na minha máquina de build porque o caminho do sdks não é o mesmo!)
Tobliug
7
Pelo menos no Windows funcionou após backslashing corda sdk.dir = D: \\ macias \\ ADT-bundle-windows-x86_64-20140702 \\ SDK
Cheburek
@Tobulug: você pode controlar quais arquivos sob controle de versão e não adicionar ou desmarque os arquivos locais
sivi
Usando exportar em vez de definir, conserte
AugustoL 18/07/16
1
conjunto estava errado, eu uso exportação . Mas, dessa maneira, se você exportar essa variável, não precisará do arquivo local.properties na sua pasta Projekt. Para manter esta definição em cada reinicialização, adicione o export-commad ao seu ~ / .bashrc
Suther
52

No OSX , o IntelliJ não seleciona as variáveis ​​de ambiente definidas no seu .bash_profile ou .bash_rc, etc ...

Tente isso, substituindo o valor do seu próprio local sdk:

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

Em seguida, reinicie o IntelliJ e Bob é seu tio.

Aqui está uma referência ao problema, declarada de maneira mais geral: https://emmanuelbernard.com/blog/2012/05/09/setting-global-variables-intellij/

Matthew Daumen
fonte
4
Para sua informação, esta solução é para osx.
Matthew Daumen
4
Sim, trabalhou para mim no elcapitan. launchctl setenv ANDROID_HOME ~/Library/Android/sdk
agmcleod
2
Ou você pode simplesmente procuração suas variáveis de ambiente como launchctl setenv ANDROID_HOME $ANDROID_HOMEe launchctl setenv JAVA_HOME $JAVA_HOME
Vagif
Apenas para sua informação, para o OSX essa correção também ajuda na construção da linha de comando via gradle, quando o mesmo erro ocorre enquanto você estiver usando o shell que não seja o bash (zsh por exemplo). Basta executar este comando e reiniciar a janela do terminal.
interrompa
30

No meu caso settings.gradleestava faltando.

Salve o arquivo e coloque-o na pasta de nível superior do seu projeto, mesmo que você possa copiar de outro projeto também.

Referência da captura de tela:

insira a descrição da imagem aqui

Espero que isso economize seu tempo.

Hiren Patel
fonte
Ou alguém não adicionou seu submódulo ao arquivo settings.gradle. Eu tinha um júnior na nossa equipe que não fez isso depois de adicionar um submódulo. Não tenho certeza de como o IntellIJ está configurado, mas isso desperdiçou uma quantidade não trivial do meu tempo.
Stevers 17/02
25

Isso funciona para mim:

$ export ANDROID_HOME=/path_to_sdk/
$ ./gradlew
giopromolla
fonte
1
você também pode adicionar a linha "export" acima ao seu ~ / .bashrc ou ~ / .bash_profile para torná-lo permanente, mesmo após a reinicialização.
Suther 26/06/18
19

O plugin Android Gradle ainda está na versão beta e isso pode ser simplesmente um bug. Para mim, definir ANDROID_HOME funciona, mas podemos estar em versões diferentes (tente novamente com a versão mais recente e deixe-me saber se funciona ou não).

Também vale a pena definir a variável de ambiente ANDROID_SDK e ANDROID_HOME.

Eu já vi problemas com isso em algumas máquinas, por isso criamos local.properties nesses casos - também notei que a versão mais recente do Android Studio criará esse arquivo para você e preencherá a propriedade sdk.dir.

Observe que você não deve verificar local.properties no controle de versão, nós o adicionamos ao nosso gitignore para que não interfira na portabilidade do código nos sistemas que você identificou como um problema em potencial.

ZoFreX
fonte
2
Definir ANDROID_SDK não fez nada por mim.
Heath Borders
Qual versão do Gradle e o plug-in do Android você está usando e você tem um arquivo local.properties?
ZoFreX
2
adicionando sdk.dir=/path/to/android/sdkfuncionou para mim. Estou correndo Gradle como parte de um projeto criado com IntelliJ 13.0.2
Heath Borders
Parece que este é um erro do IntelliJ. youtrack.jetbrains.com/issue/IDEA-119361
Heath Borders
Também pode haver um bug no IntelliJ ou no Android Studio, mas a pergunta original era sobre o uso do Gradle na linha de comando, que parece ter seu próprio bug (pode ou não estar relacionado ao problema que você está vendo). Edit: Além disso, no meu sistema, o IntelliJ não herda variáveis ​​de ambiente da linha de comando, o que pode ser seu problema?
ZoFreX
16

Por qualquer motivo, o script gradle não está captando o valor de ANDROID_HOME do ambiente. Tente especificá-lo na linha de comando explicitamente

$ ANDROID_HOME=<sdk location> ./gradlew
Andrew Marshall
fonte
1
Algo está errado - isso funciona para ANDROID_HOME, mas não funciona para ANDROID_NDK_HOME. Eu tive que usar local.properties para o último.
Andrew Smart
Esta solução alternativa não faz nada para mim (em um contêiner de janela de encaixe).
IgorGanapolsky
14

Eu enfrentei o mesmo problema, embora eu tivesse o arquivo local.properties no meu módulo principal e a variável de ambiente ANDROID_HOME definida no nível do sistema.

O que corrigiu esse problema foi quando copiei o arquivo local.properties que estava no meu módulo principal do projeto para a raiz de todo o projeto (ou seja, o pai do diretório no seu módulo principal)

Tente copiar o arquivo local.properties dentro dos módulos e no diretório raiz. Deveria trabalhar.

joecizac
fonte
1
Eu pensei que o arquivo local.properties é gerado automaticamente pelo IDE. Por que a necessidade de copiar ou mover manualmente esse arquivo para outros diretórios?
IgorGanapolsky
13

Me deparei com o mesmo problema ao abrir um repositório git clonado. O arquivo local.properties é adicionado automaticamente ao arquivo .gitignore, pois é específico para o ambiente de construção de cada máquina e, portanto, não faz parte do repositório.

A solução é importar o projeto, em vez de apenas abri-lo após a clonagem do git, isso força o android studio a criar o arquivo local.properties específico para sua máquina:

Arquivo >> Importar projeto >>

Bulwinkel
fonte
12

MAC OS X:

  1. Abra o Terminal e edite o arquivo:

~/.bash_profile

adicionar:

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

  1. Corre:

    source ~/.bash_profile

  2. Reinicie o Terminal e o Android Studio

Javier Armendariz
fonte
8

Como fazer isso no MAC OSX:

1) Abra o Terminal e edite: vi ~/.bash_profilese não houver arquivo, basta adicioná-lo.

2) Adicionar (mude para SEU NOME DE USUÁRIO e adicione este):

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

3) Corra source ~/.bash_profile.

4) Executar echo $JAVA_HOME; echo $ANDROID_HOME;

5) Se sua saída for:

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

Então você é bom.

e reinicie o android studio!

E, verifique se você tem java :)

java -version

And gradle :)

gradle --version

Nimitack
fonte
em acho que está faltando:export ANDROID_HOME
para Kra 07/11
1
Defino ANDROID_HOMEe, em seguida source ~/.bash_profile, executo , isso é permeante (executar sourceé bom se você não quiser fazer logout, logon ou reinicialização). No seu caso, export ANDROID_HOMEapós uma reinicialização ou login, a variável de ambiente ANDROID_HOMEno mac desaparecerá.
Nimitack 7/11
7

Copie o local.properties para a pasta raiz e execute novamente.

Santiago Medina Chaverra
fonte
4

Isso funcionou para mim (Ubuntu):

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

Reinicie.

homem comum
fonte
Fiquei perplexo com isso por dias e apenas isso funcionou. Obrigado senhor.
Zygro 28/09/19
3

no windows, defino ANDROID_HOME = E: \ android \ adt-bundle-windows-x86_64-20131030 \ sdk Então, ele funciona como esperado.

No Linux, você precisa definir o sdk.dir.

O script usa duas variáveis ​​diferentes.

Richard
fonte
1
Eu adicionei-lo, acrescentou em arquivo location.properties mas ainda enfrentando mesmo problema
Suneel Prakash
1
No Windows, certifique-se de escapar das barras invertidas no caminho. Eu tive que entrar no caminho de comosdk.dir=C:\\Users\\username\\AppData\\Local\\Android\\Sdk
Xsasan
2

Eu tenho o mesmo problema, parece que o código de amostra não consegue encontrar o ambiente android, em vez disso, para tentar corrigir o problema, removo o código de amostra de settings.gradle e a instalação é boa.

depois disso basta importar o projeto no eclipse e é tudo :)

Guillermo Gutiérrez
fonte
2

No Linux, tente executar o studio.sh a partir de um terminal e defina o ANDROID_HOME neste terminal. Isso funcionou para mim.

Naren
fonte
2

Se você estiver usando o Windows Plantform, tente executar o Android Studio como administrador

Megoc
fonte
1

Basta apagar a sdk.dir dentro do arquivo local.preoperties e definir o ANDROID_HOME variável de ambiente. Funcionou para mim.

PraveenMax
fonte
O arquivo local.properties é gerado automaticamente pelo IDE. Deve ser adulterado?
IgorGanapolsky
1

exporte ANDROID_HOME = / xxx / xxx / no shell e use-o por System.env.ANDROID_HOME no arquivo gradle.

PS: não esqueça as palavras-chave 'export' para tornar o ANDROID_HOME global.

Jindowin
fonte
O exportimportante nesta resposta é importante observar. Eu tinha ANDROID_HOMEdefinido, e estava adicionando isso a PATH, mas se não o fizer export ANDROID_HOME, gradle não será capaz de encontrá-lo.
lase
1

Seu arquivo local.properties pode estar ausente. Nesse caso, adicione um arquivo chamado 'local.properties' dentro de /local.properties e forneça o local sdk da seguinte maneira.

sdk.dir = C: \ Usuários \\ AppData \ Local \ Android \ Sdk

kinath_ru
fonte
1

Eu configurei o ANDROID_HOME = [PATH_OF_MY_ANDROID_SDK] para minha variável de ambiente. Essa solução funciona para mim.

Pravin Abhale
fonte
0

Acabei de resolver o mesmo problema adicionando o ANDROID_HOME como uma variável de todo o sistema. No Ubuntu, ele deve estar em / etc / profile ou em um arquivo de script de shell em /etc/profile.d/

Em seguida, efetue logout e login novamente, agora o Gradle deve reconhecer a variável ANDROID_HOME.

Joe3112
fonte
0

Me deparei com um problema semelhante. De alguma forma, eu não tinha uma pasta de compilação no meu projeto. Ao copiar esta pasta de outro projeto para o meu projeto, eu estava tendo um problema, isso corrigia o problema.

Horatio
fonte
0

Instalar o Build-Tools 23.0.1 em vez de 23.0.2 corrigiu esse problema para mim.

TheBetterJORT
fonte
0

soluções:

1 adicione "sdk.dir = caminho_de_sdk"

2 execute gradlew com a variável evn como a seguir:

$ ANDROID_HOME = caminho_de_sdk ./gradlw

RoFF
fonte
0

Você disse que o controle de versão local.properties cria problemas para você. Eu hackeei um script que usa a ferramenta de linha de comando do Android para atualizar o arquivo local.properties nas máquinas envolvidas na produção. o comando android update project , além do local.properties produz muito lixo indesejado (pelo menos para mim), que é o motivo de todos esses comandos rm no final do 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"

Esse script é a primeira coisa que executamos em qualquer nova máquina onde codificamos. Ele deve ser executado no diretório raiz do projeto. Obviamente, o Android Studio pode ter uma maneira GUI de lidar com isso, mas eu não saberia se eu usasse um editor diferente. Também não posso afirmar que a solução é geral, mas "funciona para mim" (tm).

Mali Remorker
fonte
0

Eu enfrentei o mesmo problema no Ubuntu (ambos local.propertiese ANDROID_HOMEfoi adicionado), mas a falha de compilação persistiu. Portanto, a solução alternativa é adicionar as seguintes linhas

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

diretamente para o studio.shscript (dentro/usr/local/android-studio/bin )

Talvez seja útil.

Lukas
fonte
0

Encontrei o mesmo erro, mas no meu caso eu estava clonando um projeto, o projeto clonado foi criado com a API 22 do Android, que eu não instalei no momento (eu tinha a API 24 e 25 instaladas) ........ eu tive que baixar as ferramentas sdk para API 22

Didi Pepple
fonte
0

Para Windows:

  1. Adicione ANDROID_HOME às variáveis ​​de ambiente: ANDROID_HOME = C: / Users / YOUR_USERNAME / AppData / Local / Android / sdk
  2. Adicione% ANDROID_HOME% \ platform-tools ao PATH.
J. Jerez
fonte
0

No meu sistema (Ubuntu 20.04 após duas atualizações de versão a partir do 19.04), os sintomas eram como se gradle(4.4.1 instalado a partir de repositórios APT) ignorasse ANDROID_HOMEa variável de ambiente, enquanto pegava o sdk.dirvalor emlocal.properties se eu criei uma.

O motivo parecia ter sido esse javacomando mencionado openjdk version "11.0.7". Depois de instalar o openjdk-8-jdkpacote e fazer update-alternatives --config javacom que o padrão javaseja a versão 8 ( "1.8.0_252"), gradlecomecei a funcionar conforme o esperado.

Ruslan
fonte
-3

Essa pergunta é de novembro de 2013 (enquanto o Android Studio ainda estava no modo de visualização do desenvolvedor),

Atualmente (AS v2.2, agosto de 2016) durante a instalação, o AS pede para escolher a pasta SDK (ou instalar por padrão) e se aplica automaticamente a qualquer projeto que você esteja abrindo.

Isso significa que qualquer solução ou solução possível é irrelevante, pois o problema não é mais reproduzível.

Budius
fonte
Isso está incorreto. Atualmente, estou tentando resolver o mesmo problema, ainda sem sorte, tentei muitas soluções possíveis postadas aqui.
AndroidDev