Slide 1

Slide 1 text

PROGRAMANDO PARA ANDROID Uma Introdução Prática

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

MOTIVAÇÃO

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

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%

Slide 6

Slide 6 text

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)

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

AMBIENTE DE DESENVOLVIMENTO

Slide 16

Slide 16 text

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)

Slide 17

Slide 17 text

No content

Slide 18

Slide 18 text

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!

Slide 19

Slide 19 text

ALGUMAS FERRAMENTAS /android-sdk/tools /android-sdk/platform-tools SDK MANAGER AVD MANAGER EMULATOR LINT TRACEVIEW HIERARCHYVIEWER … ADB FASTBOOT SQLITE3 SYSTRACE …

Slide 20

Slide 20 text

No content

Slide 21

Slide 21 text

No content

Slide 22

Slide 22 text

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

Slide 23

Slide 23 text

ESTRUTURA DE UM PROJETO

Slide 24

Slide 24 text

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

Slide 25

Slide 25 text

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

Slide 26

Slide 26 text

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!

Slide 27

Slide 27 text

INTRODUZINDO O FRAMEWORK

Slide 28

Slide 28 text

BUILDING BLOCKS ACTIVITY SERVICE BROADCAST RECEIVER CONTENT PROVIDERS INTENT

Slide 29

Slide 29 text

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

Slide 30

Slide 30 text

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

Slide 31

Slide 31 text

No content

Slide 32

Slide 32 text

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

Slide 33

Slide 33 text

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

Slide 34

Slide 34 text

HIERARQUIA DE VIEWS VIEW GROUP VIEW GROUP VIEW GROUP VIEW VIEW VIEW

Slide 35

Slide 35 text

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

Slide 36

Slide 36 text

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

Slide 37

Slide 37 text

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

Slide 38

Slide 38 text

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

Slide 39

Slide 39 text

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)

Slide 40

Slide 40 text

DEMO

Slide 41

Slide 41 text

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

Slide 42

Slide 42 text

OBRIGADO