$30 off During Our Annual Pro Sale. View Details »

Programando para Android

Programando para Android

Slides de introdução ao desenvolvimento de aplicações para Android.

Ubiratan Soares
PRO

February 05, 2015
Tweet

More Decks by Ubiratan Soares

Other Decks in Programming

Transcript

  1. PROGRAMANDO
    PARA ANDROID
    Uma Introdução Prática

    View Slide

  2. Ubiratan Soares
    Computeiro by ICMC / USP
    Instrutor e Palestrante
    Intel Software Innovator
    Google Developer Expert
    GDG-SP Leader

    View Slide

  3. MOTIVAÇÃO

    View Slide

  4. ALGUNS FATOS
    Android é o SO dominante no mercado de dispositivos móveis
    Distribuição Linux mais bem sucedida da história
    Vendas na casa de bilhões de dispositivos
    Bilhões de downloads de aplicações via Google Play
    Avanços realmente significativos no campo de IoT

    View Slide

  5. SABORES DO SISTEMA
    VERSION DISTRIBUITION
    Froyo 0.4%
    Gingerbread 7.8%
    ICS 6.7%
    JellyBean 4.1 19.2%
    JellyBean 4.2 20.3%
    JellyBean 4.3 6.5%
    KitKat 39.1%
    Janeiro de 2015
    39%
    46%
    7%
    8%
    0%

    View Slide

  6. COMPOSIÇÃO DO SISTEMA
    Distribuição Linux com uma pilha específica de software :
    Subsistemas desenvolvidos pelo próprio Google para o Android
    Diversos projetos de código-aberto amplamente adotados pela indústria
    Componentes proprietários, dependendo da combinação de versão do
    sistema e aparelho-alvo / fabricantes
    Aplicações pré-embarcadas, de código aberto (AOSP) ou fechado (GMS)

    View Slide

  7. LINUX KERNEL
    DRIVERS
    (USB, Bluetooth, Sensors, etc)
    Power Management
    Process Management
    Networking IPC
    NATIVE LIBRARIES
    Graphics
    (OpenGL ES, FreeType, etc)
    libc Webkit SSL SQLite
    Media
    Framework
    Surface
    Manager
    ANDROID FRAMEWORK
    ACTIVITY MANAGER
    WINDOW MANAGER
    TELEPHONY NOTIFICATIONS VIEWS SYSTEM
    LOCATION MANAGER PACKAGE MANAGER RESOURCES MANAGER
    ANDROID LIBRARIES
    DALVIK / ART
    ANDROID RUNTIME

    View Slide

  8. APPLICATION SANDBOXING
    LINUX PROCESS
    Android Application
    RESOURCES DEX EXECUTABLE
    ANDROID RUNTIME
    GID
    UID
    PID
    SQLITE
    PREFS
    FILES

    View Slide

  9. SANDBOXING
    A princípio, cada aplicação em seu processo Linux
    Outras aplicações não tem conhecimento ou acesso aos
    seus dados (a menos que compartilhados)
    Aplicações precisam de permissão do usuário para interagir
    com recursos específicos do sistema, acessar recursos de
    outras aplicações ou do hardware, dentre outros

    View Slide

  10. ANDROID RUNTIME
    O ambiente de execução do Android não é uma JVM à risca
    Dalvik/ART foram desenhados com vistas à boa
    interoperabilidade com o SO e necessidades dos apps
    Dalvik/ART executa um bytecode específico, gerado a partir
    do bytecode Java tradicional
    A partir do Android Lollipop, o ART é o ambiente de
    execução padrão

    View Slide

  11. DEXING PROCESS
    App.java App.class
    JVM
    Java Bytecode
    javac
    DALVIK / ART
    Dalvik Bytecode
    App.dex
    dex
    compiler

    View Slide

  12. BOOT PROCESS
    LINUX KERNEL INIT
    RUNTIME
    Google Maps
    HEAP +
    LIVE CODE
    ZYGOTE
    SHARED
    PRE-LOADED RUNTIME
    ZYGOTE
    fork() fork() fork()
    RUNTIME
    GMail
    HEAP +
    LIVE CODE
    ZYGOTE
    SHARED
    RUNTIME
    Your App Here !!!
    HEAP +
    LIVE CODE
    ZYGOTE
    SHARED

    View Slide

  13. ANDROID FRAMEWORK
    YOUR APP HERE!
    Android Framework
    Runtime
    Native Libraries
    Linux Kernel
    SoC Hardware
    Core JDK 1.7
    Android APIs
    OSS Extras
    •200 pacotes
    •5.000 classes
    •40.000 métodos

    View Slide

  14. VERSÕES E NÍVEIS DE API
    VERSION API LEVEL NICKNAME
    1.5 3 Cupcake
    1.6 4 Donut
    2.0 , 2.0.1, 2.1 5, 6, 7 Eclair
    2.2 8 Froyo
    2.3.x 9, 10 Gingerbread
    3.x.y 11, 12, 13 Honeycomb
    4.0.x 14, 15 Ice Cream Sandwich
    4.1.x 16 Jelly Bean
    4.2.x 17 Jelly Bean
    4.3.x 18 Jelly Bean
    4.4.x, 4.4w 19, 20 Kit Kat
    5.0 21 Lollipop

    View Slide

  15. AMBIENTE DE
    DESENVOLVIMENTO

    View Slide

  16. ANDROID STUDIO
    Nova solução para desenvolvimento de aplicações Android,
    anunciada pelo Google em 2013 (Google IO)
    Aposenta o paradigma anterior de desenvolvimento, baseado
    em Eclipse, ADT Plugin e ANT
    Combina as capacidades de uma IDE já consolidada
    (IntellijIDEA) com uma novo sistema para construir as
    aplicações (Gradle)

    View Slide

  17. View Slide

  18. ANDROID SDK
    Conjunto de ferramentas criadas para possibilitar o trabalho do
    desenvolvedor
    Primeira instalação do Android Studio irá oferecer assistente
    para fazer download e/ou configurar o SDK
    Ferramentas mais importantes estão integradas com o Android
    Studio
    É interessante deixar diretórios no path do seu shell preferido!

    View Slide

  19. ALGUMAS FERRAMENTAS
    /android-sdk/tools
    /android-sdk/platform-tools
    SDK MANAGER
    AVD MANAGER
    EMULATOR
    LINT
    TRACEVIEW
    HIERARCHYVIEWER

    ADB FASTBOOT SQLITE3 SYSTRACE …

    View Slide

  20. View Slide

  21. View Slide

  22. GRADLE
    Build System de propósito geral, construído em Groovy/Java
    Adotado como padrão para o Android desde 2013
    Oferece recursos avançados e soluções poderosas para
    problemas comuns enfrentados em grandes projetos
    É integrado como ferramenta externa ao Android Studio

    View Slide

  23. ESTRUTURA
    DE UM PROJETO

    View Slide

  24. Estrutura de pacotes Java (app/java/*)
    Recursos Estáticos (app/res/*)
    Arquivos globais relacionados a build
    Arquivo de build do módulo app
    Primeiro módulo funcional da aplicação
    Android Manifest

    View Slide

  25. ANDROID MANIFEST
    Documentação pública da aplicação
    Interface declarativa para leitores de interesse, como o
    próprio sistema operacional, lojas e outros
    Declarações sobre a estrutura da aplicação e seus
    componentes, permissões pedidas em tempo de instalação,
    funcionalidades exigidas, dentre outros

    View Slide

  26. O ARQUIVO R
    Mecanismo de “cola" entre os recursos da aplicação
    (estáticos) e o código em execução (dinâmico)
    Pré-processador cria uma classe Java, formada por
    referências categorizadas para os recursos da aplicação
    Cada recurso é mapeado por uma constante inteira
    No código Java, recursos são acessados por suas
    referências!

    View Slide

  27. INTRODUZINDO
    O FRAMEWORK

    View Slide

  28. BUILDING BLOCKS
    ACTIVITY
    SERVICE
    BROADCAST
    RECEIVER
    CONTENT
    PROVIDERS
    INTENT

    View Slide

  29. ACTIVITY
    "Representa a tela”
    Tem a responsababilidade de gerenciar a interface de
    usuário e os eventos passíveis originados do SO aos quais a
    tela está sujeita
    Pode ser entendida como um CONTROLLER para a VIEWS
    com as quais o usuário interage, segundo o padrão MVC

    View Slide

  30. MAIS SOBRE ACTIVITY
    Objeto com instância criada e controlada pelo runtime
    Possui um ciclo de vida bem definido, de acordo com os
    eventos da tela
    Como programador, você não possui controle sobre qual
    estado uma Activity se encontra; mas você pode ser
    avisado das transições de interesse
    https://developer.android.com/reference/android/app/Activity.html

    View Slide

  31. View Slide

  32. APPLICATION RESOURCES
    Recursos da aplicação previamente disponíveis são
    acessados pelo sistema gerenciador de recursos do Android
    Extremamente poderoso e flexível, baseado em
    qualificadores e convenções
    Android determina em o recurso correto a ser utilizado em
    tempo de execução

    View Slide

  33. INTERFACES GRÁFICAS
    Android oferece duas abordagens para a construção de UI :
    estática e dinâmica
    A abordagem estática usa templates previamente
    construídos em arquivos XML, que serão convertidos em
    views em tempo de execução
    Na abordagem dinâmica, os parâmetros de uma view são
    fornecidos programaticamente

    View Slide

  34. HIERARQUIA DE VIEWS
    VIEW GROUP
    VIEW GROUP VIEW GROUP
    VIEW VIEW VIEW

    View Slide

  35. LAYOUTS E WIDGETS
    Diversas implementações de Views e Views Groups
    disponíveis na API do Android
    Definem a View de interesse em relação aos seus atributos
    e comportamentos
    Exemplos de ViewGroup : LinearLayout, RelativeLayout,
    ListView, e outros
    Exemplos de View simples : Button, TextView, ImageView e
    outros

    View Slide

  36. INTENTS
    Abstração de mensagens, utilizada para ativação entre
    componentes, não necessariamente na mesma aplicação
    Podem ser explícitos ou implícitos
    Para um Intent Explícito, a própria mensagem contém a informação
    de qual componente é o alvo
    Para um Intent Implícito, Android irá determinar em tempo de
    execução quais componentes estão aptos a responder a mensagem

    View Slide

  37. DOIS CASOS TÍPICOS
    Dentro da nossa aplicação, utilizamos Intents para trocar
    de tela, pedindo para o Android iniciar uma nova
    Activity,através de um Intent Explícito
    Utilizamos os recursos de outra aplicação para
    compartilhar algum conteúdo de interesse, como uma
    URL ou arquivo, através de um Intent Implícito

    View Slide

  38. NAVEGAÇÃO E BACKSTACK
    ACTIVITY #02 ACTIVITY #03
    ACTIVITY #01

    View Slide

  39. BACKSTACK
    ACTIVITY #01
    BACKSTACK
    ACTIVITY #02
    ACTIVITY #01
    BACKSTACK
    ACTIVITY #03
    ACTIVITY #01
    ACTIVITY #02
    ACTIVITY #02
    BACKSTACK
    ACTIVITY #01
    startActivity(intentA) onBackPressed( )
    startActivity(intentB)

    View Slide

  40. DEMO

    View Slide

  41. CONTATOS
    [email protected]
    @ubiratanfsoares
    google.com/+UbiratanSoares
    ubiratansoares.github.io

    View Slide

  42. OBRIGADO

    View Slide