No inicio da década, em 2000, a empresa Sharp lança o primeiro celular do mundo a ter uma câmera digital integrada. No mesmo ano surge uma nova tecnologia de comunicação sem fio: o Bluetooth. Após isso, surge a tecnologia 3G (terceira geração de telefonia), celulares com suporte a MMS (mensagens multimídia). Em 2004 a Motorola lança uma dos aparelhos mais vendidos na historia: o Razr.

Estudos mostram que hoje em dia mais de três bilhões de pessoas possuem um celular (figura 1), e isto é quase metade da população mundial. Esta informação foi retirada de uma pesquisa publicada pelo livro "Google Android" de Ricardo Lecheta.

https://www.oficinadanet.com.br/imagens/coluna/2588//1.jpg

Figura 1. Quantidade de celulares no mundo em bilhões



A crescente evolução dos dispositivos móveis, impulsionada pelo modo em que os fabricantes vêm trazendo aparelhos cada vez mais completos, tem aberto um novo mercado de aplicações para celular. A presença de GPS (Sistema de Posicionamento Global), conexão Wi-Fi, acelerômetros (sensores de movimento) e aumento na capacidade de processamento, fazem com que estes aparelhos estejam aptos a portar aplicações mais robustas e prover novas funcionalidades. Aparelhos mais robustos requerem sistemas operacionais mais complexos, e com capacidade de gerenciar os novos componentes seu hardware. Sendo assim, alguns sistemas operacionais surgiram para sanar este ponto, dentre eles pode-se citar: Symbian OS, Iphone OS, Google Android e Windows Mobile.

De acordo com a consultoria IDC (International Data Corporation), as fabricantes de smartphone (telefone celular com funcionalidades avançadas) distribuíram 43,3 milhões de dispositivos durante o terceiro trimestre de 2009, número 4,2% superior aos 41,5 milhões do mesmo período de 2008 (Hamblen, 2009). Com esse crescimento no mercado empresas como a Google, se juntaram para formar a OHA (Open Handset Alliance), aliança entre as maiores empresas do ramo de telefonia. Entre os integrantes dessa aliança, estão: HTC, LG, Motorola, Samsung, Sony Ericsson, Toshiba, Sprint Nextel, China Mobile, T-Mobile, Asus, Intel, Garmin e outras mais. A junção dessas empresas para criarem a OHA, pode ser explicada pelo fato de que a disputa sempre foi na venda pelos aparelhos celulares e não pelos sistemas operacionais que rodam neles. A intenção dessa aliança foi criar uma plataforma de desenvolvimento de código aberto, única e flexível. Nos capítulos seguintes será descrito de que forma esse sistema operacional surgiu, características presentes em sua arquitetura, abordando aspectos de funcionamento de suas aplicações.

Google Android OS


O Android (figura 2), como a plataforma também é chamada, é um conjunto completo de softwares para dispositivos móveis que inclui sistema operacional e importantes aplicativos. É um projeto de código aberto e foi idealizado para aparelhos com especificações diversas (OHA, 2010).

https://www.oficinadanet.com.br/imagens/coluna/2588//2.jpg

Figura 2. Logotipo do Android.


Baseado no sistema operacional Linux, o Android é uma plataforma de desenvolvimento para dispositivos móveis, que vem mexendo com o mercado da telefonia, por ser um sistema que visa fornecer uma plataforma única, que poderá ser instalado em qualquer dispositivo fornecido por fabricantes que pertencem a OHA. Em sua arquitetura foi introduzido conceitos de integração e flexibilidade. Aplicativos fornecidos nativamente com o sistema podem ser substituídos por aplicações customizadas, que poderão interagir ou não com outras aplicações nativas do sistema. Essa flexibilidade torna-se interessante para os fabricantes de celulares, pois é possível inserir alguma forma de marketing na interface com o usuário, pois seu código fonte é de livre acesso a comunidade.

Devido a muitos fatores relacionados à plataforma, o Android vem adquirindo muitos simpatizantes entre os desenvolvedores de dispositivos móveis. Um dos fatores que contribui para a disseminação desse sistema é o fato de que a Google vem lançando concursos no desenvolvimento de aplicativos para a plataforma, que oferecem prêmios atrativos para os desenvolvedores do mundo inteiro. No maior concurso da área o Android Developer Challenger, o investimento foi de U$ 10 milhões em prêmios, distribuindo uma quantia de U$ 275.000,00 para as 20 melhores aplicações. O grande impacto para a comunidade de usuários do sistema operacional, é a quantidade crescente de aplicativos construída durante o processo de avaliação, e de que a maioria destes códigos são marcados como livre por seus criadores, estando ao acesso de uma gama de usuários. O Android conta com uma loja virtual, a Android Market, que possibilita ao desenvolvedor disponibilizar uma aplicação gratuitamente para o usuário final, ou lucrar com a sua venda em um modelo semelhante à AppStore, loja virtual de aplicativos do iPhone, smartphone da marca Apple. (Arima, 2009). Outras características também são relevantes como a fácil integração com serviços oferecidos pela Google. Além disso, diversas ferramentas estão disponíveis gratuitamente para os seus desenvolvedores (Meier, 2009).

Muitas características presentes no Android, tais como gráficos 3D e suporte a banco de dados nativo, também estão disponíveis em outras plataformas móveis. Porém, apenas no Android há um componente que permite exibir e manipular um mapa do Google Maps, serviço de mapas do Google, dentro de uma aplicação (Meier, 2009). Somente no Android todos os aplicativos são criados igualmente. Ou seja, nele não há diferença entre aplicações nativas e as demais aplicações, o que possibilita uma grande personalização do sistema, ao permitir a substituição completa de aplicativos nativos por outros, criados por terceiros. Além disto, todos os aplicativos têm acesso às mesmas funcionalidades (Meier, 2009). 3. Arquitetura A arquitetura do sistema (figura 3) é divida nos seguintes componentes: aplicativos, framework nativo, bibliotecas, runtime android, kernel linux.

https://www.oficinadanet.com.br/imagens/coluna/2588//3.jpg

Figura 3. Arquitetura do sistema Android.
    1. Aplicativos A camada de aplicativos é a camada mais alta da arquitetura do sistema, composta pelo conjunto de aplicativos nativos do sistema, dentre estes pode se citar: cliente de e-mail, calendário, mapas, browser e internet, despertador, jogos, e outros.
    2. Framework Nativo A camada de framework nativo disponibiliza aos desenvolvedores as mesmas APIs (Application Programming Interface ? Interface de Programação de Aplicativos) usadas para criar as aplicações originais do sistema. Este framework permite que o desenvolvedor tenha o mesmo acesso ao sistema, que os aplicativos da camada de aplicativos possuem. Este framework foi criado para abstrair a complexidade e simplificar o reuso de procedimentos. Essa camada funciona como um meio de ligação com a camada de bibliotecas do sistema que serão acessadas através de APIs contidas no framework. Entre as APIs podemos destacar: Location Manager: Usada para obter a posição geográfica do usuário. Como por exemplo, em aplicações que fazem uso de GPS. Telephony Manager: Informações sobre dispositivos como bateria e serviços de telefonia celular podem ser obtidos através dessa API. Window Manager: Responsável pelo gerenciamento de toda janela de uma aplicação. Content Providers: Responsável pela disponibilização dos dados através das aplicações tornando esses dados públicos. Quase todo tipo de dado é compartilhável, como áudio, vídeo, imagens e texto.
    3. Resource Manager: Todos os recursos que uma aplicação irá usar como áudio, vídeo, arquivos XML, são separados dela a fim de que sejam otimizados para ocupar menos espaço e demorar menos tempo para que sejam carregados. Essa API facilita o acesso a esses recursos. Notification Manager: Permite que uma aplicação exiba notificações, ative LEDs, luzes, sons ou vibração disponíveis no dispositivo. Activity Manager: Responsável pelo gerenciamento de cada atividade do sistema. No Android cada atividade é gerenciada através de uma pilha de atividades. Toda nova atividade criada vai para o topo de pilha de atividades e se torna uma running activity, o que quer dizer que será executada.
  1. Bibliotecas A plataforma também inclui uma coleção de bibliotecas C/C usadas pelos componentes do sistema. Essas bibliotecas são acessadas pelo programador via Java, através do framework do sistema. Essas bibliotecas são responsáveis por prover funcionalidades para manipulação de áudio, vídeo, gráficos, banco de dados e navegador.
  2. Android Runtime O Android Runtime permite que cada processo rode sua própria instância da maquina virtual. Embora no desenvolvimento de aplicativos seja utilizada a linguagem Java, as aplicações não são executadas em uma maquina virtual Java tradicional, e sim em outra chama de Dalvik. Essa maquina virtual é otimizada especialmente para dispositivos moveis. A plataforma Google Android permite o desenvolvimento de aplicativos na linguagem Java. No entanto, não existe uma JVM (Java Virtual Machine) inclusa no sistema, pois o Android tem sua própria maquina virtual, que é otimizada para execução de aplicativos móveis. Essa maquina virtual foi construída pelos engenheiros da Google, para obter um consumo mínimo de memória e isolamento de processos. Ela permite que as aplicações escritas em linguagem Java, sejam executadas normalmente.
  3. Kernel Linux A camada do Kernel é baseada em um Kernel Linux versão 2.6. Esta camada também atua como responsável pela abstração entre o hardware e os aplicativos e responsável pelos principais serviços do sistema como gerenciamento de memória e de processos. Várias funções do kernel são utilizadas diretamente pelo Android, mas muitas modificações foram feitas para otimizar memória e tempo de processamento das aplicações. Essas alterações incluem device drivers novos, adições no sistema de gerenciamento de energia e um sistema que permite finalizar processos de maneira criteriosa quando há pouca memória disponível. O Kernel Linux 2.6 foi escolhido por já conter uma grande quantidade de device drivers sólidos e por ter um bom gerenciamento de memória e processos.

Conceitos de uma aplicação para Android


Como dito anteriormente o desenvolvimento de aplicativos se da na linguagem Java. Quando o código Java é compilado para plataforma Android, é feita uma conversão de bytecod (.class) para Dalvik Executable (.dex) e logo após é criado um arquivo Android Package File (.apk) que é composto pelo arquivo .dex e outros arquivos dependentes, como imagens e arquivos XML.(Extensible Markup Language). Esse arquivo é o veiculo de distribuição para que usuários possam instalar uma aplicação em seu dispositivo. No entanto, o desenvolvedor não precisa se preocupar com estas conversões, pois a IDE (Integrated Development Environment) se encarrega deste serviço. Todo arquivo .apk contem um manifesto aonde são declarados todos os componentes da aplicação. Esse arquivo de manifesto é estruturado na linguagem XML, e também contem a especificação das bibliotecas usadas, permissões, versão e requisitos. Por padrão, cada aplicação é executada em um processo próprio e cada processo tem sua máquina virtual. Toda aplicação é referenciada por um ID de usuário Linux. Uma aplicação não tem um único ponto de entrada e são construídas utilizando componentes que somente são instanciados no momento em que se tornam necessário. Existem quatro tipos de componentes básicos: atividades, serviços, provedores de conteúdo e receptores de broadcast.

Uma atividade corresponde à interface com o usuário. Um serviço não possui uma interface visual, pois são utilizados para executar processamentos em segundo plano. Os provedores de conteúdo têm como função disponibilizar dados específicos de uma aplicação para outras aplicações. Por ultimo, os receptores de broadcast são componentes que ficam inativos e respondem a eventos. Todos os componentes são ativados através de mensagens assíncronas, exceto os provedores de conteúdo. Intent é o nome de um objeto que é responsável por conter uma mensagem com uma ação que se deseja executar. Para iniciar uma atividade é necessário enviar um intent cujo conteúdo especifique essa intenção. Existem dois tipos de intent: explícitos e implícitos. No primeiro, o componente que deve ser executado já é definido explicitamente. No segundo, a escolha do componente é feita pelo sistema operacional que, baseado em alguns critérios, determina qual componente responde melhor àquela intenção naquele momento. Quando um componente é executado, um processo com uma única thread é inciado. Todos os componentes de uma aplicação serão executadas nessa thread. O sistema pode destruir processos caso a memória do sistema começar a ficar escassa. Se um processo for destruído, todos os componentes associados a ele também serão eliminados.

Para determinar qual processo será excluído o Android leva em conta a importância do processo para o usuário, aonde será excluído aquele processo que contem uma atividade que não esta mais visível na tela. Cada componente pode ter seu estado alterado diversas vezes em seu ciclo de vida. O ciclo de vida começa quando ele é instanciado e termina quando é destruído. Atividades possuem três estados possíveis (figura 4): ativo, pausado e parado. As mudanças entre estes estados são notificadas através de sete métodos, utilizados para as ações apropriadas a uma mudança de estado.

https://www.oficinadanet.com.br/imagens/coluna/2588//td_4.jpg

Figura 4. Ciclo de vida de uma atividade.


Durante o tempo entre as chamadas dos métodos onStart() e onStop(), a atividade pode ser vista pelo usuário. Entre os métodos onResume() e onPause() a atividade está na frente de todas as outras atividades e o usuário está interagindo com ela. E, devido ao fato de o onPause() ser o único método cuja chamada é garantida antes do processo ser eventualmente destruído, ele deve ser utilizado para armazenar, de
forma persistente, dados para posterior restauração.

Os serviços também possuem métodos de ciclo de vida que podem ser implementados para responder as mudanças de estado. Os receptores de broadcast possuem apenas um método de ciclo de vida que é chamado no momento em que uma mensagem chega para ele e o componente é considerado ativo apenas durante a execução deste método, ou seja, enquanto reage a mensagem.

Interface com o usuário


A interface em um sistema Android é construída utilizando uma hierarquia de objetos View e ViewGoup (figura 5). A representação desses objetos se da em forma de árvore aonde o objeto View representa as folhas, e o objetos ViewGoup os ramos. A classe ViewGroup é responsável pelos layouts, que serão utilizados para organizar os objetos na tela. Já a classe View irá controlar uma área especifica da tela, servindo de base para implementação de objetos como botões, campos de texto, chamados de widgets.

https://www.oficinadanet.com.br/imagens/coluna/2588/td_4.jpg

Figura 5. Árvore de objetos View e ViewGroup.



Os objetos podem ser organizados de forma linear, relativa ou absoluta, dentro de uma região especifica na tela. Embora exista a possibilidade de organizar esses objetos em um lugar especifico na tela isso não é recomendado. Em sistemas para dispositivos móveis, uma das grandes preocupações é a adaptação da interface (resolução e tamanho distintos), pois as dimensões variam de um aparelho a outro. O sistema Android disponibiliza maneiras de se animar uma aplicação. Uma das possibilidades é uma animação chamada de quadro a quadro, que será gerada através de imagens que vão se alternando em um intervalo de tempo. Também é possível utilizar a animação Tween, que executa uma serie de transformações simples (posição, tamanho, rotação e transparência) em um objeto View A plataforma também conta com recursos para internacionalização, aonde é possível disponibilizar recursos dependendo da língua ou das configurações do dispositivo.

Armazenamento de informações


Android não contem um sistema de arquivos comum, como é encontrado em sistemas desktop. Todos os dados são visíveis apenas para uma aplicação. Quando uma aplicação necessita acessar uma informação presente ou outra aplicação, é utilizado um componente do tipo provedor de conteúdo. Uma aplicação pode também armazenar dados em um dispositivo de memória removível, ou internamente no aparelho usando arquivos. A aplicação pode, alternativamente, com o SQLite (banco de dados SQL embutido escrito na linguagem C), armazenar informações em tabelas em um banco de dados. A plataforma suporta ainda o acesso a operações de rede que podem ser utilizadas para guardar ou requisitar dados.

Provedores de localização


A plataforma conta com provedores de localização para obter a posição corrente do dispositivo. Para esse suporte, geralmente é usado o GPS e a rede da operadora de telefonia móvel. Estes provedores variam dependendo das especificações do dispositivo. Vale ressaltar que, para utilizar um provedor de localização, é necessária uma respectiva permissão. Após escolher um provedor de localização, é possível receber informações sobre mudanças de localização, determinar um tempo mínimo e uma distancia mínima entre as atualizações. O componente central de localização é o objeto LocationManager, que prove uma forma de listar os provedores de localização disponíveis e registrar para receber informações sobre localização, aproximação de um determinado local definido em termos de latitude e longitude. A Google Maps disponibiliza uma biblioteca para exibição de mapas na tela. Ela não é padrão da plataforma, e é necessário se registrar para obter uma chave para poder usá-la em uma aplicação. O componente MapView exibe um mapa cujo conteúdo é requisitado em tempo real utilizando uma conexão com a internet, disponibilizando métodos para controlar o mapa e uma classe especial (Overlay) que implementa uma camada sobre ele na qual podem ser desenhados diversos elementos.

Considerações finais


No decorrer desse projeto foram destacadas as principais características desse sistema operacional, junto com suas ferramentas de desenvolvimento, dando ênfase ao bom momento em que se encontra o mercado atual dos dispositivos móveis. Com um evidente crescimento no desenvolvimento de dispositivos móveis, o desenvolvimento de aplicativos para celulares se torna um grande nicho de mercado que vem crescendo ano após ano. Apesar do principal concorrente do sistema Android o IPhone ter o triplo de mercado ocupado atualmente, o sistema operacional Android se torna um atrativo para esse mercado, principalmente pelo seu conceito de integração e flexibilidade embutidos em seu sistema, fornecendo total acesso ao desenvolvedor.

Autor:


Josué Fernandes Dall?Agnese - [email protected]
Universidade de Santa Cruz do Sul (UNISC) Santa Cruz do Sul ? RS ? Brasil

Referências:

    • O globo. A década em telefones celulares, Disponível em: http://oglobo.globo.com, Acesso em: junho de 2010. LECHETA, Ricardo.
    • Google Android: aprenda a criar aplicações para dispositivos móveis com o Android SDK. São Paulo: Novatec, 2009. OHA. Alliance Overview. Disponível em: http://www.openhandsetalliance.com/oha_overview.html. Acesso em: junho de 2010. OHA.
    • Android Overview. Disponível em:
      . Acesso em: junho de 2010. HAMBLEN, Matt.
    • Android ajuda mercado de smartphones a bater recorde no terceiro trimestre. IDG Now, 6 nov. 2009. Disponível em: http://idgnow.uol.com.br. Acesso em: junho de 2010. ARIMA, Kátia.
    • Qual será o seu próximo celular? Por que o Google, a Apple e a Palm têm cada vez mais chances de disputar essa resposta. Info Exame, São Paulo, v. 1, n. 276, p. 24-41, fev. 2009.
    • MEIER, Reto. Professional Android Application Development. Indianapolis: Wiley Publishing, 2009. Werneck, Rafael.
    • Desenvolvimento de Aplicativo para Smartphone com a Plataforma Android. Disponível em: http://www.icad.puc-rio.br/~projetos/android/files/monografia.pdf. Acesso em junho de 2010.
    • Android Developers. Disponível em:

http://developer.android.com/index.html