Quando pensamos em construir aplicativos para IOS e Android, a maioria das pessoas pensam que as linguagens nativas (Objective-C e Java respectivamente) são as únicas opções. Entretanto, nos últimos anos um novo ecossistema de plataformas para construção de aplicações surgiu. Entre as novas soluções podemos citar: PhoneGap, Appcelerator, CellSDK e Xamarin.
Neste artigo iremos fazer uma introdução ao desenvolvimento de aplicativos para Android a partir do Framework da Xamarin: Mono Android
Xamarin é uma empresa de softwares situada em Boston Massachussetts e foi fundada em Maio de 2011. A Xamarin oferece como seus produtos principais os frameworks Xamarin IOS e Xamarin Android, também conhecidos como MonoTouch e Mono for Android respectivamente.
Ambas as plataformas são construídas em cima da biblioteca Mono, uma versão open-source do .Net Framework baseada nos padrões ECMA (http://www.ecma-international.org). Esta biblioteca é quase tão antiga quanto o próprio .Net Framework e está presente em várias plataformas como Linux, Unix, FreeBSD e Mac OSX.
Um dos diferenciais da Xamarin é que ela oferece uma única linguagem (C#) e uma biblioteca de classes que funcionam em todas as 3 plataformas: Android, IOS e Windows Phone.
No Android, o código é compilado para uma linguagem intermediária que por sua vez será compilada para o assembly nativo da plataforma quando a aplicação for lançada (Just in time compilation of an Intermediate Language). As aplicações utilizam um runtime que manipula automaticamente problemas clássicos como alocação de memória, garbage collector, interoperabilidade de plataformas subjacentes, etc..
Outros recursos do framework apontados pelo site da Xamarin são:
Xamarin contém ligações para quase toda a plataforma SDK subjacente, tanto iOS e Android. Além disso, essas ligações são fortemente tipadas, o que significa que elas são fáceis de navegar e usar, e oferecem robusta em tempo de compilação de tipo e preenchimento automático durante o desenvolvimento. Isto leva a menos erros de execução e aplicações de maior qualidade.
Xamarin oferece facilidades para invocar diretamente as bibliotecas do Objective-C, Java, C e C + +, dando-lhe o poder de usar uma grande variedade do código que já foi criado. Isso permite que você tire proveito de iOS existente e as bibliotecas Android escritas em Objective-C, Java ou C / C++. Além disso, Xamarin oferece projetos de ligação que permitem ligar facilmente o nativo Objective-C e as bibliotecas Java usando a sintaxe declarativa.
As aplicações Xamarin são escritas em C#, uma linguagem moderna que inclui melhorias significativas sobre Objective-C e Java como recursos de linguagem dinâmica, construções funcionais, tais como Lambda, LINQ, recursos de programação paralela, genéricos sofisticados e muito mais.
Xamarin usa a BCL (Base Class Library) que é uma enorme coleção de classes que têm recursos abrangentes e simplificados, como o poderoso XML, banco de dados, serialização, IO, String, suporte de rede, entre vários outros. Além disso, os códigos C# existentes podem ser compilados para uso em seus aplicativos, que dá acesso a milhares e milhares de bibliotecas que permitem que você faça as coisas que ainda não estão abrangidos no BCL.
Xamarin pode ser usado na IDE MonoDevelop (Modern Integrated Development Environmet) do Mac OSX ou no Visual Studio 2010 do Windows. Estas IDE são modernas que incluem recursos como o código de auto-completar, projetos sofisticados e sistema de gestão de soluções, uma biblioteca modelo abrangente de projeto, controle de origem integrado e muitas outras opções.
Considerações Importantes para Desenvolvimento de Aplicativos Mobile:
Multitasking
Em aparelhos mobile apenas uma aplicação pode estar em foreground. Isso se deve principalmente às limitações de memória e espaço em tela. Outro ponto importante é que ter muitas aplicações abertas ao mesmo tempo consomem rapidamente a bateria do aparelho.
O Multitasking do Android pode ser dividido em 2 componentes:
Activity Lifecycle: Cada tela em uma aplicação Android é representada por uma atividade. Existe um grupo de eventos específicos que são acionados sempre que uma atividade vai para background ou foreground.
Services: Serviços são processos geralmente longos que existem independentemente da aplicação e são executados quando a aplicação está em background.
Padrões e tamanhos de tela
Telefones e tablets são os dois tipos principais de aparelhos mobile. Alguns aparelhos acabam caindo em categorias intermediárias à essas duas. Desenvolver aplicações para esses tipos de aparelhos pode ser muito diferentes devido ao pouco espaço em tela quando comparados a um laptop ou PC. Por esse motivo, os controles responsáveis pela interface com o usuário devem ser desenhados especificamente para serem efetivos nesses aparelhos e menores em tamanho.
No IOS temos um pequeno número de dispositivos para atender, no Windows Phone 7 existem restrições impostas pela Microsoft que padronizam os aparelhos e estabelecem requisitos mínimos a serem atendidos para que o dispositivo seja aprovado.
Já no Android, o Google não estabelece limites e restrições para os dispositivos o que aumenta muito o universo de ambientes ao quais a nossa aplicação precisa se adaptar, isso inclui diferentes tamanhos de tela, especificações de hardware, recursos, capacidades, etc...
Devido a esse universo abrangente, a maioria das equipes de desenvolvimento escolhem 5 ou 6 aparelhos top e focam os testes para esses aparelhos.
Dispositivo e fragmentação do Sistema Operacional
Conceitualização e planejamento: Devido às grandes diferenças entre o hardware e features de cada aparelho, você precisa ter em mente que uma aplicação que depende de algumas features podem não funcionar corretamente em todos os dispositivos. Por exemplo, nem todos os smartphones tem câmeras. Esse tipo de fator é muito importante para o seu planejamento inicial.
Design: Ao desenhar o controle de experiência e usabilidade do usuário (UX), tamanos diferente de tela, teclados e interfaces de controle (touch-screen ou voz) devem ser levados em consideração. Ao desenharmos a interface do usuário (UI) devemos ter em mente diferentes tipos de resolução.
Desenvolvimento: Quando usamos algum recurso do dispositivo (a câmera, por exemplo) esta deve ser sempre testada primeiro.
Testes: É muito importante testar a sua aplicação nos dispositivos atuais (e na maioria deles). No Android, mesmo aparelhos com especificações de hardware idênticas podem apresentar diferenças de comportamento.
Recursos Limitados
Os dispositivos móveis estão cada vez mais poderosos, porém ainda possuem capacidades limitadas se comparados a notebooks e computadores. Por isso devemos sempre adotar boas práticas de programação que limitem o consumo de memória e tempo de CPU das nossas aplicações.
Considerações de Segurança
Cada aplicação no Android OS roda sob uma identidade isolada e distinta cujas permissões são limitadas. Por default, aplicações tem permissão para quase nada. Por exemplo, sem permissões especiais uma aplicação não consegue enviar mensagens de texto ou até mesmo acessar a internet. Para poder acessar essas features, as aplicações precisam especificar no arquivo de manifesto quais permissões serão utilizadas. Quando a aplicação é instalada essas permissões são listadas para o usuário que deverá aprovar, ou cancelar a intalação.
Distribuição
Todas as aplicações android devem ser assinadas digitalmente antes de serem distribuídas. Os desenvolvedores devem assinar suas aplicações usando seus própios certificados protegidos por uma chave privada. Ao contrário das outras plataformas, Android tem uma abordagem muito aberta quanto a distribuição de aplicativos. Os dispositivos não são restritos a uma única app store, desse modo um canal muito mais largo e complexo existe para distribuição dos aplicativos.
Guia de inicio
Para começar a desenvolver para Android, entre no site da Xamarin e faça o download do framework e dos plugins para IDE (Visual Studio). A empresa fornece todo o material necessário para iniciantes, como exemplos de código e documentação da biblioteca de classes além de tutorias relacionados a permissões, distribuição, etc.
Site da Xamarin: http://www.xamarin.com
Download das ferramentas: http://xamarin.com/androidbeta/setup.exe
Site da Xamarin: http://www.xamarin.com
Download das ferramentas: http://xamarin.com/androidbeta/setup.exe