Monthly Archives: fevereiro 2013

Android, iOS, Windows Phone? Como você organiza seu código mobile?

Posted by rlecheta on fevereiro 23, 2013
Tutorial / 2 Comments

Olá Pessoal,

Na Livetouch  temos muitos projetos mobile, e desenvolvemos para todas as plataformas.

Consequentemente temos que organizar nossos projetos, padronizar o código, e principalmente criar um padrão para facilitar com que os novos desenvolvedores, as vezes não acostumados com uma ou outra plataforma, consigam aprender tudo rapidamente.

Para exemplificar, vamos imaginar que precisamos salvar nas preferências do usuário algum valor simples (aquela classe simples de chave/valor que armazena no banco de dados).

No Android é utilizado a classe SharedPreferences, no iOS é a classe NSUserDefaults e no Windows Phone a IsolatedStorageSettings. Essas classes são simples, mas você precisa conhecer a API nativa para utilizá-las.

Então se um desenvolver Android X for lá no código e utilizar diretamente a classe SharedPreferences, como ele fará quando tiver que fazer o mesmo para iOS ou Windows Phone?

Ou se você é responsável por uma equipe mobile, como você garante que todos os desenvolvedores, ou as vezes aqueles que entraram para aprender, estagiários, etc, vão aprender o mais rápido possível? Como você garante que a produtividade será sempre alta, mesmo em uma nova plataforma?

Por isso eu gosto de padronizar algumas coisas, principalmente tarefas repetidas e comuns que sempre vai existir, independente da plataforma.

Para solucionar o problema das classes SharedPreferencesNSUserDefaults e IsolatedStorageSettings, vamos pensar que existe uma classe Prefs que encapsula este acesso, escondendo a API nativa do desenvolvedor.

No Android (java), essa classe poderia ser utilizada da seguinte forma.

// Salvar
Pref.setString(getContext(), “chave”, “valor”);

// Ler
String valor = Pref.getString(getContext(), “chave”);

No iOS (objective-C), se essa classe também existir, a tarefa continua simples:

// Salvar
[Prefs setString:@”chave” valor:@”valor”];

// Ler
NSString *valor = [Prefs getString:@”chave”];

E no Windows Phone (C#), qual classe vamos utilizar? Advinha:

// Salvar
Prefs.setString(“chave”, “valor”);

// Ler
String s = Prefs.getString(“nome”);

A vantagem é que não preciso conhecer a API nativa, ou me lembrar de cabeça como é que chama o método X ou Y. Basta lembrar que existe essa classe utilitária.

Este conceito de encapsulamento para esconder o código nativo facilita muito o trabalho. Você pode criar muitos padrões legais, principalmente utilizando interfaces/protocolos.

Acho que deu para entender a ideia, e na prática funciona assim:

1) Um cara novo de mobile entra na equipe e aprende Android, ou outra coisa.

2) Junto com a arquitetura do Android e coisas específicas, ele aprende a utilizar diversas classes prontas, que facilitam determinado trabalho.

3) Depois ele precisa aprender outra plataforma.

4) Ok, coisas específicas ele precisa aprender, mas as mesmas classes padronizadas estarão lá, a sua disposição.

Então se você precisar enviar um email, como fazer? O pessoal sabe que basta procurar uma classe EmailUtils, que costumamos dizer, (*)Utils.

Essa organização acredito ser uma tendência natural, a medida que a empresa começa a fazer aplicativos para diversas plataformas.

Não estou dizendo que tudo precisa ser encapsulado aqui, não vamos ser muito rigorosos :-), até porque cada plataforma possui suas peculiaridades e recomendações, mas para muitas tarefas este conceito pode ser utilizado, e pelo menos aqui tem dado certo.

E lembre-se, isso que estou falando vale para código, regras de negócio, tarefas comuns, etc, e não para a interface/design das telas. Sobre UI Guidelines, cada plataforma possui a sua, e é aquela que os usuários estão acostumados… Mas isso é uma outra conversa já muito batida.

O que vocês acham, alguém costuma fazer assim?

abraços

Instalando uma versão do Android com o fastboot

Posted by rlecheta on fevereiro 04, 2013
Android, Tutorial / 2 Comments

Olá,

Uma vez eu estava brincando com meu Android, para deixar ele com acesso root. Na época fiz uma besteira e acabei apagando completamente o sistema operacional. E no final da brincadeira, meu Android não ligava mais. Foi quando aprendi sobre uma ferramenta utilitária chamada fastboot, utilizada para enviar uma versão do sistema operacional pela USB, e formatar seu Android.

Neste tutorial vou formatar um Nexus S e instalar o Android 4.1.2 nele, mas isso vai apagar todos os dados do aparelho.

Lembre-se, se você prosseguir é por sua conta e risco, e faça um backup, pois todos os seus dados serão apagados.

Outra coisa, este tutorial foi baseado na linha Google Nexus, e testado especificamente para o Nexus S. A vantagem dos devices da linha Nexus é que é fácil encontrar as imagens do sistema operacional compilada para estes devices, pois são disponibilizadas pelo Google neste link:

https://developers.google.com/android/nexus/images

Vamos seguir os seguintes passos.

1) Baixe a imagem correta para seu device. Neste tutorial estou utilizando o Nexus S.

Então eu procurei esta versão: “Factory Images “soju” for Nexus S (worldwide version, i9020t and i9023)”

Baixe q versão que quiser, por exemplo a 2.3.6 ou 4.1.2.

img001

2) Instale o Android SDK

Para prosseguir com este tutorial, você precisa instalar o Android SDK.

Vamos utilizar as ferramentas adb e fastboot localizadas na pasta /android-sdk/platform-tools.

3) Instale o Driver

Este tutorial é para desenvolvedores, então você já sabe que precisa instalar o driver. O driver da linha Nexus é inclusive disponibilizado pelo SDK Manager.

Como eu sei que você já está com o driver instalado, conecte seu device na USB e digite o comando “adb devices”. O resultado deve ser o seguinte.

C:\android-sdk-windows\platform-tools>adb devices
List of devices attached
3334F3D59BBD00EC device

Lembre-se de ativar o modo USB no menu de desenvolvedores. Se seu device não for listado aqui, revise a instalação do driver.

4) Entre no bootloader

Todo Android possui um bootloader, que é um conjunto de instruções que executa antes do sistema operacional. Você pode entrar no bootloader se deseja brincar com coisas avançadas, como instalar uma nova versão do Android no seu apaelho, que é o que vamos fazer aqui.

Para entrar no bootloader podemos fazer de duas formas. Recomendo testar as duas.

A primeira é deixar seu Android ligado e conectado na USB. Depois digite este comando no prompt:

adb reboot bootloader

A segunda é desligar seu Android (power off). Depois pressione o botão do Volume + e logo depois o Power. E mantenha pressionado os dois por alguns segundos, tipo 1 ou 2.

Ao entrar no bootloader você verá uma tela como esta:

Repare no texto LOCK STATE – LOCKED.

02-bootloader

5) Desbloqueando o bootloader

No bootloader repare na mensagem: LOCK STATE – LOCKED

Isto indica que o bootloader está travado por motivos de segurança, e para formatar o Android precisamos destravá-lo.

Este passo muda de fabricante e fabricante, e por isso eu prefiro a linha Nexus, pois o suporte do Google para desenvolvedores é melhor.

O problema de destravar o bootloader é que todos os dados serão apagados, e portanto, faça backup e somente prossiga se você tiver certeza do que está fazendo.

Digite este comando no prompt:

C:\android-sdk-windows\platform-tools>fastboot devices
3334F3D59BBD00EC fastboot

Se você conseguir visualizar seu device novamente conectado na USB, ótimo. No Linux e Mac você não vai ter problemas. Mas no Windows é necessário instalar o driver, e o driver utilizado para desenvolvimento não e compatível com este do bootloader. Você pode baixar e instalar o famoso PDANET http://www.junefabrics.com/android/download.php

Depois de instalar o driver digite novamente o comando “fastsboot devices” e somente prossiga se você conseguir visualizar seu Android conectado na USB.

Para desbloquear o bootloader digite este comando:

fastboot oem unlock

Feito isso você deverá ver na tela do seu Android uma mensagem alertando que todos os dados serão apagados, e se você deseja prosseguir.

03-bootloader-unlock

Leia cuidadosamente a mensagem, e se tem certeza que deseja continuar, utilize o botão do Volume + para selecionar a opção Yes. Depois pressione o botão Power para confirmar.

Isto vai desbloquear o bootloader e agora você verá a mesma tela do bootloader, mas com a mensagem LOCK STATE – UNLOCKED, indicando que ele foi destravado.

Neste momento não instalamos nenhuma versão do Android, mas lembre-se que seus dados foram apagado e portanot se você reiniciar o device agora, será como se fosse a primeira vez que está ligando seu Android.

04-bootloader-unlock-ok

6) Preparando o ambiente

Eu baixei as imagens do Android Nexus S, versão 2.3.6 e 4.1.2.

Primeiro eu instalei a versão 2.3.6 nele, e podemos ver no menu > Settings > About que está com a versão 2.3.6 agora:

05-2.3.6

Ok, esta foto é para comprovar que a atualização vai funcionar, pois vamos atualizar para o Android 4.1.2.

Lembre-se que agora você deve estar no bootloader e o comando “fastboot devices” deve reconhecer seu Android normalmente.

Depois de baixar o arquivo soju-jzo54k-factory-36602333.tgz, que é do Nexus S Android 4.1.2, descompacte o zip em algum lugar. O resultado deve ser estes arquivos.

img002

Basicamente aqui temos os seguintes arquivos:

  • flash-all.sh: é o script que você vai executar.
  • bootloader-**.img: é a nova imagem do bootloader que será formatada
  • radio-crespo-***: é a nova imagem de radio que será formatada
  • image-soju-jzo54k: é a imagem do Android 4.1.2 que vamos instalar agora

Basta executar o comando flash-all.sh que ele vai executar diversos comandos, que vão instalar estas imagens no seu aparelho!

O arquivo flash-all.sh possui o seguinte conteúdo:

fastboot flash bootloader bootloader-crespo-i9020xxlc2.img
fastboot reboot-bootloader
sleep 5
fastboot flash radio radio-crespo-i9020xxki1.img
fastboot reboot-bootloader
sleep 5
fastboot -w update image-soju-jzo54k.zip

Note que para estes comandos funcionarem a ferramenta fastboot precisa estar no path, e lembre-se ela se encontra na pasta /android-sdk/platform-tools:

Eu gosto por motivos de praticidade, copiar todos estes arquivos par a pasta /android-sdk/platform-tools.

Assim o problema está resolvido e todos os arquivos estão no mesmo lugar.

Agora execute o arquivo flash-all.sh ou flash-all.bat e BOOM!

Ao executar você verá os seguintes logs no prompt, enquanto a instalação é efetuada. O processo deve demorar uns 2 ou 3 minutos.

C:\android-sdk-windows\platform-tools>flash-all.bat
sending ‘bootloader’ (1536 KB)…
OKAY [ 0.205s]
writing ‘bootloader’…
OKAY [ 0.351s]
finished. total time: 0.565s
rebooting into bootloader…
OKAY [ 0.009s]
finished. total time: 0.012s
< waiting for device >
sending ‘radio’ (12288 KB)…
OKAY [ 1.550s]
writing ‘radio’…
OKAY [ 1.684s]
finished. total time: 3.243s
rebooting into bootloader…
OKAY [ 0.009s]
finished. total time: 0.012s
< waiting for device >
archive does not contain ‘boot.sig’
archive does not contain ‘recovery.sig’
archive does not contain ‘system.sig’
——————————————–
Bootloader Version…: I9020XXLC2
Baseband Version…..: I9020XXKI1
Serial Number……..: 3334F3D59BBD00EC
——————————————–
checking product…
OKAY [ 0.002s]
checking version-bootloader…
OKAY [ 0.002s]
checking version-baseband…
OKAY [ 0.003s]
sending ‘boot’ (3964 KB)…
OKAY [ 0.499s]
writing ‘boot’…
OKAY [ 0.507s]
sending ‘recovery’ (4308 KB)…
OKAY [ 0.549s]
writing ‘recovery’…
OKAY [ 0.549s]
sending ‘system’ (337443 KB)…
OKAY [ 42.392s]
writing ‘system’…
OKAY [ 40.266s]
erasing ‘userdata’…
OKAY [ 0.429s]
formatting ‘userdata’ partition…
Erase successful, but not automatically formatting.
Can’t determine partition type.
OKAY [ 0.057s]
erasing ‘cache’…
OKAY [ 2.004s]
formatting ‘cache’ partition…
Erase successful, but not automatically formatting.
Can’t determine partition type.
OKAY [ 0.009s]
rebooting…

finished. total time: 87.316s

Logo depois de instalar a nova imagem do sistema operacional, seu Android vai reiniciar e você verá a tela de Boas Vindas para que você configure o Android, como se acabasse de ter comprado um aparelho novo. Agora siga os passos normalmente, como entrar com seu login do Gmail e pronto.

06-ok

Se você quiser ver na prática resultado do comando flash-all.sh eu filmei este vídeo enquanto fiz este procedimento, confira abaixo.

Este tutorial mostrou como atualizar a imagem do sistema operacional em um Nexus S. Lembre-se que dependendo do fabricante estes passos podem ser outros.

O principal objetivo deste tutorial foi demonstrar a ferramenta fastboot, que faz um excelente trabalho.