No ano de 2017 peguei um desafio para desenvolver um aplicativo multiplataforma (android e ios). No estudo inicial algumas possibilidades foram levantadas e optei pelo Ionic!
Algo que me chamou atenção desde do início foi a dificuldade em configurar o ambiente de desenvolvimento. 3 anos depois e continuo com esse mesmo problema… 🙄
Conflitos com versão do Ionic, Angular, Node são uma realidade. E nesse post irei apresentar como executar o comando abaixo com sucesso.
ionic cordova build android
Lembrando que já estou conseguindo executar o meu projeto através do comando:
ionic serve --lab
Porém para geração do APK a seguinte exceção é gerada:
You have been opted out of telemetry. To change this, run: cordova telemetry on. (node:6052) UnhandledPromiseRejectionWarning: CordovaError: Failed to find 'ANDROID_HOME' environment variable. Try setting setting it manually. Failed to find 'android' command in your 'PATH'. Try update your 'PATH' to include path to valid SDK directory. at /home/karanalpe/desenvolvimento/git/calibra/platforms/android/cordova/lib/check_reqs.js:300:19 at _fulfilled (/home/karanalpe/desenvolvimento/git/calibra/platforms/android/cordova/node_modules/q/q.js:854:54) at /home/karanalpe/desenvolvimento/git/calibra/platforms/android/cordova/node_modules/q/q.js:883:30 at Promise.promise.promiseDispatch (/home/karanalpe/desenvolvimento/git/calibra/platforms/android/cordova/node_modules/q/q.js:816:13) at /home/karanalpe/desenvolvimento/git/calibra/platforms/android/cordova/node_modules/q/q.js:877:14 at runSingle (/home/karanalpe/desenvolvimento/git/calibra/platforms/android/cordova/node_modules/q/q.js:137:13) at flush (/home/karanalpe/desenvolvimento/git/calibra/platforms/android/cordova/node_modules/q/q.js:125:13) at processTicksAndRejections (internal/process/next_tick.js:74:9) (node:6052) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 1) (node:6052) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code
Não sei o motivo mas a documentação oficial do ionic versão 3 não existe um guia de instalação para linux. Irei usar como referência o do OSX para tentar resolver este problema. Para realizar esse procedimento precisamos desses 3 itens instalados e configurados (Java, Android Studio e SDK Android).
Java
Certifique-se o java já está instalado:
java -version
Se a seguinte mensagem for apresentada: The program 'java' can be found in the following packages
execute o comando abaixo para instalar o JDK.
sudo apt-get install default-jdk
Agora a resposta do terminal mudou:
karanalpe@karanalpe-not ~ $ java -version openjdk version "1.8.0_191" OpenJDK Runtime Environment (build 1.8.0_191-8u191-b12-2ubuntu0.16.04.1-b12) OpenJDK 64-Bit Server VM (build 25.191-b12, mixed mode)
Android Studio
Acesse o site do android studio e baixe a última versão.
Ao concluir um arquivo .zip estará disponível. Extraia o conteúdo em uma pasta de preferência.
Android SDK
Para instalar o SDK acesse a pasta onde foi extraído o arquivo e execute o Android Studio conforme comando abaixo:
karanalpe@karanalpe-not ~/desenvolvimento $ cd android-studio/ karanalpe@karanalpe-not ~/desenvolvimento/android-studio $ cd bin/ karanalpe@karanalpe-not ~/desenvolvimento/android-studio/bin $ ./studio.sh
Ao executá-lo a relação a seguir será instalada:
E por fim…
No meu caso tive que instalar o SDK da versão 6.0 para conseguir dar build no projeto que foi criado em 2017.
Configurando ambiente
Para que o processo de build funcione de maneira correta é necessário criar as variáveis:
- JAVA_HOME
- ANDROID_HOME
- GRADLE_HOME
E adicioná-las no PATH. Execute o comando abaixo no console:
sudo nano ~/.bashrc
No final do arquivo adicione as seguintes linhas:
export JAVA_HOME="/usr/lib/jvm/java-8-openjdk-amd64" export ANDROID_HOME="~/Android/Sdk" export GRADLE_HOME="~/desenvolvimento/android-studio/gradle/gradle-4.10.1" export PATH="$PATH:$JAVA_HOME:$ANDROID_HOME/platform-tools:$ANDROID_HOME/tools:$GRADLE_HOME/bin"
ATENÇÃO: Se atente aos diretórios correspondentes da sua máquina!!!
Aperte Ctrl + X para fechar, Y para confirmar e ENTER para sair.
Digite o comando abaixo para recarregar o .bashrc:
sudo source ~/.bashrc
Vamos verificar se o console irá apresentar as variáveis configuradas:
karanalpe@karanalpe-not ~/desenvolvimento/git/calibra $ echo $JAVA_HOME /usr/lib/jvm/java-8-openjdk-amd64 karanalpe@karanalpe-not ~/desenvolvimento/git/calibra $ echo $ANDROID_HOME ~/Android/Sdk karanalpe@karanalpe-not ~/desenvolvimento/git/calibra $ echo $GRADLE_HOME ~/desenvolvimento/android-studio/gradle/gradle-4.10.1 karanalpe@karanalpe-not ~/desenvolvimento/git/calibra $ echo $PATH /home/karanalpe/bin:/home/karanalpe/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:~/Android/Sdk/platform-tools:~/Android/Sdk/tools:~/desenvolvimento/android-studio/gradle/gradle-4.10.1/bin:/usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java:~/Android/Sdk/platform-tools:~/Android/Sdk/tools:~/desenvolvimento/android-studio/gradle/gradle-4.10.1/bin:/usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java:~/Android/Sdk/platform-tools:~/Android/Sdk/tools:~/desenvolvimento/android-studio/gradle/gradle-4.10.1/bin:/usr/lib/jvm/java-8-openjdk-amd64:~/Android/Sdk/platform-tools:~/Android/Sdk/tools:~/desenvolvimento/android-studio/gradle/gradle-4.10.1/bin
Testando
Acesse o diretório do seu projeto exclua a pasta node_modules e baixe novamente as dependências:
npm install
Execute novamente o build:
ionic cordova build android
Shazam:
Concluindo
Caso você tenha seguido esse “tutorial” e o problema persista, verifique novamente os passos. A falta de um bendito “:” pode gerar gerar erros.
Já tive problemas ao instalar as dependências e executar o build utilizando o sudo. EVITE!
#ficadica e até a próxima 😛