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
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)
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
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
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
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)
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!
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
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
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
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!
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
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
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
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
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
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
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