Características e Arquitetura Android
Autor: Michelly | Publicado: 2011-07-21T15:58:00-07:00


Características e Arquitetura Android
No post anterior, citei o SDK, que é um kit de desenvolvimento e através dele, temos as ferramentas e APIs necessárias para desenvolver aplicações em Java para o Android.A plataforma Android, possui alguns recursos:
- Application framework: possibilita a substituição e reutilização de componentes.
- Máquina Virtual Dalvik: otimizada para dispositivos móveis.
- Navegador Web Integrado (Browser): baseado na engine open source &nbsp;webkit.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; - Gráficos Otimizados: possui uma biblioteca 2D e 3D baseada na especificação&nbsp;&nbsp;&nbsp; &nbsp; OpenGL ES 1.0 (aceleração de hardware é opcional).
- SQLite: para guardar dados estruturados, ou seja, armazenar dados no formato de estruturas relacionais.
- Suporte multimídia: para vídeo, áudio e formatos de imagem (MPEG4, H.264, MP3, AAC, AMR, JPG, PNG, GIF).
- Telefonia GSM (dependente de hardware).
- Bluetooth, EDGE, 3G, e WiFi (dependente de hardware).
- Câmera, GPS, compasso, e acelerômetro (dependente de hardware).
- Rico Ambiente de Desenvolvimento: incluindo um emulador de dispositivo, ferramentas de depuração, analisador de memória e performance, e um plugin para o Eclipse (ADT).

Arquitetura Android

De acordo com a figura, podemos visualizar a estrutura da arquitetura Android que é dividida em camadas: Applications, Application Framework, Libraries, Android Runtime e Linux Kernel.
Applications: Localiza-se nesta camada, um conjunto de aplicações padrões, como - um cliente de e-mail, programa de SMS, calendário, mapas, navegador, contatos, agenda, entre outros (todos desenvolvidos em Java).
Application Framework: Esta camada enfatiza a reutilização de código, pois é nesta camada que se encontram os componentes que permitirão que novas estruturas sejam utilizadas futuramente. Abaixo o conjunto de componentes desta camada:
* Um rico e grande conjunto de componentes gráficos que podem ser utilizado para construir uma aplicação, e também listas, grids, caixas de textos, botões, e até um navegador web embutido. 
* Provedores de conteúdo que habilitam às aplicações acessar dados de outras aplicações (Ex: Contatos) ou compartilhar seus próprios dados.
* Gerenciador de recursos que prove acesso a recursos não codificados como strings, gráficos e arquivos de layout.
* Um gerenciador de notificação que permite que todas as aplicações exibam mensagens de alerta personalizáveis na barra de status.
* Um gerenciador de atividade que gerencia o ciclo de vida das aplicações e permite controlar os recursos previamente alocados, sendo que caso eles não estejam sendo mais utilizados, os mesmos são deslocados para liberar memória.
Libraries e Android Runtime: Nesta camada, encontram-se as bibliotecas escritas em C/C++e o ambiente de execução (Composta pelas bibliotecas e pela máquina virtual Dalvik). Toda aplicação Android roda em seu próprio processo, com sua própria instância da máquina virtual.
- System C library (Biblioteca de Sistema C) – uma implementação derivada da biblioteca C padrão sistema (libc) do BSD sintonizada para dispositivos rodando Linux.
- Media Libraries (Bibliotecas de Mídias) – baseado no PacketVideo’s OpenCORE; as bibliotecas suportam a maioria dos formatos de áudio e vídeo, imagens como MPEG4, H.264, MP3, AAC, AMR, JPG, e PNG.
- Surface Manager (Gerenciador de Superfície) – gerencia o acesso ao subsistema de exibição bem como as múltiplas camadas de aplicações 2D e 3D.
- LibWebCore – um web browser engine utilizado tanto no Android Browser quanto para exibições web.
- SGL – uma engine de gráficos 2D.
- 3D libraries – uma implementação baseada na especificação OpenGL ES 1.0 APIs, as bibliotecas utilizam aceleração 3D via hardware (quando disponível) ou o software de renderização 3D altamente otimizado incluído no Android.
- FreeType – renderização de fontes bitmap e vetoriais de fontes.
- SQLite – um poderoso e leve engine de banco de dados relacional disponívelpara todas as aplicações.
Linux Kernel: Esta é a base da camada. O Kernel também atua como uma camada de abstração entre o hardware e o software. É utilizada a versão 2.6, onde fornece serviços do sistemas, como segurança, gerenciamento de memória, gerenciamento de processos, pilhas de redes, etc.
A tabela abaixo apresenta as principais APIs Android

Nossa !!! Haja teoria.No próximo post, vamos entender a organização do código no Eclipse.
Até breve !