Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Android Core Aula 1 - Histórico, Arquitetura e Compilação da plataforma

1,339 views

Published on

Primeira aula do curso Android Core
Detalhes da arquitetura da plataforma Android, histórico e procedimento para compilação.

Material completo em http://www.felipesilveira.com.br/android-core

Published in: Technology
  • Be the first to comment

Android Core Aula 1 - Histórico, Arquitetura e Compilação da plataforma

  1. 1. Android Core Felipe Silveira felipesilveira.com.br Aula 1
  2. 2. Android? Sistema Operacional + Plataforma de desenvolvimento + Aplicações Padrão (SMS, Maps, Calendar...) Código aberto (AOSP - Android Open Source Project) Desenvolvido pelo Google e posteriormente pela Open Handset Alliance
  3. 3. Histórico 2003: Andy Rubin, Rich Miner, Nick Sears e Chris White fundam a Android, Inc 2005: Google efetua a compra da Android, Inc 2007: Open Handset Alliance announced along with Android 2008 - Android 1.0 is released
  4. 4. Histórico 2009 - Android 1.1 2009 - Android 1.5 / Cupcake 2009 - Android 1.6 / Donut 2009 - Android 2.0/2.1 / Eclair 2010 - Android 2.2 / Froyo 2010 - Android 2.3 / Gingerbread 2011 - Android 3.0 / Honeycomb – Tablet-optimized 2011 – Android 3.1 – USB host support 2011 – Android 4.0 / Ice-Cream Sandwich – merge Gingerbread and Honeycomb22 2012 -Android 4.1 / Jelly Bean
  5. 5. Compilando Android
  6. 6. Requisitos Mínimos ● Ubuntu 10.04 LTS ● Ambiente 64 bits ● 30 GB de disco ● Python 2.7 ● GNU make 3.82 ● JDK 6 ● Git 1.7
  7. 7. Ccache Ferramenta utilitária para tornar o processo de compilação mais rápido $ export USE_CCACHE=1 $ ccache -M 10G
  8. 8. Dependências Para instalar as dependências, pode-se usar o seguinte comando: $ sudo apt-get install git-core gnupg flex bison gperf build-essential zip curl zlib1g-dev libc6-dev lib32ncurses5-dev ia32-libs x11proto-core-dev libx11-dev lib32readline5-dev lib32zdev libgl1-mesa-dev g++-multilib mingw32 tofrodos pythonmarkdown libxml2-utils xsltproc
  9. 9. Repo Para instalar o Repo, pode-se usar o seguinte comando: $ sudo apt-get install curl $ curl https://dl-ssl.google.com/dl/googlesource/gitrepo/repo > ~/bin/repo $ chmod a+x ~/bin/repo $ chmod a+x ~/bin/repo
  10. 10. Git Para instalar o Git, pode-se usar o seguinte comando: $ sudo apt-get install git
  11. 11. Fazendo download do código Crie um diretório vazio para armazenar seus arquivos de trabalho. Dê-lhe o nome que quiser: $ mkdir working_directory $ cd working_directory Execute o repo init $ repo init -u https://android.googlesource. com/platform/manifest ou $ repo init -u https://android.googlesource. com/platform/manifest -b android-4.0.1_r1
  12. 12. Fazendo download do código Execute o comando sync: $ repo sync ou: $ repo sync - jN
  13. 13. Repositórios alternativos Linaro Projeto com suporte a diversos SoCs ARM (system on a chip) Rowboat Projeto com suporte a dispositivos usando os chips TI Sitara (como a BeagleBoard XM e a BeagleBone) Cyanogen Mod Projeto comunitário que visa a construção de ROMs para vários telefones comerciais. https://github.com/cyanogenmod
  14. 14. Entendendo o repositório bionic - a biblioteca C-runtime para o Android. Note que o Android não está usando o glibc como a maioria das distribuições Linux. Em vez disso a biblioteca c é chamado de bionic e é baseada principalmente em fontes de derivados do BSD. Neste diretório, você vai encontrar os arquivos fonte para a c-lib, matemática e outras bibliotecas de runtime.
  15. 15. Entendendo o repositório bootable - inicialização e código relacionado a inicialização. Neste diretório se encontra o código fonte do bootloader a a implementação do protocolo fastboot.
  16. 16. Entendendo o repositório build - a implementação do sistema de build, incluindo todos os makefiles. Um arquivo importante aqui é o script envsetup.sh que vai ajudá-lo muito quando se trabalha com a fonte da plataforma. Este arquivo será executado posteriormente para configurar as variáveis ​de ambiente e compilar módulos específicos.
  17. 17. Entendendo o repositório cts - os testes de compatibilidade. O conjunto de testes para garantir que a build está em conformidade com a especificação do Android. Iremos falarar mais a respeito dessas ferramentas posteriormente.
  18. 18. Entendendo o repositório dalvik - o código fonte da Dalvik Virtual Machine
  19. 19. Entendendo o repositório development - projetos relacionados ao desenvolvimento de aplicações, tais como o código-fonte do SDK e NDK.
  20. 20. Entendendo o repositório device - código específico do produto para diferentes dispositivos. Este é o lugar para encontrar módulos de hardware para os diferentes dispositivos Nexus , configurações de compilação e muito mais.
  21. 21. Entendendo o repositório external - contém o código fonte para todos os projetos de código aberto externos, tais como SQLite, Freetype e webkit.
  22. 22. Entendendo o repositório frameworks - esta pasta é essencial para o Android , uma vez que contém todo o código do framework . Aqui você vai encontrar a implementação de serviços essenciais como o System Server, que contém o PackageManager. Uma grande parte do mapeamento entre as APIs aplicação java e as bibliotecas nativas também é feito aqui.
  23. 23. Entendendo o repositório hardware - código-fonte relacionado ao hardware, como a especificação de camada de abstração de hardware Android (HAL - Hardware Abstraction Layer). Esta pasta também contém a camada de interface de rádio (para comunicação com modem).
  24. 24. Entendendo o repositório out - o diretório que contém os artefatos resultantes da compilação.
  25. 25. Entendendo o repositório packages - contém o código fonte para os aplicativos padrão, como contatos, calendário, navegador.
  26. 26. Entendendo o repositório prebuilts - contém arquivos que são distribuídos em forma binária por conveniência. Exemplos: toolchain, emulator kernel
  27. 27. Entendendo o repositório system - arquivos de código fonte para o núcleo do sistema Android. Esse é o sistema Linux mínimo que é iniciado antes do Dalvik VM e quaisquer serviços baseados em Java são ativados. Isso inclui o código fonte para o processo de inicialização e o script init.rc padrão que fornecem a configuração dinâmica da plataforma
  28. 28. Compilando $ ccache -M 10G $ . build/envsetup.sh $ set_stuff_for_environment
  29. 29. Seleção de target $ lunch full-eng Build name Device Notas full emulator build completa com todas linguagens, aplicações, input methods full_maguro maguro build completa para o Galaxy Nexus GSM/HSPA+ ("maguro") full_panda panda build completa para a PandaBoard ("panda")
  30. 30. Seleção de target Buildtype Uso user acesso limitado; comumente usado para builds de produção userdebug configuração parecida com user, porém com acesso root e debug eng configuração de desenvolvimento, com algumas ferramentas de debug adicionais.
  31. 31. Enfim, Compilando $ make ou $ make -jN
  32. 32. Executando o emulador $ emulator
  33. 33. ADB O ADB (Android debug bridge) é uma ferramenta utilizada para acessar muitos dos recursos do emulador e de um telefone anexado ao computador via USB $ adb devices $ adb -help
  34. 34. Arquitetura Android
  35. 35. Arquitetura Android
  36. 36. Por que Linux Kernel? • Gerenciador de memória e processos estável • Suporte para shared libraries • Open source!
  37. 37. Modificações Android Ashmem - Anonymous shared memory - Implementação Android para o gerenciador de memória compartilhada entre processos.
  38. 38. Modificações Android Binder - Implementação do OpenBinder para android, contendo também a implementação da runtime AIDL. Desenvolvido para resolver a necessidade de execução de código em processos separados (Aplicações e Serviços) sem o overhead que o IPC introduziria
  39. 39. Modificações Android Low Memory Killer - Mecanismo para matar processos quando o sistema está sendo executado com pouca memória.
  40. 40. Modificações Android Logging - Mecanismo de logging do android, via /dev/log
  41. 41. Modificações Android Pmem - Process memory allocator - driver de alocação de memória física para os processos
  42. 42. Modificações Android WakeLocks - Mecanismo de gerência de energia, otimizado para dispositivos móveis. O controle dos wakelocks é exposto à camada de aplicações através do componente PowerManager.
  43. 43. Modificações Android Alarm Timers - Suporte na camada de kernel para o AlarmManager, que permite que o sistema "acorde" depois de certos eventos.
  44. 44. Modificações Android RAM Console - Extensão que permite ao kernel fazer um dump de dados importante para a memória RAM do device quando ocorre um 'pânico' - o sistema é reiniciado por alguma falha.
  45. 45. Libraries Surface Manager: gerencia o acesso ao display do dispositivo e camadas de gráficos 2D e 3D de múltiplas aplicações.
  46. 46. Libraries Media Framework: as bibliotecas suportam execução e gravação da maioria dos formatos de áudio e vídeo, bem como exibição de imagens, incluindo MPEG4, H.264, MP3, AAC, AMR, JPG, e PNG.
  47. 47. Libraries Webkit: engine de navegador web usada na implementação do browser nativo e também na implementação dos widgets de webview.
  48. 48. Libraries SGL: uma engine de gráficos 2D.
  49. 49. Libraries 3D libraries: uma implementação baseada na especificação OpenGL ES 1.0, a qual utiliza tanto aceleração de hardware 3D e um avançado e otimizado software para renderização de modelos tridimensionais.
  50. 50. Libraries FreeType: renderização de fontes em formatos bitmaps e vetoriais.
  51. 51. Libraries SQLite: um SGBD (Sistema gerenciador de banco de dados) relacional e otimizado para ocupar pouco espaço e ser suficiententemente rápido.
  52. 52. Libraries Biblioteca de sistema C (libc): é uma implementação da biblioteca C padrão, otimizada para dispositivos que suportam a plataforma Linux (embbeded- linux). A implementação da libc em Android é conhecida como Bionic e tem características muito importantes: Tamanho Reduzido e Velocidade
  53. 53. Android Runtime Android possui sua própria máquina virtual Java: A Dalvik VM, mais rápida e leve, com set de instruções menor do que a JVM.
  54. 54. Android Runtime Existe um passo adicional, que é a conversão dos arquivos .class em .dex, que são reconhecidos e executados pela Dalvik VM.
  55. 55. Android Runtime Na inicialização do sistema, é criado um processo para a máquina virtual chamado Zygote. A partir desse processo, outras instâncias da máquina virtual são criadas com fork() quando necessário para executar outras aplicações.
  56. 56. Android Runtime Para completar a camada de Android Runtime, temos as core libraries, que sofreram pouca ou nenhuma modificação no projeto AOSP. São elas: Data structures, Utilities, File access, Network Access, Graphics, etc.
  57. 57. Application Framework Acima das camadas de Libraries e Runtime está a camada Application Framework. Esta é a camada responsável por prover às aplicações APIs amigáveis que permitem o acesso às funcionalidades da plataforma.
  58. 58. Application Framework Activity Manager - Gerencia o ciclo de vida de aplicações. Responsável por iniciar, parar e retomar as diversas aplicações.
  59. 59. Application Framework Window Manager - Responsável por renderizar a UI.
  60. 60. Application Framework Package Manager - Instala / remove aplicativos
  61. 61. Application Framework Telephony Manager - Permite a interação com os serviços de telefonia, como SMS e MMS.
  62. 62. Application Framework Content Providers - O componente responsável por compartilhar dados entre aplicações.
  63. 63. Application Framework Resource Manager - Gerenciamento de recursos de aplicações - por exemplo, imagens, sons, etc
  64. 64. Application Framework View System - Fornece às aplicações os widgets (como botões, listas, etc) e gerencia seu comportamento.
  65. 65. Application Framework Location Manager - Permite que as aplicações acessem serviços baseados em localização seja por GPS, celltower IDs, ou bancos de dados Wi-Fi locais.
  66. 66. Application Framework XMPP - Mecanismo de troca de mensagens entre aplicações.
  67. 67. Applications A última camada da stack Android - Applications - contém as aplicações, que apresentam conteúdo ao usuárioe interage com este diretamente. Existem algumas aplicações que já vem embutidas na plataforma, como o cliente de Email, de SMS, Calendário, Mapas, Navegador, Home Screen, Contatos e outros.
  68. 68. Applications Nessa camada comumente temos diversas customizações feitas pelas fabricantes de celular, como o MotoBlur, da Motorola, o Sense da HTC e o TouchWiz, da Samsung. Essa flexibilidade contribuiu para a adoção da plataforma por diversos fabricantes e sua decorrente popularização.

×