domingo, 20 de outubro de 2013

Curso de Criação de Apps Móveis com PhoneGap e jQuery Mobile - Kit de sobrevivência


Se alguma coisa puder dar errado, dará! Então, para solucionar possíveis problemas, temos esse "Kit de sobrevivência", com algumas dicas para os problemas mais comuns com a plataforma PhoneGap / Cordova.




Kit de primeiros socorros da plataforma Android
Cleuton Sampaio


A comunicação do Android SDK com o dispositivo Android (ou o emulador), é complexa e depende de vários componentes para poder funcionar corretamente.

Muita coisa pode acontecer, e vou tentar mostrar a vocês como se safar de alguns desses “sufocos”.

Android SDK Manager

O programa Android SDK Manager gerencia as plataformas e ferramentas Android instaladas em seu perfil de conta, na sua estação de trabalho.


A instalação das plataformas e ferramentas do Android SDK é feita por PERFIL! Então, casa usuário que se loga na estação de trabalho, deve realizar o procedimento de instalação.


Procure colocar no $PATH (ou %PATH%) a localização das pastas: <android-sdk>/sdk/tools (ou <android-sdk>/tools, para linux) e <android-sdk>/sdk/platform-tools (ou <android-sdk/platform-tools, para linux)!


Para executar o Android SDK Manager, você tem duas opções: via Eclipse (“window”) ou chamando diretamente:
  • Windows: Duplo-clique no arquivo “SDK Manager.exe”, na pasta raiz do Android SDK;
  • Mac/Linux: Abra um terminal, navegue para a pasta “tools/”, dentro da pasta do Android SDK, e execute: “./android sdk”;


O que deve estar instalado?

  • Android SDK Tools;
  • Android SDK Platform-tools;
  • Pelo menos uma Plataforma Android:
    • SDK Platform;
    • ARM EABI System image ou Intel System Image (ou ambas);
    • Google APIs ou Google System image (se você quiser usar Internet no Emulador);
  • Só para Windows: Google USB Driver, dentro de “Extras”, no final de tudo.

AVD Manager

Para emular aplicações Android, você vai necessitar de pelo menos uma instância do Emulador Android. Você pode criá-lo pelo AVD (Android Virtual Device) Manager, dentro do Android SDK Manager. Basta usar o menu “tools / Manage AVDs”.

Crie uma instância selecionando “create”, e inicie selecionando “start”.


Emulator

Você pode subir uma instância do Emulador Android usando o programa “emulator” (dentro de “tools”, na pasta do Android SDK).


Lançar o emulador através da linha de comando, nos permite controlar melhor suas opções, e pode ser a única maneira, caso você venha enfrentando problemas para iniciá-lo do Eclipse ou do SDK Manager.

Eis as opções da linha de comando:


emulator -avd <avd_name> [-<option> [<value>]] ... [-<qemu args>]
  • -avd <avd_name>”: O nome do emulador que você criou;
  • Algumas opções especiais (-<option>):
    • -shell”: Abre o emulador e cria uma console (shell) com root no mesmo terminal;
    • -scale <fator>”: Permite escalar a janela do emulador (valor de 0 a 3);
    • -force-32bit”: Inicia o emulador na versão de 32 bits.
Erro “ERROR: 32-bit Linux Android emulator binaries are DEPRECATED”:

Se você estiver rodando o Android SDK em um sistema operacional de 32 Bits, provavelmente receberá essa mensagem. Isso quer dizer que o emulador roda melhor em ambiente de 64 Bits. Você pode forçar o emulador a rodar em 32 Bits usando a opção “-force-32bit” ao iniciar o emulador com o programa “emulator”.


No linux, outra opção é criar a variável de ambiente: “ANDROID_EMULATOR_FORCE_32BIT=true”, dentro de /etc/profile e /etc/bash.bashrc. Se não tiver senha de root (sudo), então pode usar: gedit .profile.

export ANDROID_EMULATOR_FORCE_32BIT=true



Ao usar o emulador, existem atalhos de teclado para as principais funções de um dispositivo Android. Você pode verificar clicando AQUI

Android Debug Bridge – ADB

O ADB é a ferramenta que permite nos comunicarmos com qualquer dispositivo Android conectado, seja ele um dispositivo real ou um emulador. Ele tem os seguintes componentes:
  • Cliente: Pode ser executado no seu PC e serve para enviar comandos ao ADB;
  • Servidor: Executa como um “daemon” (um processo em background) no seu PC, e gerencia a comunicação entre o Cliente e o ADB rodando em um dispositivo Android (ou emulador);
  • Servidor no Dispositivo: Um “daemon” que é executado em background no dispositivo Android conectado ou no emulador;


Controlando o Servidor em seu PC

Quando iniciamos um Cliente ADB em nosso PC, ele verifica se existe um processo de Servidor ADB sendo executado. Se não existir, ele vai iniciar o Servidor ADB em nosso PC.
Quando ativamos um emulador Android ou abrimos um projeto Android no Eclipse com o plugin ADT, um Cliente ADB é executado e inicia o Servidor ADB automaticamente.
Ao iniciar, o Servidor ADB usa a porta TCP 5037 para aguardar conexões de Clientes.


O Cliente ADB pode ser encontrado dentro da pasta: <sdk>/platform-tools/.


Podemos controlar o servidor ADB com o Cliente ADB:
  • adb start-server”: Inicia uma instância do Servidor ADB em nosso PC, caso não esteja rodando;
  • adb kill-server”: Termina a instância do Servidor ADB em nosso PC;


Verificando os dispositivos Android

Podemos verificar quais dispositivos Android estão conectados com o comando: “adb devices”. Por exemplo, vamos supor que eu tenha um emulador rodando e um dispositivo Android conectado via USB, logo, o comando “adb devices” deve mostrar algo assim:


$ adb devices
List of devices attached
4df7d35c1d47cf67 device
emulator-5554 device

Eu tenho um dispositivo Android, cujo “id” é: 4df7d35c1d47cf67, e um emulador, rodando na porta 5554 (cada instância de emulador usa uma porta diferente, começando de 5554).

Problemas:

1) Tenho um emulador rodando, mas ele não aparece no Eclipse e nem no ADB Devices!


O problema aqui pode ser com o Servidor ADB. Neste caso, abra um Terminal, pare e reinicie o Servidor ADB. Isso resolve em 90% dos casos:
  • adb kill-server
  • adb start-server
Vai dar erro no eclipse quando você parar o Servidor ADB, mas ele some assim que você o reiniciar.

2) Tenho um dispositivo rodando, mas não aparece no Eclipse e nem no ADB Devices!


Você já conseguiu ligar seu dispositivo no seu PC? Então, tente parar e reiniciar o Servidor ADB.
Se não funcionou, pode ser um problema de Driver USB. No caso de Máquinas Windows, é recomendável que você instale o “Google USB Driver”, no SDK Manager, pois ele funciona com quase todos os dispositivos Android.
Se o seu dispositivo for Samsung, então é necessário instalar o KIES (http://www.samsung.com/br/support/usefulsoftware/KIES/), que já tem o driver USB para o seu dispositivo Android.

Agora, se você está rodando no Ubuntu...
  • Verifique se você tem o pacote mtpfs instalado, caso contrário, instale-o: “sudo apt-get install mtpfs”;
  • Se não funcionou, você pode tentar atualizar o pacote:
    • sudo add-apt-repository ppa:langdalepl/gvfs-mtp
    • sudo apt-get update
Ao conectar o dispositivo, abra as opções de desenvolvedor dele (no menu de configurações do seu Android), e permita “Depuração USB”.



3) Tenho um dispositivo rodando, mas ele aparece como “unauthorized”!


Em certos casos, você poderá ter essa resposta do “adb devices”:
List of devices attached
4df7d35c1d47cf67 unauthorized
emulator-5554 offline

Isso significa que o dispositivo não está permitindo a depuração USB, necessária para executar programas do Eclipse nele. Neste caso, tente:
  1. No dispositivo, abra o menu “configurações” e procure “Desenvolvedor”. Marque a opção “Depuração de USB”, e dê permissão (devem abrir duas janelas perguntando isso);
  2. Se a opção já estava marcada, tente desmarcá-la e marcá-la novamente;
  3. Pare e inicie o Servidor ADB.


Se nada disso funcionar, tente usar o protocolo MTP: Media Transfer Protocol em seu tablet / smartphone:


Para isto, é necessário que o seu PC esteja configurado para trabalhar com dispositivos MTP. No caso do Ubuntu, é necessário que o pacote “mtpfs” esteja instalado.



Eclipse

No eclipse, alguns problemas podem acontecer:

1) Abri a workspace e travou tudo... Fica em “Android content loader”, com 0%...

É normal... Abra a sua pasta home, procure a pasta oculta “.android” e:
  • Delete a subpasta “cache”;
  • Delete o arquivo “ddms.cfg”;

2) Importei o projeto Android e ele não executa no Emulador. Dá “ClassNotFoundException”...


O Cordova (e o PhoneGap) geram dois projetos sempre: xxxx e xxxx-CordovaLib. O segundo é um “Library Project”, e não deve ser colocado no “Build Path”, dentro do Eclipse, como “project”. Se você fizer isso, vai ocasionar esse erro.


Se você acabou de criar os projetos com o Cordova e o PhoneGap, então deve fazer o seguinte:
  1. File / Import / Android / Existing Android Code...
  2. Selecione a pasta “android”, que fica dentro de “platforms”;
  3. Certifique-se que os dois projetos estejam marcados (XXXX e XXXX-CordovaLib);
  4. Importe os dois;
  5. Se der erro no projeto principal, geralmente, basta dar um “Project / Clean”. Se não resolver, então selecione o projeto principal, e, com o botão direito, abra “properties”. Selecione “android” e verifique se o projeto secundário (CordovaLib) está marcado. Se estiver, remova e adicione novamente. Então, feche tudo, e faça outro “Project / Clean”.


Nota: Se você exportou o projeto a partir do Eclipse (File / Export / General / Archive file), então não deve importar como “Existing Android Code...”, faça como “File / Import / General / Existing projects into workspace”.