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

Desenvolvendo aplicações em Java para o Google Android - Ranieri de Souza Fernandes