O documento descreve a história e arquitetura do Android. Resumidamente:
1) O Android foi desenvolvido pela Open Handset Alliance liderada pelo Google para dispositivos móveis baseado no Linux.
2) Sua arquitetura inclui o kernel Linux, máquina virtual Dalvik, bibliotecas e framework Java.
4. 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
5. 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
6. 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, TMobile, 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
7. 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
12. 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 Javabased
middleware layer, which are distributed under
version 2 of the Apache Software License
(ASL).“
Tchelinux
12/11/08 12
15. 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
17. 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
19. 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
20. 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
21. 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
22. 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
23. 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 subpackages
● org.xml.sax Simple API for XML
Tchelinux
12/11/08 23
24. 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
25. 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 – subpackages
● javax.transaction
Tchelinux
12/11/08 25
26. 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
28. 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
33. 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
35. 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
42. 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
43. 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
44. 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
45. 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
49. 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
50. 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
51. 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
53. 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
58. Desenvolvendo aplicações em Java para o Google Android
Macintosh X IBMPC
● Plataforma Fechada ● Plataforma Aberta
● Um fornecedor ● Varios fornecedores
● Considerado o melhor ● Dominou o mercado
Tchelinux
12/11/08 58
62. 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
63. 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
64. Desenvolvendo aplicações em Java para o Google Android
Membros JCP
– Apache Software Foundation
– BEA Systems
– Borland
– Google
– Fujitsu Limited
– HewlettPackard
– IBM
– Intel
– Oracle
– Red Hat
– SAP
– Sun Microsystems
Tchelinux
12/11/08 64
65. Desenvolvendo aplicações em Java para o Google Android
Dalvik
● Interpreteronly, register based virtual machine
– Dan Bornstein
● Optimized to run multiple VM instances
● Executes files in .dex format
● Runs on posixcompliant operating systems
● Looks like Java
● Dalvik?
– village of Dalvík in Iceland
Tchelinux
12/11/08 65
69. 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