Tuesday, September 18, 2012

Desenvolvimento para Android com C#



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..

Site da Xamarin: http://www. xamarin.com
Download das ferramentas:   http://xamarin.com/androidbeta/setup.exe

Após instalar a solução, observe os novos tipos de projeto que você pode criar:

No comments:

Post a Comment