30.04.2013 Views

A plataforma Android: Uma Introdução Android - PUC-Rio

A plataforma Android: Uma Introdução Android - PUC-Rio

A plataforma Android: Uma Introdução Android - PUC-Rio

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

A <strong>plataforma</strong> <strong>Android</strong>: <strong>Uma</strong><br />

<strong>Introdução</strong><br />

© Markus Endler<br />

<strong>Android</strong><br />

Iniciativa da Google de prover uma <strong>plataforma</strong><br />

aberta para Web móvel<br />

Open p Handset Alliance<br />

Associação de um grupo bastante heterogêneo<br />

de empresas (operadoras, fabricantes de celulares)<br />

> 30 companhias<br />

Força do projeto se baseia no conceito de<br />

colaboração<br />

Set Set./08: /08: Google anunciou o Andoid Market<br />

para comercialização de aplicações<br />

Set./08: É lançado G1<br />

Primeiro dispositivo para <strong>plataforma</strong> <strong>Android</strong><br />

2


O que é <strong>Android</strong>?<br />

Pilha de softwares para dispositivos móveis:<br />

Um sistema operacional<br />

Um middleware<br />

Conjunto de aplicações<br />

<strong>Android</strong> SDK:<br />

Projetos<br />

Ferramentas de desenvolvimento<br />

Emulador<br />

Conjunto de bibliotecas<br />

Linguagem de programação:<br />

Java<br />

Máquina virtual:<br />

Dalvik (Kernel GNU/Linux)<br />

<strong>Android</strong> → Definição<br />

Características<br />

Application Framewok:<br />

Permite o reuso e a substituição de componentes<br />

Máquina virtual Dalvik:<br />

Otimizada para dispositivos móveis<br />

Um navegador integrado:<br />

Baseado no projeto WebKit (código aberto)<br />

Gráficos otimizados:<br />

Bibliotecas gráficas 2D<br />

Gráficos 3D baseado na especificação OpenGL 1.0<br />

SQLite:<br />

Para armazenamento de dados estruturados<br />

Suporte para mídias:<br />

Aúdio, vídeo, formatos de imagens (MPEG4, H.264, MP3, AAC, AMR,<br />

JPG, PNG e GIF)<br />

<strong>Android</strong> → Características<br />

3<br />

4


Características<br />

Questões dependentes do hardware:<br />

TTelefonia l f i GPRS/GSM e EDGE<br />

Telefonia 3G<br />

WiFi<br />

Câmera<br />

GPS<br />

Bússola<br />

Acelerômetro<br />

<strong>Android</strong> → Características<br />

Arquitetura<br />

© Markus Endler<br />

5


Cliente de email<br />

Programa SMS<br />

Calendário<br />

Mapas<br />

<strong>Android</strong> → Arquitetura → Aplicações<br />

View<br />

Content Providers<br />

Resource Manager<br />

Notification Manager<br />

Activity Manager<br />

<strong>Android</strong> → Arquitetura → Framework<br />

Aplicações<br />

Navegador<br />

Contatos<br />

Entre outros.<br />

Framework<br />

7<br />

8


System C Library<br />

Media Libraries<br />

Surface Manager<br />

LibWebCore<br />

Bibliotecas<br />

Andróid inclui um conjunto de bibliotecas C/C++ usadas por<br />

diversos componentes do sistema:<br />

<strong>Android</strong> → Arquitetura → Bibliotecas<br />

SGL<br />

3D Libraries<br />

FreeType<br />

SQLite<br />

Bibliotecas<br />

System C library – uma implementação derivada da biblioteca C padrão<br />

sistema (libc) do BSD adaptada para dispositivos rodando Linux.<br />

Media Libraries – baseado no PacketVideo’s OpenCORE; as bibliotecas<br />

suportam os mais populares formatos de audio e video, bem como<br />

imagens estáticas.<br />

Surface Manager –acesso ao subsistema de exibição bem como as<br />

múltiplas camadas de aplicações 2D e 3D;<br />

LibWebCore – um web browser engine utilizado no <strong>Android</strong> Browser<br />

SGL – o engine de gráficos 2D<br />

3D libraries – uma implementação baseada no OpenGL 1.0; as<br />

bibliotecas utilizam aceleração 3D via hardware (quando disponível) ou o<br />

software ft dde renderização d i ã 3D altamente lt t otimizado ti i d iincluído l íd no A<strong>Android</strong>. d id<br />

FreeType – renderização de fontes bitmap e vector<br />

SQLite – um poderoso e leve engine de banco de dados relacional<br />

disponível para todas as aplicações<br />

© Markus Endler<br />

9


<strong>Android</strong> Runtime<br />

Aplicação <strong>Android</strong>:<br />

É um processo Linux<br />

Possui sua própria instância da máquina virtual<br />

Dalvik<br />

Executa arquivos .dex (ferramenta dx)<br />

<strong>Android</strong> → Arquitetura → <strong>Android</strong> Runtime<br />

Versão do kernel:<br />

2.6<br />

O kernel atua como<br />

uma camada de<br />

abstração entre o<br />

hardware e o resto da<br />

pilha de software<br />

<strong>Android</strong> → Arquitetura → Linux Kernel<br />

Linux Kernel<br />

Serviços:<br />

Segurança<br />

Gerenciamento de<br />

memória<br />

Gerenciamento de<br />

processos<br />

Pilha de protocolos de rede<br />

Modelo de drives<br />

11<br />

12


Estrutura de uma aplicação <strong>Android</strong><br />

Existem 4(5) tipos básicos de elementos:<br />

Activities<br />

Intents e IntentFilters ( (e BroadcastReceivers) )<br />

Services<br />

Content Providers<br />

Nem toda aplicação precisa ter todos os tipos, mas terá<br />

alguma combinação destes destes.<br />

Os componentes que compõem a aplicação são<br />

declarados no arquivo <strong>Android</strong>Manifest.xml.<br />

© Markus Endler<br />

<strong>Android</strong> Manifest<br />

<strong>Android</strong>Manifest.xml é necessário p/ cada aplicação.<br />

Descreve os elementos da aplicação: (Activities,<br />

Content Providers, Services, and Intent Receivers)<br />

globalmente visíveis, as classes de implementação<br />

de cada componente, e qual tipo de dado este pode<br />

tratar, quando pode ser ativado, etc.<br />

Compara-se cada Intent gerado com os Intentfilters<br />

registrados para identificar qual é a atividade mais<br />

apropriada p p ppara<br />

tratar este intent<br />

Pode-se também descrever as permissões e<br />

parâmetros de instrumentação<br />

© Markus Endler


Tipos de Elementos<br />

Activity = uma tela de sua aplicação; cada uma é uma<br />

especialização da classe base Activity. Sua classe<br />

será composta de views que respondem a eventos;<br />

uma atividade pode retornar um valor para outra<br />

atividade;<br />

Intent = classe usada para passar o controle de uma<br />

atividade para outra; um intent consiste de uma ação<br />

(evento/requisição) e uma URI indicando um dado<br />

sobre o qual a ação deve ser executada. Valores<br />

comuns para ações: õ MAIN ( (entrada t d dda aplicação), li ã )<br />

VIEW, PICK, EDIT, etc.<br />

Exemplo: para visualizar informação de contato criase<br />

um intent com açãoVIEW e a URI indicando os<br />

dados associados a uma pessoa.<br />

© Markus Endler<br />

Tipos de Elementos<br />

IntentFilter = desrição de quais intents uma Activity (ou<br />

BBroadcastReceiver) d tR i ) é capaz dde ttratar t e são ã<br />

publicados no arquivo <strong>Android</strong>Manifest.xml<br />

Exemplo: <strong>Uma</strong> Activity capaz de mostrar dados de<br />

uma pessoa iria publicar um IntentFilter com a<br />

capacidade VIEW para determinados dados;<br />

Obs: Activities com IntentFilters equivalentes podem<br />

ser trocadas a qualquer instante<br />

© Markus Endler


Tipos de Elementos<br />

BroadcastReceiver deve ser usado quando a aplicação<br />

deve reagir a eventos externos à aplicação (e.g.<br />

ligação telefônica, telefônica timer, timer rede wifi ifi disponí disponível, el etc etc.) )<br />

BroadcastReceivers são definidos no<br />

<strong>Android</strong>Manifest.xml, ou são registrados usando<br />

método Context.registerReceiver().<br />

Obs: A aplicação não precisa estar executando; o<br />

sistema vai inciá-la quando o BroadcastReceiver é<br />

di disparado d<br />

Aplicações também podem enviar seus<br />

IntentBroadcasts para outras aplicações<br />

© Markus Endler<br />

Tipos de Elementos<br />

Serviço = uma thread (processo) executando em<br />

background, independentemente de uma Interface do<br />

usuário (p.ex. tocar músicas de uma playlist)<br />

Activities (para escolha do album) podem se conectar a<br />

um serviço usando Context.bindService() para inicia-lo<br />

(se já não executa) .<strong>Uma</strong> vez conectado, pode-se<br />

interagir com ele através da interface exportada pelo<br />

mesmo (p.ex. p/ “pause”)<br />

ContentProvider = uma classe usada para p qque aplicações p ç<br />

compartilhem dados entre sí ; implementa um conjunto<br />

de métodos padrão para armazenar e recuperar dados<br />

de um determinado tipo;<br />

Obs: aplicações também podem interagir através de um<br />

banco de dados SQL ou de arquivos<br />

© Markus Endler


Aplicação <strong>Android</strong><br />

Obs: Cada Activity representa uma tela<br />

Act1 Act3<br />

Act2 Act4<br />

BcastReceiver<br />

Manifest<br />

IntentBcast<br />

GUI Commands & Displayy<br />

Content<br />

Provider<br />

Act1 Act3<br />

Act2<br />

Manifest<br />

<strong>Android</strong> Application Framework/<br />

Dalvik/ C libraries<br />

Linux<br />

© Markus Endler<br />

Content<br />

Provider<br />

put/ get<br />

Memory<br />

Instalação do SDK<br />

Intent<br />

Intent Fiter<br />

CntxtBindService<br />

Service<br />

A<br />

Após realizar o download do SDK, descompactar o<br />

arquivo .zip zip<br />

Por exemplo, android_sdk_windows_m3-rc22a.zip<br />

Instalando o plugin para Eclipse (ADT)<br />

https://dl-ssl.google.com/android/eclipse/<br />

Data Funneling → Fases<br />

20


Para saber mais...<br />

Leia a documentação<br />

Developer Toolbox<br />

http://code.google.com/android/toolbox/index.html<br />

Developing Applications:<br />

http://code.google.com/android/devel/index.html<br />

Consulte os grupos de discussão:<br />

http://code http://code.google.com/android/groups.html<br />

google com/android/groups html<br />

http://forum.portalandroid.org/<br />

21

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!