Quando pensamos em como construir aplicativos para IOS e
Android , a maioria das pessoas pensam que as linguagens nativas
(Objectice-C e Java repectivamente) são as únicas opções. Entretanto, nos
últimos anos um novo ecosistema de plataformas para construção de aplicaçãoes
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 baseada em Boston,
Massachussetts que foi fundada em Maio de 2011. A Xamarin oferece como seus
produtos principais os frameworks Xamarin.IOS e Xamarin.Android, também
conecidos como MonoTouch e Mono for Android respectivamente.
Ambas as plataformas são construídas em cima da biblioteca
Mono, uma versão open-souce do .Net Framework que foi baseada nos padrões ECMA(http://www.ecma-international.org).
Esta biblioteca é quase tão antiga quanto o própio .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..
Outras features do framework apontados pelo site da Xamarin
são (em inglês):
Complete
Binding for the Indigenous SDKs – Xamarin contains bindings for nearly the
entire underlying platform SDKs in both iOS and Android. Additionally, these
bindings are strongly typed, which means that they’re easy to navigate and use,
and provide robust compile-time type checking and auto completion during
development. This leads to fewer runtime errors and higher quality
applications.
Objective-C, Java, C, and C++ Interop –
Xamarin provides facilities for directly invoking Objective-C, Java, C, and C++
libraries, giving you the power to use a wide array of 3rd party code that has
already been created. This lets you take advantage of existing iOS and Android
libraries written in Objective-C, Java, or C/C++. Additionally, Xamarin offers
binding projects that allow you to easily bind native Objective-C and Java
libraries by using a declarative syntax.
Modern Language Constructs – Xamarin applications
are written in C#, a modern language that includes significant improvements
over Objective-C and Java such as Dynamic Language Features, Functional
Constructs such as Lambdas, LINQ, Parallel Programming features, sophisticated
Generics, and more.
Amazing Base Class Library (BCL) – Xamarin
applications use the .NET BCL, a massive collection of classes that have
comprehensive and streamlined features such as powerful XML, Database,
Serialization, IO, String, and Networking support, just to name a few.
Additionally, existing C# code can be compiled for use in your applications,
which provides access to thousands upon thousands of libraries that will let
you do things that aren’t already covered in the BCL.
Modern Integrated Development Environment
(IDE) – Xamarin uses MonoDevelop on Mac OSX, and also MonoDevelop or Visual
Studio 2010 on Windows. These are both modern IDE’s that include features such
as code auto completion, a sophisticated Project and Solution management
system, a comprehensive project template library, integrated source control,
and many other options.
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.
No android Multitasking 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 tables 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 , a 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, features, capabilities, 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 SO
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 alguma feature do
dispositivo (a câmera, por exemplo) esta feature deve ser sempre testada
primeiro. (Pergunte ao SO se a feature está disponível)
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.
Starting Guide:
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..