Вы находитесь на странице: 1из 75

Desenvolvendo aplicações em Java para o Google Android

Desenvolvendo aplicações em 
Java para o 
Google Android

Ranieri de Souza Fernandes

Tchelinux
Desenvolvendo aplicações em Java para o Google Android

O Palestrante

ranieri@dev.java.net

Tchelinux
12/11/08 2
Desenvolvendo aplicações em Java para o Google Android

Android, como começou?

Tchelinux
12/11/08 3
Desenvolvendo aplicações em Java para o Google Android

Android, como começou?
● Julho de 2005, Google adquire a Android Inc, 
com sede em Palo Alto, CA.
● Objetivos
– Desenvolver um OS para dispositivos móveis 
baseado em Linux
– Terá como premissa proporcionar uma estrutura 
flexível e atualizável
● Começam os rumores que ao Google planeja 
entrar no mercado de telefonia móvel...

Tchelinux
12/11/08 4
Desenvolvendo aplicações em Java para o Google Android

Porque dispositivos móveis?
● O crescimento de dispositivos móveis, ligados a 
rede é maior que o de PC's...
● Pessoas com o primeiro contato com a web via 
celular...
● Todos terão um...

Tchelinux
12/11/08 5
Desenvolvendo aplicações em Java para o Google Android

Android, como apareceu?
● Dia 5 de novembro de 2007, a Open Handset 
Alliance, foi anunciada.
– Consorcio formado por empresas como, Google, 
HTC, Intel, Motorola, Qualcomm, T­Mobile, Sprint 
Nextel e NVIDIA (mais de 30 empresas)
– Seu objetivo é desenvolver padrões abertos para os 
dispositivos móveis
– Anunciou seu primeiro produto o Android, 
construído sobre o sistema operacional Linux

Tchelinux
12/11/08 6
Desenvolvendo aplicações em Java para o Google Android

Depois do anuncio...
● Dia 12 de Novembro de 2007 ­ primeira versão do SDK
● De Janeiro a Agosto de 2008 ­ Android Developer Challenge I
● Dia 18 Agosto de 2008 ­ Android 0.9 SDK beta released
● Dia 28 Agosto de 2008 ­ apresentação para o mercado
● Dia 23 Setembro de 2008 ­ Android 1.0 SDK Release 1 
● Dia 21 de Outubro de 2008 ­ Código fonte disponibilizado 
● Dia 22 de Outubro de 2008 ­ aparelho com Android 1.0 a venda (G1)
● Q4 2008 – Anúncio do Android Developer Challenge II

Tchelinux
12/11/08 7
Desenvolvendo aplicações em Java para o Google Android

?Android?

● Um sistema operacional?
● Um middleware?
● Um framework?
● Um conjunto de aplicações?

Tchelinux
12/11/08 8
Desenvolvendo aplicações em Java para o Google Android

?Android?
● Um SDK?
– Tem projetos
– Tem ferramentas de desenvolvimento
– Tem um emulador
– Tem um conjunto de bibliotecas

Tchelinux
12/11/08 9
Desenvolvendo aplicações em Java para o Google Android

?Android?
● Tem uma linguagem de programação?
– Java
● Tem uma máquina virtual?
– Dalvik (Kernel GNU/Linux)

Tchelinux
12/11/08 10
Desenvolvendo aplicações em Java para o Google Android

?Android?

É tudo isto....

É uma Plataforma aberta 
para dispositivos móveis!!!

Tchelinux
12/11/08 11
Desenvolvendo aplicações em Java para o Google Android

Licenças
● “The platform also includes a modified version 
of the Linux Kernel, which is distributed under 
the GNU's General Public License (GPL).”
● “The source code released today also includes 
Google's Dalvik virtual machine and Java­based 
middleware layer, which are distributed under 
version 2 of the Apache Software License 
(ASL).“

Tchelinux
12/11/08 12
Desenvolvendo aplicações em Java para o Google Android

Licenças
✔ Licenças de Software Livre:
• GPL (General Public License)

• BSD (Berkeley Software Distribution)

• Mozilla

• Apache

• etc ...

Tchelinux
Desenvolvendo aplicações em Java para o Google Android

Tchelinux
Desenvolvendo aplicações em Java para o Google Android

Porque licença Apache (ASL)?
● We took a close look earlier this year at why 
Google chose the ASL for its Android userspace 
components and pointed out that its 
permissiveness will encourage commercial 
adoption and allow handset makers to create 
proprietary enhancements on top of the 
technology.

Tchelinux
12/11/08 15
Desenvolvendo aplicações em Java para o Google Android

Então, é Open Source!

● Apache 2.0 
● GPL v2 (kernel)
● Repositório Git 
● Fontes: http://source.android.com

Tchelinux
12/11/08 16
Desenvolvendo aplicações em Java para o Google Android

Aberto
● Em três pontos de vista (três reis):
– Industria: Licença Apache 2.0
– Usuários: Controle total
– Desenvolvedor: não precisa pedir permissão

Tchelinux
12/11/08 17
Desenvolvendo aplicações em Java para o Google Android

E o Java ME?

Tchelinux
12/11/08 18
Desenvolvendo aplicações em Java para o Google Android

Java ME
● Subset do JSE, utilizada para ambientes 
embedded
● É a tecnologia mais utilizada no mundo para 
dispositivos embedded
● Pode rodar numa infinidade de dispositivos: 
telefones celulares, PDA's, TV's, impressoras, 
etc...
● Recursos nivelados por baixo
● Industria: problemas com licenças
Tchelinux
12/11/08 19
Desenvolvendo aplicações em Java para o Google Android

Android API vs Java API
Pacotes Suportados

● java.io ­ File and stream I/O
● java.lang (except java.lang.management) ­ Language and 
exception support
● java.math ­ Big numbers, rounding, precision
● java.net ­ Network I/O, URLs, sockets
● java.nio ­ File and channel I/O

Tchelinux
12/11/08 20
Desenvolvendo aplicações em Java para o Google Android

Android API vs Java API
Pacotes Suportados
● java.security ­ Authorization, certificates, public keys
● java.sql ­ Database interfaces
● java.text ­ Formatting, natural language, collation
● java.util ­ Lists, maps, sets, arrays, collections
– including java.util.concurrent

Tchelinux
12/11/08 21
Desenvolvendo aplicações em Java para o Google Android

Android API vs Java API
Pacotes Suportados
● javax.crypto ­ Ciphers, public keys
● javax.net ­ Socket factories, SSL
● javax.security except:
– javax.security.auth.kerberos
– javax.security.auth.spi
– javax.security.sasl
● javax.sound ­ Music and sound effects

Tchelinux
12/11/08 22
Desenvolvendo aplicações em Java para o Google Android

Android API vs Java API
Pacotes Suportados
● javax.sql ­ More database interfaces
– except javax.sql.rowset
● javax.xml.parsers ­ XML parsing
● org.w3c.dom ­ DOM nodes and elements
– but not sub­packages
● org.xml.sax ­ Simple API for XML

Tchelinux
12/11/08 23
Desenvolvendo aplicações em Java para o Google Android

Android API vs Java API
Pacotes não Suportados

● java.applet ● javax.accessibility
● java.awt ● javax.activity
● java.beans ● javax.imageio
● java.lang.management ● javax.management
● java.rmi ● javax.naming

Tchelinux
12/11/08 24
Desenvolvendo aplicações em Java para o Google Android

Android API vs Java API
Pacotes não Suportados
● javax.print ● javax.xml 
● javax.rmi – except javax.xml.parsers
● javax.security.auth.kerberos ● org.ietf.*
● javax.security.auth.spi ● org.omg.*
● javax.security.sasl ● org.w3c.dom.* 
● javax.swing – sub­packages
● javax.transaction

Tchelinux
12/11/08 25
Desenvolvendo aplicações em Java para o Google Android

Android API
Pacotes Suportados (não JSE)

● org.apache.commons.codec
– Utilities for encoding and decoding
● org.apache.commons.httpclient
– HTTP authentication, cookies, methods, and 
protocolorg.bluez ­ Bluetooth support
● org.json ­ JavaScript Object Notation

Tchelinux
12/11/08 26
Desenvolvendo aplicações em Java para o Google Android

Mas... Porque o Google 
escolheu Java?

Tchelinux
Desenvolvendo aplicações em Java para o Google Android

Software Livre e Java
✔ Freshmeat ranking de linguagens
✔ 1­ C  (9223 projetos)  
✔ 2­ Java  (6225 projetos)  
✔ 3­ C++  (5156 projects)  

✔ Portal java.net
✔ Projetos  
✔ Grupos de usuários
✔ Fóruns 

Tchelinux
12/11/08 28
Desenvolvendo aplicações em Java para o Google Android

Adoção do Java
TIOBE Programming Community Index for October 2008

Tchelinux
12/11/08 29
Desenvolvendo aplicações em Java para o Google Android

Adoção do Java
TIOBE Programming Community Index for October 2008

Tchelinux
12/11/08 30
Desenvolvendo aplicações em Java para o Google Android

Arquitetura

Tchelinux
12/11/08 31
Desenvolvendo aplicações em Java para o Google Android

Android ­ Arquitetura

Tchelinux
12/11/08 32
Desenvolvendo aplicações em Java para o Google Android

Linux Kernel

● Versão do kernel: 2.6    
– Camada de  de abstração entre o hardware e o resto da 
pilha de software
– Segurança
– Gerenciamento de memória
– Gerenciamento de processos
– Protocolos de rede
– Modelo de drivers
Tchelinux
12/11/08 33
Desenvolvendo aplicações em Java para o Google Android

Android ­ Arquitetura

Tchelinux
12/11/08 34
Desenvolvendo aplicações em Java para o Google Android

Bibliotecas

● Andróid inclui um conjunto de bibliotecas C/C++ usadas por 
diversos componentes do sistema:
●  System C Library ● SGL
●  Media Libraries ● 3D Libraries
● Surface Manager ● FreeType
● LibWebCore ● SQLite

Tchelinux
12/11/08 35
Desenvolvendo aplicações em Java para o Google Android

Runtime

● Aplicação Android:
– É um processo Linux
– Própria instância da máquina vitual Dalvik
● Executa arquivos .dex (ferramenta dx)

Tchelinux
12/11/08 36
Desenvolvendo aplicações em Java para o Google Android

Android ­ Arquitetura

Tchelinux
12/11/08 37
Desenvolvendo aplicações em Java para o Google Android

Framework

● View
● Content Providers
● Resource Manager
● Notification Manager
● Ativity Manager

Tchelinux
12/11/08 38
Desenvolvendo aplicações em Java para o Google Android

Android ­ Arquitetura

Tchelinux
12/11/08 39
Desenvolvendo aplicações em Java para o Google Android

Aplicações

● Cliente de email  ● Mapas
● Programa SMS   ● Navegador
● Calendário   ● Contatos
...     

Tchelinux
12/11/08 40
Desenvolvendo aplicações em Java para o Google Android

S D K

Tchelinux
12/11/08 41
Desenvolvendo aplicações em Java para o Google Android

Android SDK
● O Android SDK é formado por:
– Ferramentas de linha de comando
– Debugger
– Libraries
– Emulador (baseado no QEMU)
– Documentação 
– Códigos de exemplo
– Tutoriais

Tchelinux
12/11/08 42
Desenvolvendo aplicações em Java para o Google Android

Android SDK

● É suportado em plataformas baseadas em x86
– Linux (qualquer distribuição)
– Mac OS X 10.4.8 or later, 
– Windows XP or Vista. 

Tchelinux
12/11/08 43
Desenvolvendo aplicações em Java para o Google Android

Android SDK
● Depende de:
– JDK ­ Java Development Kit
– Apache Ant
– Python 2.2 or later. 
● IDE oficial
– Eclipse 3.2 or later
– Android Development Tools (ADT) Plugin
● Não é compatível com o Gnu Compiler for Java (gcj)

Tchelinux
12/11/08 44
Desenvolvendo aplicações em Java para o Google Android

Android SDK
● Ferramentas de linha de comando
– emulator  – Android emulator
– aapt – Android asset packaging tool
– adb  – Android debug bridge
– aidl  – Android IDL compiler

Tchelinux
12/11/08 45
Desenvolvendo aplicações em Java para o Google Android

Tchelinux
12/11/08 46
Desenvolvendo aplicações em Java para o Google Android

Android SDK

● Para os fans do NetBeans IDE
– Android plugin for NetBeans (unandroid)
– http://kenai.com/projects/nbandroid/

Tchelinux
12/11/08 47
Desenvolvendo aplicações em Java para o Google Android

Android SDK

Tchelinux
12/11/08 48
Desenvolvendo aplicações em Java para o Google Android

Suas Caracteristicas...
● Application Framewok: torna possível o reuso e a substituição 
de componentes
● Máquina virtual Dalvik: Otimizada para rodar em dispositivos 
móveis
● Navegador integrado: Baseado no WebKit, mesmo que o  
Chrome e Safari
● Otimização gráfica: 
– Bibliotecas 2D
– Gráficos 3D (OpenGL 1.0)
● SQLite: Para persistência de dados
● Suporte para mídias: Aúdio, vídeo, formatos de imagens 
(MPEG4, H.264, MP3, AAC, AMR, JPG, PNG e GIF)
Tchelinux
12/11/08 49
Desenvolvendo aplicações em Java para o Google Android

Suas Caracteristicas...
● Dependente do hardware:
– GPRS/GSM e EDGE
– Bluetooth
– Telefonia 3G
– WiFi
– Câmera
– GPS
– Bússola
– Acelerômetro

Tchelinux
12/11/08 50
Desenvolvendo aplicações em Java para o Google Android

Emulador
● Emula o hardware (QEMU)
● Não possui suporte:
– Fazer e receber chamadas
– Captura de foto/áudio/vídeo
– Nível da bateria
– Bluetooth

Tchelinux
12/11/08 51
Desenvolvendo aplicações em Java para o Google Android

Instalando o SDK

● http://code.google.com/android/intro/installing.html

Tchelinux
12/11/08 52
Desenvolvendo aplicações em Java para o Google Android

Aplicação Android
● Existem 4 tipos básicos de elementos:
– Activities
– Intents e IntentFilters ( BroadcastReceivers)
– Services
– Content Providers
● Os componentes que compõe a aplicação estão no 
AndroidManifest.xml.

Tchelinux
12/11/08 53
Desenvolvendo aplicações em Java para o Google Android

Hello World!

● http://code.google.com/android/intro/hello­android.html

Tchelinux
12/11/08 54
Desenvolvendo aplicações em Java para o Google Android

Ferramenta
● DroidDraw – editor de telas
– http://www.droiddraw.org/

Tchelinux
12/11/08 55
Desenvolvendo aplicações em Java para o Google Android

Hello World! Melhorado...

● http://code.google.com/android/intro/hello­android.html

Tchelinux
12/11/08 56
Desenvolvendo aplicações em Java para o Google Android

Em um passado
não muito
distante....
A concorrência..

Tchelinux
12/11/08 57
Desenvolvendo aplicações em Java para o Google Android

Macintosh X IBM­PC

● Plataforma Fechada ● Plataforma Aberta
● Um fornecedor ● Varios fornecedores
● Considerado o melhor ● Dominou o mercado

Tchelinux
12/11/08 58
Desenvolvendo aplicações em Java para o Google Android

Mac brasileiro
● Mac512 Unitron – primeiro clone de um 
Macintosh feito no mundo...
● Não podemos usá­lo... :(

Tchelinux
12/11/08 59
Desenvolvendo aplicações em Java para o Google Android

IPhone X Android

● Plataforma Fechada ● Plataforma Aberta
● Um fornecedor ● Varios fornecedores
● Considerado o melhor ● ???????
Tchelinux
12/11/08 60
Desenvolvendo aplicações em Java para o Google Android

SDK Concorrência
● É lançado e disponibilizado o SDK do Android
● Logo depois... o SDK do Iphone
● Quem ganha? Nós....

Tchelinux
12/11/08 61
Desenvolvendo aplicações em Java para o Google Android

Android não é Java
● Não executa bytecodes
– Execura arqquivos dex
● Não possui JVM (????)
– Dalvik não é uma JVM
● Não segue as especificações do JCP

Tchelinux
12/11/08 62
Desenvolvendo aplicações em Java para o Google Android

JCP ­ Quem “manda” no Java
● JCP – Java Community Process
● Qualquer um pode participar (JSR's)
● O processo é aberto (papel da Sun)
● Compatibility Test Suite: mais de 5000 itens

Tchelinux
12/11/08 63
Desenvolvendo aplicações em Java para o Google Android

Membros JCP
– Apache Software Foundation
– BEA Systems
– Borland
– Google
– Fujitsu Limited
– Hewlett­Packard
– IBM
– Intel
– Oracle
– Red Hat
– SAP
– Sun Microsystems
Tchelinux
12/11/08 64
Desenvolvendo aplicações em Java para o Google Android

Dalvik
● Interpreter­only, register based virtual machine
– Dan Bornstein
● Optimized to run multiple VM instances
● Executes files in .dex format
● Runs on posix­compliant operating systems
● Looks like Java
● Dalvik?
– village of Dalvík in Iceland

Tchelinux
12/11/08 65
Desenvolvendo aplicações em Java para o Google Android

Dalvik – Jar x Dex

Tchelinux
12/11/08 66
Desenvolvendo aplicações em Java para o Google Android

JVM – O segredo do desempenho
J I T 
Compilador just­in­time

Dalvik não possui J I T !!!
Tchelinux
Desenvolvendo aplicações em Java para o Google Android

JVM – O segredo do desempenho

Tchelinux
Desenvolvendo aplicações em Java para o Google Android

Dalvik – sem JIT
● Geralmente não precisa
● Lotes de código nativo
● Sistema proporciona libs para gráficos, mídia
● JNI disponível
● Suporte a hardware comum (gráficos, áudio)
– Dan Bornstein

Tchelinux
Desenvolvendo aplicações em Java para o Google Android

Garbage Collector
● Mais de uma referência pode apontar para o 
mesmo objeto

Tchelinux
12/11/08 70
Desenvolvendo aplicações em Java para o Google Android

Garbage Collector
● Se o objeto não possui referências, está 
liberado para o coletor de lixo

Tchelinux
12/11/08 71
Desenvolvendo aplicações em Java para o Google Android

Garbage Collector

Tchelinux
12/11/08 72
Desenvolvendo aplicações em Java para o Google Android

GC Dalvik
● Separate process, separate heaps, separate 
GCs
● GCs must be independent
● GC should respect the sharing!

Tchelinux
12/11/08 73
Desenvolvendo aplicações em Java para o Google Android

Obrigado !!!

Tchelinux
12/11/08 74
Desenvolvendo aplicações em Java para o Google Android

Bibliografia
✔ http://www.fatecjp.com.br/posgraduacao/posgraduacao­ddm.htm
✔ http://www­di.inf.puc­rio.br/~endler/courses/Mobile/Tarefas/MAP­slides/
✔ http://www.android­br.mobi/
✔ http://code.google.com/android/
✔ http://source.android.com/
✔ http://ranierifernandes.blogspot.com
✔ http://java.sun.com
✔ http://www.jcp.org/en/participation/members/
✔ http://www.tiobe.com/tpci.htm
✔ http://www.droiddraw.org/

Tchelinux
12/11/08 75

Вам также может понравиться