Desenvolvimento Android com Maven + ActionBarSherlock 4

Estes últimos dias, estou tentando retomar o projeto do aplicativo da Revista Espírito Livre para Android. A primeira versão que desenvolvi foi bem simples, mas serviu para me dar uma boa visão sobre os rumos da plataforma e me incentivou a estudar bastante. Com isso, vi que dava para melhorar o aplicativo em vários pontos e que a melhor opção seria começar uma nova versão do zero.

Uma das minhas ideias para esta nova versão era começar a utilizar o Maven para gerenciar as dependências do aplicativo. Quem conhece a ferramenta, sabe que ela oferece diversos benefícios como, por exemplo, o build independente de IDE e eliminar a necessidade de versionar os binários das APIs dependentes.

Maven no Android

Comecei a pesquisar e encontrei o android-maven-plugin. Este plugin adiciona ao ciclo de vida do Maven as especificidades da compilação de um projeto Android.

Além disso, existem arquétipos (archetypes) que criam a estrutura de diretórios e arquivos básicos de qualquer projeto Android, além de já incluir no pom.xml o android-maven-plugin configurado com a versão desejada do Android. O arquétipo que mais me interessou foi o “android-release” que, além do projeto principal, cria um projeto de testes e configura o projeto para gerar um pacote para distribuição.

Maven + Android + Eclipse

Com o projeto Maven pronto, já dá para compilar e gerar um pacote da aplicação pela linha de comando. No entanto, apesar do Eclipse (a partir da versão 3.7 “Indigo”) suportar projetos Maven nativamente, ao tentar importar o projeto, ele apresentará um erro.

Assim como Maven precisa de um plugin para lidar com as especificidades da compilação para Android, o Eclipse também precisa. O ADT por si só não consegue lidar com o projeto, pois ele não espera um projeto no formato Maven.

Mas para configurar é muito fácil. Considerando que está utilizando a versão 3.7, você deverá utilizar o plugin m2e-android. Para instalá-lo é bem simples e está explicado em sua página.

Atenção: Não confundir este com o “m2eclipse-android-integration”, que é a versão antiga do m2e-android. Parece bobeira, mas eu bati muito a cabeça com isso!

ActionBarSherlock 4

Superados os problemas do Maven e sua integração com o Eclipse, chegou a hora de incluir no projeto o ActionBarSherlock, componente que já mencionei num post anterior. Como estava desenvolvendo uma versão nova do aplicativo, também decidi atualizar a biblioteca para a versão 4.0. No entanto, ao incluí-la no projeto, tive um erro.

Infelizmente, documentação não é o forte do componente e, depois de bater muito a cabeça, descobri que a versão nova exige que a compilação seja feita para Android 4 (e não para Android 3, como a versão antiga). Sendo assim, você deve configurar seu projeto para o API level 15 e a versão do Android 4.0.1.2.

Além disso, tentei rodar a aplicação num emulador rodando Android 1.6 (versão mínima compatível na versão 3.0) e tive outro erro. Também depois de perder algum tempo, descobri que a versão agora só suportava versões do Android a partir da 2.1.

Conclusão

Apesar destes problemas, vale muito a pena utilizar o Maven nos projetos. Eu bati muito a cabeça, mas espero que este artigo te ajude a evitar estes problemas e que consiga utilizar a ferramenta muito mais tranquilamente.

Uma última dica para quem utiliza o ActionBarSherlock, é utilizar o arquétipo Maven para gerar o projeto e, durante a geração, escolher a API level 15. Você deve tomar cuidado que o padrão é a API level 10, mas você pode negar esta escolha e forçar a versão desejada.

Por fim, torço muito para que o ambiente Maven para Android seja cada vez mais utilizado e fique cada vez mais estável e fácil de usar.

Entrando em forma com Android

Depois de muito tempo sem escrever aqui no blog, tento voltar à ativa com um artigo um tanto quanto diferente: um artigo falando sobre exercício físico! Mas, como todo nerd, até para isto eu preciso da tecnologia junto a mim, neste caso um smartphone Android.

Utilizando o ZTD, uma das minhas metas é voltar ao meu peso ideal. Há muito tempo que estava com sobrepeso e a situação estava piorando lentamente. Após uma passagem pela academia, comecei a correr na rua utilizando um aplicativo móvel para monitorar minhas atividades.

O corredor (ou quase isto)

A dica veio do meu amigo Saulo Andrade, futuro maratonista, que já utilizava há algum tempo o aplicativo RunKeeper. Ao começar a correr, você abre o RunKeeper e ele busca sua localização pelo GPS. Assim que ela for localizada, você marca o início da atividade e ele começa a te monitorar. De tempos em tempos (configurável), ele dá um resumo em áudio de como anda sua atividade. Por isso, eu sempre corro com um fone de ouvido bluetooth, ouvindo boa música (normalmente AC/DC para empolgar mais \o/).

O legal deste aplicativo é que seu site é uma espécie de rede social, onde você pode compartilhar com seus amigos suas atividades e ver as deles. Isto é algo muito bom e recomendado pelo ZTD, pois você torna público entre seu círculo de amigos a evolução de sua meta, aumentando sua dedicação para alcançá-la.

Um pouco de supervisão

No entanto, todo o mundo sabe, fazer exercício físico sem acompanhamento profissional é perigoso. Apesar de estar repetindo o que aprendi no tempo em que fiquei na academia, com o tempo eu passei a ficar um pouco incomodado com a situação de correr por minha conta.

O RunKeeper tem alguns planos de treino criados por especialistas que você pode comprar e ter acompanhamento deles. Estava quase comprando, pois o valor é bastante aceitável e, como eu queria continuar correndo ao ar livre e não voltar para academia, seria mais barato do que contratar um personal trainer.

No entanto, neste meio tempo ouvi o episódio 24 do AndroidCast, onde apresentaram outras opções de aplicativos. Foi então que conheci o Adidas micoach, que, além de monitorar os treinos, também tem planos de treino desenvolvidos por especialistas. O melhor é que é tudo gratuito!

RunKeeper + micoach

Como juntar o melhor dos mundos? O micoach é o aplicativo ideal para utilizar durante as atividades, pois te guia de acordo com o planejamento, mas o RunKeeper é onde estão meus amigos.

Outro grande problema é que o aplicativo da Adidas não te deixa importar os dados de treinos feitos em outros aplicativos, significando que eu perderia todo o meu histórico de corridas. Por sorte, é possível exportar os dados do micoach através do site Running Free e importá-los para o RunKeeper.

Sendo assim, consegui juntar o melhor das duas aplicações: utilizar o aplicativo da Adidas para um treino correto e supervisionado, mas com todos os dados no RunKeeper, onde estão meus amigos e posso continuar publicando a evolução da minha meta de voltar ao meu peso ideal!

Previsão: HTML5 como plataforma ubíqua no mundo móvel

Este artigo foi publicado originalmente na Revista Espírito Livre ed. 33 com tema “Previsões para 2012″. Não deixe de ler os demais artigos, pois está muito legal!

O HTML5 é uma das tecnologias mais comentadas do momento. Composto de um conjunto de padrões abertos, promete possibilidades ilimitadas para o desenvolvimento de sites e aplicativos web, inclusive para rodarem em dispositivos móveis.

Dentre suas capacidades, incluem execução de áudio e vídeo, execução de animações e até mesmo execução offline. Isto tornariam obsoletas algumas tecnologias proprietárias que dependemos hoje, como o Adobe Flash. Isto tanto é verdade, que a Apple há tempos abandonou o Flash no iOS [1], abraçando o HTML5, e motivou a Adobe a abandonar esta tecnologia no mundo móvel em prol também do padrão aberto [2].

No entanto, a maior parte do desenvolvimento móvel feito atualmente é baseado em kits de desenvolvimento nativos de cada plataforma, abordagem muito comum nos aplicativos desktop antes da explosão da “computação em nuvem”. A grande desvantagem disto é que os desenvolvedores devem portar suas aplicações para cada sistema que deseja executá-las, um trabalho que não é fácil.

O mundo desktop evoluiu para a web e o mundo móvel também irá evoluir para a mesma direção, mas desta vez será muito mais rápido. Com capacidades exclusivas para celulares e tablet modernos, o HTML5 será a plataforma que possibilitará esta evolução.

O futuro já começou

Atualmente já existem alguns frameworks de desenvolvimento, como o Rhodes Mobile [3] e o PhoneGap [4], que geram aplicações para múltiplas plataformas, utilizando HTML5 e rodando a aplicação no navegador web do dispositivo. Detalhe importante é que, em outubro, a Adobe comprou a empresa por trás do PhoneGap, mostrando que não está brincando quando diz que irá mudar seu direcionamento no mundo mobile.

Outra boa notícia para quem acredita nesta tendência, foi a da abertura do código do webOS [5], sistema móvel da HP que foi desenvolvido originalmente pela Palm. Este é um sistema operacional totalmente baseado em tecnologias web, dentre elas o HTML5.

Seu framework de desenvolvimento de aplicativos, o Enyo [6], também terá seu código aberto e a expectativa é que a comunidade porte-o para outros sistemas móveis, como Android e iOS.  Caso isto aconteça, será mais uma boa opção para quem desejar desenvolver aplicações para diversos dispositivos.

Conclusão

Apesar da especificação do HTML5 ainda não estar finalizada, com muitos detalhes ainda indefinidos, suas evoluções estão sendo acompanhadas de perto pela comunidade e por todas as empresas do ramo. Certamente muita evolução acontecerá no decorrer de 2012 e a tendência é que a tecnologia ganhe ainda mais espaço, tanto no mundo desktop quanto no móvel.

Com esta expansão, 2012 poderá ser um ano em que o HTML5 começará a ser considerado como uma das principais plataformas para desenvolvimento móvel. Com isso, ganhará o desenvolvedor, que poderá disponibilizar suas criações para usuários de múltiplos sistemas de maneira simples, e também ganhará o usuário, que terá uma gama ainda maior de aplicativos disponíveis.

Referências:

Visual moderno em aplicativos Android

Quando foi lançada, a versão 3.0 do sistema Android trouxe um visual totalmente remodelado e com diversos conceitos de interface diferentes. Desde então, a Google vem modificando a API adicionando novos padrões de UI (interface de usuário), com o objetivo de tornar os aplicativos desenvolvidos na plataforma mais intuitivos.

No início, apenas os aparelhos com versões do sistema a partir da 3.0 tinha acesso a estas novas APIs, trazendo um grande problema de fragmentação. Afinal, como tirar proveito destas melhorias se a grande maioria dos aparelhos no mercado ainda estão trabalhando com Android 2.x? Foi então lançada a Compatibility Library, para possibilitar embarcar estas APIs mais recentes junto com as aplicações, possibilitando seu acesso mesmo nas versões mais antigas do sistema.

Esta semana a Google deu mais um passo na direção certa e lançou o Android UI Design Guidelines. Leitura obrigatória para quem está desenvolvendo para a plataforma, explica todos os conceitos de interface utilizados e tudo o que você deve e não fazer ao desenvolver aplicativos.

O problema do ActionBar

Sabemos que devemos seguir o guia e utilizar as APIs de compatibilidade para poder seguí-lo, no entanto uma peça chave da interface de um aplicativo Android ficou estranhamente de fora do Compatibility Library: o ActionBar.

Uma opção seria implementar por conta própria, o que não é muito produtivo. Outra seria copiar o código de um aplicativo como o do Google I/O (o que parece ser a recomendação), mas fazer “copy-and-paste” não é uma das técnicas de programação mais inteligentes.

A melhor opção então é procurar bibliotecas de terceiros para incorporar no aplicativo. Inicialmente conheci o GreenDroid, que é utilizado no aplicativo do Ubuntu One e, além da ActionBar, tem vários outros recursos. Mas a opção que escolhi foi o ActionBarSherlock.

O ActionBarSherlock tem a vantagem de tentar ser um superconjunto da Compatibility Library, ou seja, ele já contém tudo desta API e mais a ActionBar. Melhor de tudo, se a versão do Android no aparelho é recente, ele utiliza a ActionBar nativa. Seu uso é muito simples e irei utilizar no meu novo projeto: o aplicativo para Android da Revista Espírito Livre.

Mais fontes de estudo

Com o problema do ActionBar resolvido, você pode começar a desenvolver seus aplicativos Android utilizando todo o potencial da plataforma e, ainda assim, mantendo a compatibilidade com até a versão 1.6 do sistema.

Um site bem legal que conheci nas minhas buscas (onde conheci do ActionBarSherlock) é o Android UI Design Patterns. Ele contém diversos artigos explicativos dos padrões de interface para Android, dicas de implementação e muito mais.

Outra dica boa é o site Android Assets Studio, que é uma mão na roda para criação de ícones para seu aplicativo. Eu que não sou nenhum artista gráfico, consegui criar ícones simples porém bonitos com apenas alguns cliques.

Espero que as dicas acima os ajudem a desenvolver aplicativos com excelente visual e consistente com a plataforma Android. Caso tenham alguma outra dica, compartilhem nos comentários!

Esperanças com a abertura do webOS

No último dia 09 de dezembro, a HP anunciou que abrirá o código do seu sistema operacional, o webOS, numa tentativa de se manter relevante no mercado de dispositivos móveis. Apesar dos seus conceitos de interface de usuário inovadores e ter cativado todos os seus poucos usuário, ele foi a grande promessa de volta por cima da Palm que nunca se concretizou.

web + OS

Apesar de não conhecer o sistema, o que mais me chama atenção para o webOS é o desenvolvimento de aplicativos feito utilizando padrões web (HTML5/CSS/JS). Tenho visto os vídeos da W3Conf e tenho me tornado um entusiasta cada vez maior do HTML5, a ponto de achar que a tecnologia é o futuro do desenvolvimento móvel. Sendo assim, acredito que os sistemas móveis baseados em padrões web são os mais preparados para o futuro e que os dias dos SDKs nativos estão contados.

Mas o webOS não é o único a apostar nesta ideia. Existem outros dois sistemas, atualmente em fase de desenvolvimento, com princípios similares: o Boot2Gecko (ou B2G), bancado pela Mozilla, e o Tizen, bancado pela Intel e Samsung com a benção da Linux Foundation. Além de apostarem na plataforma web, os três são sistemas que rodam sobre o kernel Linux e serão livres.

Mas ainda existe espaço?

A pergunta que realmente fica é: “será que não é tarde demais?” Num mercado dividido ente iOS e Android, com o Windows Phone querendo entrar na briga, será que o webOS tem futuro ou será que acabará como o Symbian?

Assim como tem acontecido no mundo desktop, acredito que o no mundo móvel o sistema operacional perderá cada vez mais a importância como plataforma de execução de aplicativos, deixando esta tarefa para o navegador e a “nuvem“. Sendo assim, acho que um sistema que aposta nisso tem grandes chances de ser relevante.

No entanto, o webOS livre lutando sozinho provavelmente será tão “bem” sucedido quanto o webOS fechado. Mas se a HP juntar seus esforços junto com o B2G e o Tizen, o futuro poderia ser realmente promissor.

webOS + B2G + Tizen

Dos três sistemas, o webOS é o único que está pronto hoje. Ele só precisa substituir as partes que não poderão ser abertas, um esforço que os outros dois projetos poderiam ajudar. Com todos os esforços direcionados para a mesma base de código, poderíamos ter algo espetacular!

Do ponto de vista comercial, existirão outras grandes empresas apoiando a HP, dentre elas uma das maiores fabricantes de celulares do mundo: a Samsung. Sem contar que a presença da Mozilla e da Linux Foundation poderá trazer um ar de projeto verdadeiramente open source, o que pode trazer confiança e investimentos de outras empresas que não se sintam bem atendidas pela Android ou pelo Windows Phone.

Na torcida por um futuro mais aberto

Tudo o que escrevi são apenas devaneios, mas realmente torço muito para que isto aconteça. Teríamos um sistema com código e governança livres e baseado em padrões abertos e interoperáveis. Isto seria bom tanto para os usuários, que terão mais liberdade de escolha, quanto para os desenvolvedores de software, que não precisarão portar seus aplicativos para diversas plataformas.