Como gerar o apk do Ionic no Linux

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:

android-studio.inicio

E por fim…

android-studio-final

No meu caso tive que instalar o SDK da versão 6.0 para conseguir dar build no projeto que foi criado em 2017.

android-studio-sdk

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:

build-sucesso

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 😛

Deixe uma resposta