SlideShare ist ein Scribd-Unternehmen logo
1 von 7
Downloaden Sie, um offline zu lesen
Introduc¸˜ao a Arquitetura Android
Felipe Johann, Maycon Viana Bordin
1
Bacharelando em Sistemas de Informac¸˜ao – Sociedade Educacional Trˆes de Maio
Caixa Postal 153 – CEP 98.910-000 – Trˆes de Maio – RS – Brasil
{fedujo, mayconbordin}@gmail.com
Resumo. Sendo o sistema operacional com maior presenc¸a entre os smart-
phones em todo o mundo, desenvolver aplicac¸˜oes para o Android tem se tor-
nado cada vez mais interessante. Entretanto, para tirar o melhor proveito desta
plataforma ´e importante conhecer como ela funciona internamente. Este ar-
tigo aborda os principais componentes que fazem parte do software stack do
Android, comec¸ando pelo kernel Linux e a Dalvik VM at´e os componentes prin-
cipais de uma aplicac¸˜ao. E mostra as estrat´egias adotadas pela plataforma
para lidar com caracter´ısticas inerentes aos dispositivos m´oveis, como o tempo
de bateria e a baixa capacidade de mem´oria.
Abstract. As the operating system with the largest presence among smartphones
worldwide, developing applications for Android has become increasingly inter-
esting. However, to take advantage of this platform it is important to know how
it works internally. This paper discusses the main components that are part of
the Android software stack, starting with the Linux kernel and the Dalvik VM
to the main components of an application. And shows the strategies adopted by
the platform to deal with inherent characteristics of mobile devices such as the
battery life and low memory capacity.
1. Introduc¸˜ao
O Android ´e um sistema operacional para dispositivos m´oveis open source baseado em
Linux e desenvolvido pela Open Handset Alliance, liderada pelo Google [Br¨ahler 2010].
No Android, aplicac¸˜oes s˜ao desenvolvidas em linguagem de programac¸˜ao Java,
utilizando o Android SDK, e executam na m´aquina virtual Dalvik. O Android, entretanto,
possui suporte para o desenvolvimento de aplicac¸˜oes nativas, escritas em C e C++, atrav´es
do Android NDK [Br¨ahler 2010].
Aplicativos escritos para Android s˜ao distribu´ıdos atrav´es da loja de aplicativos do
Google Play, antigamente conhecida como Android Market, e que conta atualmente com
mais 500.000 aplicativos, tanto pagos como gratuitos, e que j´a foram baixados mais de 15
bilh˜oes de vezes [Lunden 2012, Google 2012].
O sistema operacional tamb´em est´a presente em mais de 56% dos smartphones
em todo o mundo, tornando o Android uma das plataformas mais interessantes para o
desenvolvimento de aplicativos [Gartner 2012]. E para tanto, ´e importante conhecer como
este sistema operacional que vem ganhando tanta popularidade funciona, para a criac¸˜ao
de aplicativos que fac¸am bom uso dos recursos dispon´ıveis.
Nas pr´oximas sec¸˜oes deste artigo ser˜ao analisados em detalhes o funcionamento
dos principais componentes da arquitetura do Android.
2. Arquitetura
Na realidade, como ´e colocado em [Android Developers 2012], o Android ´e mais do que
um sistema operacional. Ele ´e na verdade um software stack composto por cinco camadas,
como mostra a Figura 1. A base do Android ´e uma vers˜ao modificada do kernel Linux 2.6,
que provˆe v´arios servic¸os essenciais, como seguranc¸a, rede e gerenciamento de mem´oria
e processos, al´em de uma cadamada de abstrac¸˜ao de hardware para as outras camadas de
software.
Figura 1. Arquitetura Android.
Acima do kernel ficam as bibliotecas C/C++ utilizadas por diversos dos compo-
nentes do sistema, como: uma implementac¸˜ao da biblioteca padr˜ao do C (libc), mas com
licenc¸a BSD e otimizada para dispositivos embarcados; bibliotecas para suporte a for-
matos de ´audio, v´ıdeo e imagens; um gerenciador que intermedia o acesso ao display e
comp˜oe as camadas de imagem 2D e 3D; o engine para navegadores WebKit; bibliotecas
para gr´aficos 2D (SGL) e 3D (OpenGL ES); um renderizador de fontes bitmap e vetoriais;
e o banco de dados relacional SQLite [Android Developers 2012].
No Android, aplicac¸˜oes escritas em Java s˜ao executadas em sua pr´opria m´aquina
virtual, que por sua vez ´e executada em seu pr´oprio processo no Linux, isolando-a de out-
ras aplicac¸˜oes e facilitando o controle de recursos [Android Developers 2012]. O Android
Runtime ´e composto pela m´aquina virtual chamada Dalvik VM, onde as aplicac¸˜oes s˜ao
executadas, e por um conjunto de bibliotecas que fornecem boa parte das funcionalidades
encontradas nas bibliotecas padr˜ao do Java [Android Developers 2012].
Na camada acima, escrita em Java, fica a framework de aplicac¸˜oes, que fornece
todas as funcionalidades necess´arias para a construc¸˜ao de aplicativos, atrav´es das bibliote-
cas nativas. Aplicac¸˜oes Android podem possuir quatro tipos de componentes: activities,
services, content providers e broadcast receivers. Al´em destas pec¸as fundamentais em
uma aplicac¸˜ao, existem os recursos, que s˜ao compostos por layouts, strings, estilos e ima-
gens e o arquivo de manifesto, que declara os componentes da aplicac¸˜ao e os recursos do
dispositivo que ela ir´a utilizar [Android Developers 2012].
3. Kernel Linux
Como fora colocado na sec¸˜ao anterior, o Android utiliza o kernel Linux para prover v´arios
servic¸os as aplicac¸˜oes que nele s˜ao executadas. Entretanto, esta vers˜ao do kernel Linux
foi modificada, de modo a melhor atender as necessidades existentes em dispositivos
m´oveis, como as de gerenciamento de mem´oria e energia e do ambiente de execuc¸˜ao
[Br¨ahler 2010].
Em [McDermott 2008] ´e descrito o processo de portabilidade do Android 1.0
para um dispositivo Nokia, evidenciando que o kernel do Android cont´em 75 arquivos
modificados, al´em de 88 arquivos adicionais com relac¸˜ao ao kernel original. Dentre
as modificac¸˜oes est˜ao: uma CPU virtual, chamada Goldfish, que executa instruc¸˜oes
ARM926T, e que ´e utilizada pelo emulador Android; o sistema de arquivos de alto de-
sempenho para mem´orias flash YAFFS2 (Yet Another Flash File System, 2nd edition);
correc¸˜ao de bugs relacionados ao Bluetooth, al´em da adic¸˜ao de func¸˜oes para controle de
acesso e debug.
O kernel utilizado pelo Android tamb´em introduz o Binder, um novo mecanismo
para a comunicac¸˜ao entre processos (IPC - Inter-process communication) e chamada re-
mota de m´etodos, que permite que um processo possa chamar uma rotina em outro pro-
cesso, e que ´e respons´avel pela identificac¸˜ao do m´etodo a ser invocado e da passagem dos
argumentos entre os processos [eLinux 2012].
Com relac¸˜ao a mem´oria, o Android introduz um mecanismo (OOM – Out-of-
Memory Handler) para terminar processos quando na falta de mem´oria, al´em do ashmem
e pmem. O primeiro deles ´e um alocador de mem´oria compartilhada, com melhor suporte
a dispositivos com pouca capacidade de mem´oria. J´a o segundo ´e um alocador de mem´oria
de processo, e ´e utilizado para o gerenciamento de grandes regi˜oes cont´ıguas de mem´oria
f´ısica compartilhadas entre o espac¸o do usu´arios e drivers do kernel [eLinux 2012].
Al´em das modificac¸˜oes descritas acima, o kernel Linux do Android tamb´em rece-
beu modificac¸˜oes relacionadas ao gerenciamento de energia, devido a pr´opria natureza
dos dispositivos m´oveis, e depurac¸˜ao de erros, com a introduc¸˜ao do Android Debug
Bridge, um protocolo executado sobre um link USB, al´em de um sistema de log sepa-
rado do sistema do Linux e que armazena mensagens no buffer do kernel [eLinux 2012].
4. Dalvik VM
Apesar de as aplicac¸˜oes para Android serem escritas em Java, a Dalvik VM n˜ao pode ser
considerada uma JVM (Java Virtual Machine), pois ela n˜ao interpreta Java bytecodes. Ao
inv´es disso, a ferramenta dx transforma os arquivos .class compilados com um compilador
Java normal em arquivos .dex, estes espec´ıficos para execuc¸˜ao na Dalvik VM.
A Dalvik VM ´e otimizada para dispositivos com pouca mem´oria, e foi desenhada
de modo a permitir a execuc¸˜ao de v´arias instˆancias ao mesmo tempo de forma eficiente.
Ela tamb´em deixa a cargo do kernel Linux algumas tarefas, como o gerenciamento de
mem´oria e threads e para o isolamento entre processos [DalvikVM 2012].
Uma das medidas tomadas para salvar mem´oria foi a de criar constant pools com-
partilhados para tipos espec´ıficos. Uma constant pool armazena valores literais constantes
utilizados em uma classe, como strings e nomes de classes, interfaces, m´etodos e atribu-
tos. E ao utilizar constant pools compartilhados, ao inv´es de um para cada arquivo .class,
como ´e feito com bytecodes Java, evita-se a duplicac¸˜ao de constantes [Ehringer 2010].
E como aponta [Ehringer 2010], os constant pools nos bytecodes Java representam
mais de 61% do seu tamanho total, justificando as otimizac¸˜oes que podem ser feitas, tanto
para a reduc¸˜ao da mem´oria necess´aria como para reduzir o tempo de inicializac¸˜ao de uma
aplicac¸˜ao.
Outra estrat´egia utilizada para a otimizac¸˜ao de aplicativos ´e o compartilhamento
de c´odigo entre as instˆancias da VM. Isso ´e feito atrav´es de um processo chamado Zy-
gote, que ´e pai de todas as instˆancias da Dalvik VM e ´e inicializado juntamente com o
sistema, carregando todas as classes das bibliotecas que provavelmente ser˜ao utilizadas
com frequˆencia pelos aplicativos. Assim, quando uma aplicac¸˜ao for iniciada, um co-
mando ´e enviado ao Zygote, que faz um fork, criando um processo que se torna uma nova
Dalvik VM, minimizando o tempo de inicializac¸˜ao [Br¨ahler 2010, Ehringer 2010].
Esta estrat´egia assume que estas classes das bibliotecas compartilhadas ser˜ao ape-
nas lidas pelos processos filhos do Zygote. Entretanto, caso um processo resolva escrever
em uma dessas classes, a mem´oria compartilhada do Zygote correspondente a classe ´e
copiada para o processo filho para que ele ent˜ao possam realizar as operac¸˜oes de escrita.
Esse comportamento, conhecido como copy-on-write, evita a duplicac¸˜ao desnecess´aria de
c´odigo sem, entretanto, comprometer a seguranc¸a e correto funcionamento das aplicac¸˜oes
[Ehringer 2010].
O isolamento entre as aplicac¸˜oes se estende at´e o garbage collector (GC), que ´e
executado em cada VM de forma separada, evitando que GCs de outros processos interfi-
ram na execuc¸˜ao de um determinado GC. Cada instˆancia da VM possui a sua pr´opria pilha
de mem´oria, al´em da pilha compartilhada (do Zygote) e a coleta da mem´oria que n˜ao ´e
mais utilizada ´e feita atrav´es de mark bits que informam ao GC quais objetos devem ser
removidos, um mecanismo ´util, pois mant´em intocada a mem´oria compartilhada do Zy-
gote [Maia et al. 2010]. Antes da vers˜ao Gingerbread, toda vez que o GC era executado,
as threads do aplicativo eram paradas, inconveniˆencia que foi removida com a introduc¸˜ao
do GC concorrente [Dubroy 2011].
5. Framework de Aplicac¸˜oes
Esta camada do stack Android ´e um conjunto de ferramentas que fornecem v´arios servic¸os
para os aplicativos, visando o reuso de componentes [Android Developers 2012].
Aplicac¸˜oes normalmente s˜ao compostas por atividades (Activity). No Android
uma atividade ´e uma ac¸˜ao espec´ıfica que um usu´ario pode realizar dentro de um aplicativo.
Estas ac¸˜oes podem incluir a inicializac¸˜ao de outras atividades, tanto dentro como fora da
aplicac¸˜ao a qual ela pertence, atrav´es de intenc¸˜oes (Intent), criando o que se chama de
tarefa. Uma tarefa pode conter v´arias atividades, que s˜ao organizadas em uma pilha na
ordem em que foram criadas, permitindo assim que o usu´ario volte para atividades em
que estava anteriormente [Android Developers 2012].
Quando uma uma nova tarefa ´e iniciada ou o usu´ario volta para a tela inicial,
a tarefa anteriormente em primeiro plano passa para o segundo plano. Uma tarefa em
segundo plano pode voltar ao primeiro plano e v´arias tarefas podem estar em segundo
plano ao mesmo tempo. Entretanto, se muitas tarefas estiverem em segundo plano, o
sistema pode comec¸ar a destruir atividades para recuperar mem´oria, fazendo com que as
atividades percam seus estados, o que n˜ao significa que o usu´ario n˜ao possa mais navegar
de volta a esta atividade [Android Developers 2012].
Todo o ciclo de vida das atividades, bem como a organizac¸˜ao das mesmas em pil-
has e tarefas ´e de responsabilidade do Activity Manager, visto na Figura 1. Al´em dele
existem ainda: Package Manager, respos´avel por manter o registro de todas as aplicac¸˜oes
instaladas no dispositivo; Windows Manager, que gerencia a tela do dispositivo e cria su-
perf´ıcies para as aplicac¸˜oes em execuc¸˜ao; Telephony Manager, fornece a outras aplicac¸˜oes
servic¸os relacionados com telefonia; Content Provider, para o compartilhamento de da-
dos entre aplicac¸˜oes; Resource Manager, que provˆe acesso a tudo aquilo que faz parte de
um aplicativo e que n˜ao seja c´odigo (recursos), como arquivos XML, bitmaps ou outros
arquivos, como sons [Khan et al. 2010].
Existe ainda o View System, que fornece um conjunto b´asico de views que podem
ser utilizadas e extendidas por aplicac¸˜oes, incluindo: listas, caixas de texto, tabelas e
bot˜oes. E o Notification Manager, que permite que uma aplicac¸˜ao notifique o usu´ario
sobre algum evento atrav´es de vibrac¸˜ao, piscar de LEDs, tocar de algum som ou um ´ıcone
na barra de status [Khan et al. 2010].
Al´em da Activity e do Content Provider, existem outros dois tipos de componentes
de aplicac¸˜ao: os Services, que diferentemente de atividades, n˜ao possuem uma interface
de usu´ario e s˜ao destinados para a execuc¸˜ao em segundo plano de operac¸˜oes de longa
durac¸˜ao ou para trabalhar com processos remotos, como a comunicac¸˜ao com web ser-
vices; e os Broadcast Receivers, que s˜ao componentes que respondem a an´uncios feitos
para todo o sistema, como o an´uncio de que a tela se desligou ou de que a bateria est´a
fraca [Android Developers 2012].
6. Interac¸˜ao entre as Camadas
Segundo [Texas Instruments 2011], existem trˆes ambientes em tempo de execuc¸˜ao com
relac¸˜ao a comunicac¸˜ao entre camadas. No primeiro dos ambientes, uma aplicac¸˜ao ir´a
fazer uma chamada atrav´es do Binder IPC (implicando no carregamento desta biblioteca
em mem´oria) a um Runtime Service, que por sua vez far´a uma chamada a um Native
Service Binding, atrav´es do JNI (Java Native Interface), que ir´a carregar a biblioteca
HAL (Hardware Abstraction Layer) correspondente ao servic¸o solicitado, que finalmente
far´a a chamada ao driver no kernel.
A Figura 2 ilustra um exemplo de interac¸˜ao entre as camadas, comec¸ando na
aplicac¸˜ao, que requisita dados sobre a localizac¸˜ao do dispositivo. Neste caso a localizac¸˜ao
ser´a determinada atrav´es do GpsLocationProvider, mas este servic¸o poderia tamb´em ter
sido fornecido atrav´es do NetworkLocationProvider. Neste caso, o provedor far´a uma
chamada para a biblioteca nativa homˆonima que carregar´a a biblioteca que abstrai as fun-
cionalidades fornecidas pelo driver no kernel.
Todas as funcionalidades dos drivers s˜ao abstra´ıdas atrav´es da HAL. Isso evita que
outras partes do sistema que utilizam esses drivers precisem ser alterados toda vez que os
Figura 2. Exemplo de interac¸ ˜ao entre camadas no Android.
drivers forem diferentes, levando em conta que o Android funciona em um leque muito
grande de dispositivos [Texas Instruments 2011].
No segundo ambiente, as chamadas feitas pelo Runtime Service atrav´es de JNI
s˜ao direcionadas ao Native Service Binding, que ent˜ao faz uso do Binder IPC para se
comunicar com o Native Service, que carrega a biblioteca HAL dinˆamicamente, que por
sua vez faz a chamada ao driver. J´a no terceiro ambiente a ´unica diferenc¸a ´e que a chamada
n˜ao ´e mais feita a um Native Service, mas a um Native Daemon, e a comunicac¸˜ao ocorre
atrav´es de sockets [Texas Instruments 2011].
7. Conclus˜ao
Ao longo dos anos a computac¸˜ao m´ovel evoluiu muito, deixando de ser apenas um meio
de comunicac¸˜ao atrav´es da voz, para se tornar uma m´ıdia que permitiu a criac¸˜ao de uma
classe nova de aplicac¸˜oes. Ainda assim, muitas das suas restric¸˜oes continuam presentes.
Este artigo apresentou algumas das estrat´egias e mecanismos presentes na arquitetura
Android e que buscam amenizar estas restric¸˜oes, principalmente aquelas relacionadas
com economia de bateria e mem´oria.
O artigo tamb´em fez uma breve introduc¸˜ao aos principais componentes utilizados
na construc¸˜ao de aplicac¸˜oes. E muito embora o desenvolvimento de aplicac¸˜oes em An-
droid exija o conhecimento do funcionamento destes componentes, o fato de a linguagem
de programac¸˜ao utilizada ser Java e de boa parte das bibliotecas padr˜ao estarem presentes
no Android reduzem significativamente a curva de aprendizado necess´aria.
Referˆencias
Android Developers (2012). The developer’s guide. Dispon´ıvel em:
<http://developer.android.com/guide/index.html>. Acesso em: maio 2012.
Br¨ahler, S. (2010). Analysis of the android architecture.
DalvikVM (2012). Dalvik virtual machine. Dispon´ıvel em:
<http://www.dalvikvm.com/>. Acesso em: maio 2012.
Dubroy, P. (2011). Memory management for android apps. Google I/O 2011. Dispon´ıvel
em: <http://bit.ly/Md5QDX>. Acesso em: maio 2012.
Ehringer, D. (2010). The dalvik virtual machine architecture. Dispon´ıvel em:
<http://www.kiddai.com/NCTU/ebl/dex/The Dalvik Virtual Machine.pdf>. Acesso
em: maio 2012.
eLinux (2012). Android portal. Dispon´ıvel em: <http://elinux.org/Android Portal>.
Acesso em: maio 2012.
Gartner (2012). Gartner says worldwide sales of mobile phones declined 2 percent in first
quarter of 2012; previous year-over-year decline occurred in second quarter of 2009.
Dispon´ıvel em: <http://www.gartner.com/it/page.jsp?id=2017015>. Acesso em: maio
2012.
Google (2012). Introducing google play: All your entertainment, anywhere you
go. Dispon´ıvel em: <http://googleblog.blogspot.com.br/2012/03/introducing-google-
play-all-your.html>. Acesso em: maio 2012.
Khan, S., Khalid, S. H., Nauman, M., Khan, S., and Alam, M. (2010). Analysis report
on android application framework and existing security architecture. Technical report,
Security Engineering Research Group, Pakistan.
Lunden, I. (2012). Google play about to pass 15 billion app downloads? pssht! it did that
weeks ago. TechCrunch. Dispon´ıvel em: <http://techcrunch.com/2012/05/07/google-
play-about-to-pass-15-billion-downloads-pssht-it-did-that-weeks-ago/>. Acesso em:
maio 2012.
Maia, C., Nogueira, L. M., and Pinho, L. M. (2010). Evaluating android os for embedded
real-time systems. Technical report, Polytechnic Institute of Porto (ISEP-IPP), Porto,
Portugal.
McDermott, P. (2008). Porting android to a new device. Dispon´ıvel em:
<http://www.linuxfordevices.com/c/a/Linux-For-Devices-Articles/Porting-Android-
to-a-new-device/>. Acesso em: maio 2012.
Texas Instruments (2011). Android memory analysis. Dispon´ıvel em:
<http://processors.wiki.ti.com/index.php/Android Memory Analysis>. Acesso
em: maio 2012.

Weitere ähnliche Inhalte

Was ist angesagt?

27072010221224.introdução a java aula 1
27072010221224.introdução a java   aula 127072010221224.introdução a java   aula 1
27072010221224.introdução a java aula 1
bibliotecadobarao
 
Re pensando-virtualização-através-linux containers
Re pensando-virtualização-através-linux containersRe pensando-virtualização-através-linux containers
Re pensando-virtualização-através-linux containers
Francisco Gonçalves
 
Introdução à plataforma Android
Introdução à plataforma AndroidIntrodução à plataforma Android
Introdução à plataforma Android
Natanael Fonseca
 
Programando Android - Aula 2
Programando Android - Aula 2Programando Android - Aula 2
Programando Android - Aula 2
Kalil Maciel
 

Was ist angesagt? (19)

PALESTRA :: Desenvolvimento para plataforma Android
PALESTRA :: Desenvolvimento para plataforma Android PALESTRA :: Desenvolvimento para plataforma Android
PALESTRA :: Desenvolvimento para plataforma Android
 
Introdução ao Android
Introdução ao AndroidIntrodução ao Android
Introdução ao Android
 
Android
Android Android
Android
 
Android Core Aula 7 - Aplicações (Services, Broadcast Receivers, NDK/JNI)
Android Core Aula 7 - Aplicações (Services, Broadcast Receivers, NDK/JNI)Android Core Aula 7 - Aplicações (Services, Broadcast Receivers, NDK/JNI)
Android Core Aula 7 - Aplicações (Services, Broadcast Receivers, NDK/JNI)
 
Trabalho android
Trabalho androidTrabalho android
Trabalho android
 
Android
AndroidAndroid
Android
 
Sistema Operacional Android
Sistema Operacional AndroidSistema Operacional Android
Sistema Operacional Android
 
Google android pdf
Google android pdfGoogle android pdf
Google android pdf
 
Desenvolvimento Android: Aula 01
Desenvolvimento Android: Aula 01Desenvolvimento Android: Aula 01
Desenvolvimento Android: Aula 01
 
Android
AndroidAndroid
Android
 
Tutorial de Instalação Eclipse + Android SDK
Tutorial de Instalação Eclipse + Android SDKTutorial de Instalação Eclipse + Android SDK
Tutorial de Instalação Eclipse + Android SDK
 
Introdução ao android
Introdução ao androidIntrodução ao android
Introdução ao android
 
27072010221224.introdução a java aula 1
27072010221224.introdução a java   aula 127072010221224.introdução a java   aula 1
27072010221224.introdução a java aula 1
 
Re pensando-virtualização-através-linux containers
Re pensando-virtualização-através-linux containersRe pensando-virtualização-através-linux containers
Re pensando-virtualização-através-linux containers
 
Introdução à plataforma Android
Introdução à plataforma AndroidIntrodução à plataforma Android
Introdução à plataforma Android
 
Descomplicando o Android
Descomplicando o AndroidDescomplicando o Android
Descomplicando o Android
 
Desenvolvendo Soluções com Android
Desenvolvendo Soluções com AndroidDesenvolvendo Soluções com Android
Desenvolvendo Soluções com Android
 
Programando Android - Aula 2
Programando Android - Aula 2Programando Android - Aula 2
Programando Android - Aula 2
 
Seminário SD - Ambiente de Desenvolvimento para Android
Seminário SD - Ambiente de Desenvolvimento para AndroidSeminário SD - Ambiente de Desenvolvimento para Android
Seminário SD - Ambiente de Desenvolvimento para Android
 

Ähnlich wie Introdução a Arquitetura Android

Tutorial: Desenvolvimento de aplicacoes moveis com Java
Tutorial: Desenvolvimento de aplicacoes moveis com JavaTutorial: Desenvolvimento de aplicacoes moveis com Java
Tutorial: Desenvolvimento de aplicacoes moveis com Java
Paulo César M Jeveaux
 
APRESENTACAO WALANEM ANDROID (1)
APRESENTACAO WALANEM ANDROID (1)APRESENTACAO WALANEM ANDROID (1)
APRESENTACAO WALANEM ANDROID (1)
Walanem Figueiredo
 

Ähnlich wie Introdução a Arquitetura Android (20)

Programação Android - Básico
Programação Android - BásicoProgramação Android - Básico
Programação Android - Básico
 
Android - Conceito e Arquitetura
Android - Conceito e ArquiteturaAndroid - Conceito e Arquitetura
Android - Conceito e Arquitetura
 
Programe seu androide
Programe seu androidePrograme seu androide
Programe seu androide
 
Programe seu androide
Programe seu androidePrograme seu androide
Programe seu androide
 
Android Core Aula 1 - Histórico, Arquitetura e Compilação da plataforma
Android Core Aula 1 - Histórico, Arquitetura e Compilação da plataformaAndroid Core Aula 1 - Histórico, Arquitetura e Compilação da plataforma
Android Core Aula 1 - Histórico, Arquitetura e Compilação da plataforma
 
Programação Desktop: Uma abordagem com Java
Programação Desktop: Uma abordagem com JavaProgramação Desktop: Uma abordagem com Java
Programação Desktop: Uma abordagem com Java
 
Tutorial: Desenvolvimento de aplicacoes moveis com Java
Tutorial: Desenvolvimento de aplicacoes moveis com JavaTutorial: Desenvolvimento de aplicacoes moveis com Java
Tutorial: Desenvolvimento de aplicacoes moveis com Java
 
Academia do Arquiteto - Implantando A.L.M. em uma semana!
Academia do Arquiteto - Implantando A.L.M. em uma semana!Academia do Arquiteto - Implantando A.L.M. em uma semana!
Academia do Arquiteto - Implantando A.L.M. em uma semana!
 
APRESENTACAO WALANEM ANDROID (1)
APRESENTACAO WALANEM ANDROID (1)APRESENTACAO WALANEM ANDROID (1)
APRESENTACAO WALANEM ANDROID (1)
 
Desenvolvimento de Aplicações com Visual Studio
Desenvolvimento de Aplicações com Visual StudioDesenvolvimento de Aplicações com Visual Studio
Desenvolvimento de Aplicações com Visual Studio
 
01 - Introdução a programação para internet v1.1
01 - Introdução a programação para internet v1.101 - Introdução a programação para internet v1.1
01 - Introdução a programação para internet v1.1
 
Conisli
ConisliConisli
Conisli
 
Dispositivos Móveis - BlackBerry
Dispositivos Móveis - BlackBerryDispositivos Móveis - BlackBerry
Dispositivos Móveis - BlackBerry
 
Android
AndroidAndroid
Android
 
Mod06 licao01-apostila
Mod06 licao01-apostilaMod06 licao01-apostila
Mod06 licao01-apostila
 
Introdução a JavaME
Introdução a JavaMEIntrodução a JavaME
Introdução a JavaME
 
Cursos
CursosCursos
Cursos
 
Gt 10 FCSI- ambiente de desenvolvimento
Gt 10  FCSI- ambiente de desenvolvimentoGt 10  FCSI- ambiente de desenvolvimento
Gt 10 FCSI- ambiente de desenvolvimento
 
Docker: Introdução à Conteinerização de Apps e Nuvem.
Docker: Introdução à Conteinerização de Apps e Nuvem.Docker: Introdução à Conteinerização de Apps e Nuvem.
Docker: Introdução à Conteinerização de Apps e Nuvem.
 
Apresentação Docker
Apresentação DockerApresentação Docker
Apresentação Docker
 

Mehr von Maycon Viana Bordin

A Benchmark Suite for Distributed Stream Processing Systems
A Benchmark Suite for Distributed Stream Processing SystemsA Benchmark Suite for Distributed Stream Processing Systems
A Benchmark Suite for Distributed Stream Processing Systems
Maycon Viana Bordin
 
Algoritmos de Consenso: Paxos vs RAFT
Algoritmos de Consenso: Paxos vs RAFTAlgoritmos de Consenso: Paxos vs RAFT
Algoritmos de Consenso: Paxos vs RAFT
Maycon Viana Bordin
 
Portal De Relacionamento entre Parceiros de Negócios para uma Cooperativa Agr...
Portal De Relacionamento entre Parceiros de Negócios para uma Cooperativa Agr...Portal De Relacionamento entre Parceiros de Negócios para uma Cooperativa Agr...
Portal De Relacionamento entre Parceiros de Negócios para uma Cooperativa Agr...
Maycon Viana Bordin
 
Arrependimento de adolescentes proprietários de celulares
Arrependimento de adolescentes proprietários de celularesArrependimento de adolescentes proprietários de celulares
Arrependimento de adolescentes proprietários de celulares
Maycon Viana Bordin
 
OrganicPM - People Management System
OrganicPM - People Management SystemOrganicPM - People Management System
OrganicPM - People Management System
Maycon Viana Bordin
 
Sistema para Gestão de Pessoas - OrganicPM
Sistema para Gestão de Pessoas - OrganicPMSistema para Gestão de Pessoas - OrganicPM
Sistema para Gestão de Pessoas - OrganicPM
Maycon Viana Bordin
 
Características dos Integrantes das Equipes
Características dos Integrantes das EquipesCaracterísticas dos Integrantes das Equipes
Características dos Integrantes das Equipes
Maycon Viana Bordin
 
Propostas de Aplicação de IA no Software Proschedule
Propostas de Aplicação de IA no Software ProschedulePropostas de Aplicação de IA no Software Proschedule
Propostas de Aplicação de IA no Software Proschedule
Maycon Viana Bordin
 

Mehr von Maycon Viana Bordin (20)

Stream Processing Overview
Stream Processing OverviewStream Processing Overview
Stream Processing Overview
 
Uma Arquitetura de Stream Processing e ETL Serverless na AWS
Uma Arquitetura de Stream Processing e ETL Serverless na AWSUma Arquitetura de Stream Processing e ETL Serverless na AWS
Uma Arquitetura de Stream Processing e ETL Serverless na AWS
 
Desenvolvimento de uma Rede Social Baseada em Geolocalização
Desenvolvimento de uma Rede Social Baseada em GeolocalizaçãoDesenvolvimento de uma Rede Social Baseada em Geolocalização
Desenvolvimento de uma Rede Social Baseada em Geolocalização
 
A Benchmark Suite for Distributed Stream Processing Systems
A Benchmark Suite for Distributed Stream Processing SystemsA Benchmark Suite for Distributed Stream Processing Systems
A Benchmark Suite for Distributed Stream Processing Systems
 
A Benchmark Suite for Distributed Stream Processing Systems
A Benchmark Suite for Distributed Stream Processing SystemsA Benchmark Suite for Distributed Stream Processing Systems
A Benchmark Suite for Distributed Stream Processing Systems
 
Introdução a Programação Android - Aula 5
Introdução a Programação Android - Aula 5Introdução a Programação Android - Aula 5
Introdução a Programação Android - Aula 5
 
Introdução a Programação Android - Aula 4
Introdução a Programação Android - Aula 4Introdução a Programação Android - Aula 4
Introdução a Programação Android - Aula 4
 
Introdução a Programação Android - Aula 3
Introdução a Programação Android - Aula 3Introdução a Programação Android - Aula 3
Introdução a Programação Android - Aula 3
 
Introdução a Programação Android - Aula 2
Introdução a Programação Android - Aula 2Introdução a Programação Android - Aula 2
Introdução a Programação Android - Aula 2
 
Introdução a Programação Android - Aula 1
Introdução a Programação Android - Aula 1Introdução a Programação Android - Aula 1
Introdução a Programação Android - Aula 1
 
Development of a Distributed Stream Processing System
Development of a Distributed Stream Processing SystemDevelopment of a Distributed Stream Processing System
Development of a Distributed Stream Processing System
 
Algoritmos de Consenso: Paxos vs RAFT
Algoritmos de Consenso: Paxos vs RAFTAlgoritmos de Consenso: Paxos vs RAFT
Algoritmos de Consenso: Paxos vs RAFT
 
Introdução ao Android
Introdução ao AndroidIntrodução ao Android
Introdução ao Android
 
Portal De Relacionamento entre Parceiros de Negócios para uma Cooperativa Agr...
Portal De Relacionamento entre Parceiros de Negócios para uma Cooperativa Agr...Portal De Relacionamento entre Parceiros de Negócios para uma Cooperativa Agr...
Portal De Relacionamento entre Parceiros de Negócios para uma Cooperativa Agr...
 
Como Vencer no Caos
Como Vencer no CaosComo Vencer no Caos
Como Vencer no Caos
 
Arrependimento de adolescentes proprietários de celulares
Arrependimento de adolescentes proprietários de celularesArrependimento de adolescentes proprietários de celulares
Arrependimento de adolescentes proprietários de celulares
 
OrganicPM - People Management System
OrganicPM - People Management SystemOrganicPM - People Management System
OrganicPM - People Management System
 
Sistema para Gestão de Pessoas - OrganicPM
Sistema para Gestão de Pessoas - OrganicPMSistema para Gestão de Pessoas - OrganicPM
Sistema para Gestão de Pessoas - OrganicPM
 
Características dos Integrantes das Equipes
Características dos Integrantes das EquipesCaracterísticas dos Integrantes das Equipes
Características dos Integrantes das Equipes
 
Propostas de Aplicação de IA no Software Proschedule
Propostas de Aplicação de IA no Software ProschedulePropostas de Aplicação de IA no Software Proschedule
Propostas de Aplicação de IA no Software Proschedule
 

Introdução a Arquitetura Android

  • 1. Introduc¸˜ao a Arquitetura Android Felipe Johann, Maycon Viana Bordin 1 Bacharelando em Sistemas de Informac¸˜ao – Sociedade Educacional Trˆes de Maio Caixa Postal 153 – CEP 98.910-000 – Trˆes de Maio – RS – Brasil {fedujo, mayconbordin}@gmail.com Resumo. Sendo o sistema operacional com maior presenc¸a entre os smart- phones em todo o mundo, desenvolver aplicac¸˜oes para o Android tem se tor- nado cada vez mais interessante. Entretanto, para tirar o melhor proveito desta plataforma ´e importante conhecer como ela funciona internamente. Este ar- tigo aborda os principais componentes que fazem parte do software stack do Android, comec¸ando pelo kernel Linux e a Dalvik VM at´e os componentes prin- cipais de uma aplicac¸˜ao. E mostra as estrat´egias adotadas pela plataforma para lidar com caracter´ısticas inerentes aos dispositivos m´oveis, como o tempo de bateria e a baixa capacidade de mem´oria. Abstract. As the operating system with the largest presence among smartphones worldwide, developing applications for Android has become increasingly inter- esting. However, to take advantage of this platform it is important to know how it works internally. This paper discusses the main components that are part of the Android software stack, starting with the Linux kernel and the Dalvik VM to the main components of an application. And shows the strategies adopted by the platform to deal with inherent characteristics of mobile devices such as the battery life and low memory capacity. 1. Introduc¸˜ao O Android ´e um sistema operacional para dispositivos m´oveis open source baseado em Linux e desenvolvido pela Open Handset Alliance, liderada pelo Google [Br¨ahler 2010]. No Android, aplicac¸˜oes s˜ao desenvolvidas em linguagem de programac¸˜ao Java, utilizando o Android SDK, e executam na m´aquina virtual Dalvik. O Android, entretanto, possui suporte para o desenvolvimento de aplicac¸˜oes nativas, escritas em C e C++, atrav´es do Android NDK [Br¨ahler 2010]. Aplicativos escritos para Android s˜ao distribu´ıdos atrav´es da loja de aplicativos do Google Play, antigamente conhecida como Android Market, e que conta atualmente com mais 500.000 aplicativos, tanto pagos como gratuitos, e que j´a foram baixados mais de 15 bilh˜oes de vezes [Lunden 2012, Google 2012]. O sistema operacional tamb´em est´a presente em mais de 56% dos smartphones em todo o mundo, tornando o Android uma das plataformas mais interessantes para o desenvolvimento de aplicativos [Gartner 2012]. E para tanto, ´e importante conhecer como este sistema operacional que vem ganhando tanta popularidade funciona, para a criac¸˜ao de aplicativos que fac¸am bom uso dos recursos dispon´ıveis. Nas pr´oximas sec¸˜oes deste artigo ser˜ao analisados em detalhes o funcionamento dos principais componentes da arquitetura do Android.
  • 2. 2. Arquitetura Na realidade, como ´e colocado em [Android Developers 2012], o Android ´e mais do que um sistema operacional. Ele ´e na verdade um software stack composto por cinco camadas, como mostra a Figura 1. A base do Android ´e uma vers˜ao modificada do kernel Linux 2.6, que provˆe v´arios servic¸os essenciais, como seguranc¸a, rede e gerenciamento de mem´oria e processos, al´em de uma cadamada de abstrac¸˜ao de hardware para as outras camadas de software. Figura 1. Arquitetura Android. Acima do kernel ficam as bibliotecas C/C++ utilizadas por diversos dos compo- nentes do sistema, como: uma implementac¸˜ao da biblioteca padr˜ao do C (libc), mas com licenc¸a BSD e otimizada para dispositivos embarcados; bibliotecas para suporte a for- matos de ´audio, v´ıdeo e imagens; um gerenciador que intermedia o acesso ao display e comp˜oe as camadas de imagem 2D e 3D; o engine para navegadores WebKit; bibliotecas para gr´aficos 2D (SGL) e 3D (OpenGL ES); um renderizador de fontes bitmap e vetoriais; e o banco de dados relacional SQLite [Android Developers 2012]. No Android, aplicac¸˜oes escritas em Java s˜ao executadas em sua pr´opria m´aquina virtual, que por sua vez ´e executada em seu pr´oprio processo no Linux, isolando-a de out- ras aplicac¸˜oes e facilitando o controle de recursos [Android Developers 2012]. O Android Runtime ´e composto pela m´aquina virtual chamada Dalvik VM, onde as aplicac¸˜oes s˜ao executadas, e por um conjunto de bibliotecas que fornecem boa parte das funcionalidades encontradas nas bibliotecas padr˜ao do Java [Android Developers 2012]. Na camada acima, escrita em Java, fica a framework de aplicac¸˜oes, que fornece todas as funcionalidades necess´arias para a construc¸˜ao de aplicativos, atrav´es das bibliote- cas nativas. Aplicac¸˜oes Android podem possuir quatro tipos de componentes: activities, services, content providers e broadcast receivers. Al´em destas pec¸as fundamentais em
  • 3. uma aplicac¸˜ao, existem os recursos, que s˜ao compostos por layouts, strings, estilos e ima- gens e o arquivo de manifesto, que declara os componentes da aplicac¸˜ao e os recursos do dispositivo que ela ir´a utilizar [Android Developers 2012]. 3. Kernel Linux Como fora colocado na sec¸˜ao anterior, o Android utiliza o kernel Linux para prover v´arios servic¸os as aplicac¸˜oes que nele s˜ao executadas. Entretanto, esta vers˜ao do kernel Linux foi modificada, de modo a melhor atender as necessidades existentes em dispositivos m´oveis, como as de gerenciamento de mem´oria e energia e do ambiente de execuc¸˜ao [Br¨ahler 2010]. Em [McDermott 2008] ´e descrito o processo de portabilidade do Android 1.0 para um dispositivo Nokia, evidenciando que o kernel do Android cont´em 75 arquivos modificados, al´em de 88 arquivos adicionais com relac¸˜ao ao kernel original. Dentre as modificac¸˜oes est˜ao: uma CPU virtual, chamada Goldfish, que executa instruc¸˜oes ARM926T, e que ´e utilizada pelo emulador Android; o sistema de arquivos de alto de- sempenho para mem´orias flash YAFFS2 (Yet Another Flash File System, 2nd edition); correc¸˜ao de bugs relacionados ao Bluetooth, al´em da adic¸˜ao de func¸˜oes para controle de acesso e debug. O kernel utilizado pelo Android tamb´em introduz o Binder, um novo mecanismo para a comunicac¸˜ao entre processos (IPC - Inter-process communication) e chamada re- mota de m´etodos, que permite que um processo possa chamar uma rotina em outro pro- cesso, e que ´e respons´avel pela identificac¸˜ao do m´etodo a ser invocado e da passagem dos argumentos entre os processos [eLinux 2012]. Com relac¸˜ao a mem´oria, o Android introduz um mecanismo (OOM – Out-of- Memory Handler) para terminar processos quando na falta de mem´oria, al´em do ashmem e pmem. O primeiro deles ´e um alocador de mem´oria compartilhada, com melhor suporte a dispositivos com pouca capacidade de mem´oria. J´a o segundo ´e um alocador de mem´oria de processo, e ´e utilizado para o gerenciamento de grandes regi˜oes cont´ıguas de mem´oria f´ısica compartilhadas entre o espac¸o do usu´arios e drivers do kernel [eLinux 2012]. Al´em das modificac¸˜oes descritas acima, o kernel Linux do Android tamb´em rece- beu modificac¸˜oes relacionadas ao gerenciamento de energia, devido a pr´opria natureza dos dispositivos m´oveis, e depurac¸˜ao de erros, com a introduc¸˜ao do Android Debug Bridge, um protocolo executado sobre um link USB, al´em de um sistema de log sepa- rado do sistema do Linux e que armazena mensagens no buffer do kernel [eLinux 2012]. 4. Dalvik VM Apesar de as aplicac¸˜oes para Android serem escritas em Java, a Dalvik VM n˜ao pode ser considerada uma JVM (Java Virtual Machine), pois ela n˜ao interpreta Java bytecodes. Ao inv´es disso, a ferramenta dx transforma os arquivos .class compilados com um compilador Java normal em arquivos .dex, estes espec´ıficos para execuc¸˜ao na Dalvik VM. A Dalvik VM ´e otimizada para dispositivos com pouca mem´oria, e foi desenhada de modo a permitir a execuc¸˜ao de v´arias instˆancias ao mesmo tempo de forma eficiente. Ela tamb´em deixa a cargo do kernel Linux algumas tarefas, como o gerenciamento de mem´oria e threads e para o isolamento entre processos [DalvikVM 2012].
  • 4. Uma das medidas tomadas para salvar mem´oria foi a de criar constant pools com- partilhados para tipos espec´ıficos. Uma constant pool armazena valores literais constantes utilizados em uma classe, como strings e nomes de classes, interfaces, m´etodos e atribu- tos. E ao utilizar constant pools compartilhados, ao inv´es de um para cada arquivo .class, como ´e feito com bytecodes Java, evita-se a duplicac¸˜ao de constantes [Ehringer 2010]. E como aponta [Ehringer 2010], os constant pools nos bytecodes Java representam mais de 61% do seu tamanho total, justificando as otimizac¸˜oes que podem ser feitas, tanto para a reduc¸˜ao da mem´oria necess´aria como para reduzir o tempo de inicializac¸˜ao de uma aplicac¸˜ao. Outra estrat´egia utilizada para a otimizac¸˜ao de aplicativos ´e o compartilhamento de c´odigo entre as instˆancias da VM. Isso ´e feito atrav´es de um processo chamado Zy- gote, que ´e pai de todas as instˆancias da Dalvik VM e ´e inicializado juntamente com o sistema, carregando todas as classes das bibliotecas que provavelmente ser˜ao utilizadas com frequˆencia pelos aplicativos. Assim, quando uma aplicac¸˜ao for iniciada, um co- mando ´e enviado ao Zygote, que faz um fork, criando um processo que se torna uma nova Dalvik VM, minimizando o tempo de inicializac¸˜ao [Br¨ahler 2010, Ehringer 2010]. Esta estrat´egia assume que estas classes das bibliotecas compartilhadas ser˜ao ape- nas lidas pelos processos filhos do Zygote. Entretanto, caso um processo resolva escrever em uma dessas classes, a mem´oria compartilhada do Zygote correspondente a classe ´e copiada para o processo filho para que ele ent˜ao possam realizar as operac¸˜oes de escrita. Esse comportamento, conhecido como copy-on-write, evita a duplicac¸˜ao desnecess´aria de c´odigo sem, entretanto, comprometer a seguranc¸a e correto funcionamento das aplicac¸˜oes [Ehringer 2010]. O isolamento entre as aplicac¸˜oes se estende at´e o garbage collector (GC), que ´e executado em cada VM de forma separada, evitando que GCs de outros processos interfi- ram na execuc¸˜ao de um determinado GC. Cada instˆancia da VM possui a sua pr´opria pilha de mem´oria, al´em da pilha compartilhada (do Zygote) e a coleta da mem´oria que n˜ao ´e mais utilizada ´e feita atrav´es de mark bits que informam ao GC quais objetos devem ser removidos, um mecanismo ´util, pois mant´em intocada a mem´oria compartilhada do Zy- gote [Maia et al. 2010]. Antes da vers˜ao Gingerbread, toda vez que o GC era executado, as threads do aplicativo eram paradas, inconveniˆencia que foi removida com a introduc¸˜ao do GC concorrente [Dubroy 2011]. 5. Framework de Aplicac¸˜oes Esta camada do stack Android ´e um conjunto de ferramentas que fornecem v´arios servic¸os para os aplicativos, visando o reuso de componentes [Android Developers 2012]. Aplicac¸˜oes normalmente s˜ao compostas por atividades (Activity). No Android uma atividade ´e uma ac¸˜ao espec´ıfica que um usu´ario pode realizar dentro de um aplicativo. Estas ac¸˜oes podem incluir a inicializac¸˜ao de outras atividades, tanto dentro como fora da aplicac¸˜ao a qual ela pertence, atrav´es de intenc¸˜oes (Intent), criando o que se chama de tarefa. Uma tarefa pode conter v´arias atividades, que s˜ao organizadas em uma pilha na ordem em que foram criadas, permitindo assim que o usu´ario volte para atividades em que estava anteriormente [Android Developers 2012]. Quando uma uma nova tarefa ´e iniciada ou o usu´ario volta para a tela inicial,
  • 5. a tarefa anteriormente em primeiro plano passa para o segundo plano. Uma tarefa em segundo plano pode voltar ao primeiro plano e v´arias tarefas podem estar em segundo plano ao mesmo tempo. Entretanto, se muitas tarefas estiverem em segundo plano, o sistema pode comec¸ar a destruir atividades para recuperar mem´oria, fazendo com que as atividades percam seus estados, o que n˜ao significa que o usu´ario n˜ao possa mais navegar de volta a esta atividade [Android Developers 2012]. Todo o ciclo de vida das atividades, bem como a organizac¸˜ao das mesmas em pil- has e tarefas ´e de responsabilidade do Activity Manager, visto na Figura 1. Al´em dele existem ainda: Package Manager, respos´avel por manter o registro de todas as aplicac¸˜oes instaladas no dispositivo; Windows Manager, que gerencia a tela do dispositivo e cria su- perf´ıcies para as aplicac¸˜oes em execuc¸˜ao; Telephony Manager, fornece a outras aplicac¸˜oes servic¸os relacionados com telefonia; Content Provider, para o compartilhamento de da- dos entre aplicac¸˜oes; Resource Manager, que provˆe acesso a tudo aquilo que faz parte de um aplicativo e que n˜ao seja c´odigo (recursos), como arquivos XML, bitmaps ou outros arquivos, como sons [Khan et al. 2010]. Existe ainda o View System, que fornece um conjunto b´asico de views que podem ser utilizadas e extendidas por aplicac¸˜oes, incluindo: listas, caixas de texto, tabelas e bot˜oes. E o Notification Manager, que permite que uma aplicac¸˜ao notifique o usu´ario sobre algum evento atrav´es de vibrac¸˜ao, piscar de LEDs, tocar de algum som ou um ´ıcone na barra de status [Khan et al. 2010]. Al´em da Activity e do Content Provider, existem outros dois tipos de componentes de aplicac¸˜ao: os Services, que diferentemente de atividades, n˜ao possuem uma interface de usu´ario e s˜ao destinados para a execuc¸˜ao em segundo plano de operac¸˜oes de longa durac¸˜ao ou para trabalhar com processos remotos, como a comunicac¸˜ao com web ser- vices; e os Broadcast Receivers, que s˜ao componentes que respondem a an´uncios feitos para todo o sistema, como o an´uncio de que a tela se desligou ou de que a bateria est´a fraca [Android Developers 2012]. 6. Interac¸˜ao entre as Camadas Segundo [Texas Instruments 2011], existem trˆes ambientes em tempo de execuc¸˜ao com relac¸˜ao a comunicac¸˜ao entre camadas. No primeiro dos ambientes, uma aplicac¸˜ao ir´a fazer uma chamada atrav´es do Binder IPC (implicando no carregamento desta biblioteca em mem´oria) a um Runtime Service, que por sua vez far´a uma chamada a um Native Service Binding, atrav´es do JNI (Java Native Interface), que ir´a carregar a biblioteca HAL (Hardware Abstraction Layer) correspondente ao servic¸o solicitado, que finalmente far´a a chamada ao driver no kernel. A Figura 2 ilustra um exemplo de interac¸˜ao entre as camadas, comec¸ando na aplicac¸˜ao, que requisita dados sobre a localizac¸˜ao do dispositivo. Neste caso a localizac¸˜ao ser´a determinada atrav´es do GpsLocationProvider, mas este servic¸o poderia tamb´em ter sido fornecido atrav´es do NetworkLocationProvider. Neste caso, o provedor far´a uma chamada para a biblioteca nativa homˆonima que carregar´a a biblioteca que abstrai as fun- cionalidades fornecidas pelo driver no kernel. Todas as funcionalidades dos drivers s˜ao abstra´ıdas atrav´es da HAL. Isso evita que outras partes do sistema que utilizam esses drivers precisem ser alterados toda vez que os
  • 6. Figura 2. Exemplo de interac¸ ˜ao entre camadas no Android. drivers forem diferentes, levando em conta que o Android funciona em um leque muito grande de dispositivos [Texas Instruments 2011]. No segundo ambiente, as chamadas feitas pelo Runtime Service atrav´es de JNI s˜ao direcionadas ao Native Service Binding, que ent˜ao faz uso do Binder IPC para se comunicar com o Native Service, que carrega a biblioteca HAL dinˆamicamente, que por sua vez faz a chamada ao driver. J´a no terceiro ambiente a ´unica diferenc¸a ´e que a chamada n˜ao ´e mais feita a um Native Service, mas a um Native Daemon, e a comunicac¸˜ao ocorre atrav´es de sockets [Texas Instruments 2011]. 7. Conclus˜ao Ao longo dos anos a computac¸˜ao m´ovel evoluiu muito, deixando de ser apenas um meio de comunicac¸˜ao atrav´es da voz, para se tornar uma m´ıdia que permitiu a criac¸˜ao de uma classe nova de aplicac¸˜oes. Ainda assim, muitas das suas restric¸˜oes continuam presentes. Este artigo apresentou algumas das estrat´egias e mecanismos presentes na arquitetura Android e que buscam amenizar estas restric¸˜oes, principalmente aquelas relacionadas com economia de bateria e mem´oria. O artigo tamb´em fez uma breve introduc¸˜ao aos principais componentes utilizados na construc¸˜ao de aplicac¸˜oes. E muito embora o desenvolvimento de aplicac¸˜oes em An- droid exija o conhecimento do funcionamento destes componentes, o fato de a linguagem de programac¸˜ao utilizada ser Java e de boa parte das bibliotecas padr˜ao estarem presentes no Android reduzem significativamente a curva de aprendizado necess´aria. Referˆencias Android Developers (2012). The developer’s guide. Dispon´ıvel em: <http://developer.android.com/guide/index.html>. Acesso em: maio 2012. Br¨ahler, S. (2010). Analysis of the android architecture.
  • 7. DalvikVM (2012). Dalvik virtual machine. Dispon´ıvel em: <http://www.dalvikvm.com/>. Acesso em: maio 2012. Dubroy, P. (2011). Memory management for android apps. Google I/O 2011. Dispon´ıvel em: <http://bit.ly/Md5QDX>. Acesso em: maio 2012. Ehringer, D. (2010). The dalvik virtual machine architecture. Dispon´ıvel em: <http://www.kiddai.com/NCTU/ebl/dex/The Dalvik Virtual Machine.pdf>. Acesso em: maio 2012. eLinux (2012). Android portal. Dispon´ıvel em: <http://elinux.org/Android Portal>. Acesso em: maio 2012. Gartner (2012). Gartner says worldwide sales of mobile phones declined 2 percent in first quarter of 2012; previous year-over-year decline occurred in second quarter of 2009. Dispon´ıvel em: <http://www.gartner.com/it/page.jsp?id=2017015>. Acesso em: maio 2012. Google (2012). Introducing google play: All your entertainment, anywhere you go. Dispon´ıvel em: <http://googleblog.blogspot.com.br/2012/03/introducing-google- play-all-your.html>. Acesso em: maio 2012. Khan, S., Khalid, S. H., Nauman, M., Khan, S., and Alam, M. (2010). Analysis report on android application framework and existing security architecture. Technical report, Security Engineering Research Group, Pakistan. Lunden, I. (2012). Google play about to pass 15 billion app downloads? pssht! it did that weeks ago. TechCrunch. Dispon´ıvel em: <http://techcrunch.com/2012/05/07/google- play-about-to-pass-15-billion-downloads-pssht-it-did-that-weeks-ago/>. Acesso em: maio 2012. Maia, C., Nogueira, L. M., and Pinho, L. M. (2010). Evaluating android os for embedded real-time systems. Technical report, Polytechnic Institute of Porto (ISEP-IPP), Porto, Portugal. McDermott, P. (2008). Porting android to a new device. Dispon´ıvel em: <http://www.linuxfordevices.com/c/a/Linux-For-Devices-Articles/Porting-Android- to-a-new-device/>. Acesso em: maio 2012. Texas Instruments (2011). Android memory analysis. Dispon´ıvel em: <http://processors.wiki.ti.com/index.php/Android Memory Analysis>. Acesso em: maio 2012.