Agenda - Android embarcado

Informações gerais

Tópicos principais Introdução ao sistema operacional Android, código-fonte do Android e o AOSP, sistema de build (Soong, Kati, Ninja), arquitetura do sistema operacional, sistemas de arquivos e partições, produtos e variantes de build, camada nativa, ferramentas de linha de comando e daemons, sistema de inicialização do Android, makefiles e blueprint files, HAL (Hardware Abstraction Layer), máquina virtual e framework, serviços do framework, APIs e aplicações
Duração 3 dias - 24 horas - 50% de teoria e 50% de prática
Instrutor Sergio Prado
Público-alvo Estudantes, engenheiros e desenvolvedores interessados no funcionamento interno do Android e no processo de porte e adaptação do Android para um sistema embarcado
Pré-requisitos Conhecimentos básicos de sistemas GNU/Linux e linha de comandos do shell. Apesar de não ser essencial, conhecimentos mínimos em Linux embarcado e nas linguagens C, C++ e Java são recomendados
Material de estudo O material de estudo é composto pelos slides, o livro de atividades e exercícios, os guias de referência e documentos de estudo adicionais. Todo o material é fornecido de forma eletrônica no início do treinamento
Kit de desenvolvimento Este treinamento não requer nenhum kit de desenvolvimento ou hardware adicional. Para a execução dos exercícios, é utilizado por padrão o emulador oficial do Android. Se necessário, e conforme a necessidade da empresa contratante, o treinamento pode ser portado para qualquer plataforma de hardware com suporte ao Android

Agenda detalhada

Dia 1 - manhã


Apresentação: Introdução ao sistema operacional Android - Histórico do Android, principais características, licenças de software, processo de certificação, versões alternativas, componentes básicos do sistema operacional.

Apresentação: Código-fonte do Android - Android Open Source Project (AOSP), ferramenta repo e repositórios git, principais diretórios do código-fonte, navegando no código-fonte, AndroidXRef, Android Code Search.

Laboratório: Código-fonte do Android - Neste exercício aprenderemos a baixar o código-fonte oficial do Android (AOSP) e estudaremos a organização e o conteúdo dos principais diretórios do projeto.

Apresentação: Sistema de build do Android - Sistema de compilação do Android, makefiles (Android.mk) e Blueprint files (Android.bp), as ferramentas Soong, Ninja e Kati, produto e variante de build, comando lunch, compilando o Android, imagens geradas, outros comandos de compilação, emulador.

Laboratório: Sistema de build do Android - Neste exercício estudaremos o ambiente de compilação do Android, realizando os testes em uma imagem de emulador gerada para a arquitetura x86_64.

Dia 1 - tarde


Apresentação: Arquitetura do sistema operacional - Características e requisitos de hardware para utilizar o Android, bootloader e fastboot, alterações no kernel Linux para o Android (binder, ashmem, wakelocks, etc), GKI (Generic Kernel Image), organização do sistema de arquivos do Android, partições e pontos de montagem (ramdisk, system, system_ext, data, vendor, odm, product, etc), principais diretórios do sistema de arquivos, ADB.

Laboratório: Ambiente de execução do Android - Neste exercício estudaremos o ambiente de execução do Android. Através de customizações no comportamento do emulador, aprenderemos a acessar os logs do kernel e a console serial. Estudaremos o ADB (Android Debug Bridge) e analisaremos a organização do sistema de arquivos e a execução do sistema operacional, testando a emulação de alguns periféricos como rádio e porta serial.

Apresentação: Produtos - Conceito de produtos, criação de um novo produto, customizando o produto, adicionando aplicações e arquivos, overlay de recursos, definindo propriedades, makefile da placa.

Laboratório: Criação e customização de produtos - Neste exercício aprenderemos a criar e customizar produtos no código-fonte do Android.

Dia 2 - manhã


Apresentação: Camada nativa do Android - Bibliotecas e aplicações da camada nativa, biblioteca C e Bionic, toolbox, toybox e busybox, shell, daemons (ueventd, vold, rild, netd, installd, etc), logcat, utilitários da linha de comandos.

Laboratório: Ferramentas da camada nativa - Neste exercício iremos analisar e testar algumas ferramentas da camada nativa do Android.

Apresentação: Sistema de inicialização do Android - Visão geral do processo de boot, a inicialização do Android, o processo init e o arquivo de configuração init.rc, ações e triggers de boot, serviços e daemons executados na inicialização, gerenciamento das propriedades do sistema, runtime (Dalvik/ART), Zygote, System Server.

Laboratório: Inicialização do Android - Neste exercício iremos estudar e customizar o processo de inicialização do Android.

Dia 2 - tarde


Apresentação: Módulos de compilação - Módulos do sistema de build do Android (bibliotecas, aplicações, etc), criando makefiles (Android.mk), ferramenta Kati, criando arquivos de Blueprint (Android.bp), compilando e instalando módulos.

Laboratório: Compilação de módulos - Neste exercício aprenderemos a criar e adicionar módulos (bibliotecas e aplicações) ao sistema de build do Android.

Apresentação: Hardware Abstraction Layer - Abstraindo o acesso a hardware no Android, arquitetura da HAL (Hardware Abstraction Layer), associação entre as HALs e os serviços do sistema, HAL como biblioteca compartilhada (até Android 7), Project Treble, HAL como serviço (a partir do Android 8), HIDL, VTS, VNDK, VINTF Object, implementação de uma HAL de porta serial em C++.

Laboratório: Implementação de uma HAL - Neste exercício estudaremos sobre a camada de abstração de hardware do Android através do desenvolvimento de uma HAL de porta serial.

Dia 3 - manhã


Apresentação: Framework do Android - Componentes do framework Android, system services, serviços e processos (surfaceflinger, drmserver, mediaserver, cameraserver, etc), System Server, binder e comunicação com os serviços, comandos e utilitários do framework Android, modificando o framework.

Laboratório: Ferramentas do framework Android - Neste exercício estudaremos algumas ferramentas de linha de comando capazes de monitorar e manipular os serviços do framework Android.

Apresentação: Estendendo os serviços do framework - Razões para estender o framework Android, implementando um serviço do framework em Java, conceitos de AIDL, definindo a interface de um serviço em AIDL, conceitos de JNI, acessando a HAL via JNI, criando uma API (classe Manager) para acessar o serviço.

Laboratório: Implementação de serviços do framework - Neste exercício estudaremos sobre a implementação de serviços do framework Android através do desenvolvimento de um serviço de acesso à porta serial.

Dia 3 - tarde


Apresentação: Aplicações Android - Características básicas de uma aplicação Android, componentes de uma aplicação (activities, services, broadcast receivers e content providers), arquivo de manifesto, intents e comunicação entre componentes, processos e threads de uma aplicação Android, ciclo de vida das aplicações, gerenciamento de memória, segurança e permissões, NDK, desenvolvendo uma aplicação dedicada (kiosk mode), aplicação Launcher, lock task mode.

Laboratório: Desenvolvimento de aplicações Android - Neste exercício desenvolveremos uma aplicação Android para se comunicar com a porta serial do emulador utilizando a classe Manager e o serviço desenvolvidos na atividade anterior. Depois estudaremos os procedimentos para transformar a aplicação em um Launcher, rodar em tela cheia e de forma dedicada, utilizando um recurso do Android chamado “lock task mode”.

Apresentação: Recursos adicionais - Links e recursos adicionais, recomendações de livros, dúvidas e comentários finais, encerramento.