Android Frameworks and HAL Implementation |
![]() |
Objectives
|
- Engineers that must work on the Android port on a new platform
- Writing the HAL for a new board
- Debugging the HAL and Android frameworks
- Good Linux kernel and driver programming experience (see our cours D3 - Drivers Linux)
- Android installation knowledge (see our cours G1 - Installation d'Android)
- Basic knowledge of the structure of an Android application(see our cours G2 - Programmation Android)
- Good C++ and Java programming skills (see our cours L3 - C++ embarqué and cours L4G - Java pour Android)
- Printed course material (in English).
- One Linux PC for two trainees.
- One target platform (dual Cortex/A9) for two trainees.
- This course can be dispensed from 3 to 5 days:
- The first three days are mandatory to understand the architecture of the Android Frameworks
- The fourth day covers in more depth the multimedia and video handling
- The fifth day covers the audio framework in detail (this requires part of the knowledge dispensed in the fourth day, so is only available in a full 5 days course)
- Cours théorique
- Support de cours imprimé et au format PDF (en anglais).
- Le formateur répond aux questions des stagiaires en direct pendant la formation et fournit une assistance technique et pédagogique.
- Activités pratiques
- Les activités pratiques représentent de 40% à 50% de la durée du cours.
- Elles permettent de valider ou compléter les connaissances acquises pendant le cours théorique.
- Exemples de code, exercices et solutions
- Un PC (Linux ou Windows) par binôme de stagiaires (si plus de 6 stagiaires) pour les activités pratiques avec, si approprié, une carte cible embarquée.
- Le formateur accède aux PC des stagiaires pour l'assistance technique et pédagogique.
- Une machine virtuelle préconfigurée téléchargeable pour refaire les activités pratiques après le cours
- Au début de chaque demi-journée une période est réservée à une interaction avec les stagiaires pour s'assurer que le cours répond à leurs attentes et l'adapter si nécessaire
- Tout ingénieur ou technicien en systèmes embarqués possédant les prérequis ci-dessus.
- Les prérequis indiqués ci-dessus sont évalués avant la formation par l'encadrement technique du stagiaire dans son entreprise, ou par le stagiaire lui-même dans le cas exceptionnel d'un stagiaire individuel.
- Les progrès des stagiaires sont évalués de deux façons différentes, suivant le cours:
- Pour les cours se prêtant à des exercices pratiques, les résultats des exercices sont vérifiés par le formateur, qui aide si nécessaire les stagiaires à les réaliser en apportant des précisions supplémentaires.
- Des quizz sont proposés en fin des sections ne comportant pas d'exercices pratiques pour vérifier que les stagiaires ont assimilé les points présentés
- En fin de formation, chaque stagiaire reçoit une attestation et un certificat attestant qu'il a suivi le cours avec succès.
- En cas de problème dû à un manque de prérequis de la part du stagiaire, constaté lors de la formation, une formation différente ou complémentaire lui est proposée, en général pour conforter ses prérequis, en accord avec son responsable en entreprise le cas échéant.
Plan du cours
- Linux and Android
- Android Licensing
- The Android-specific kernel drivers
- Ashmem
- Logger
- Low_memory_killer
- Timed_output
- Timed_gpio
- Buttons and Keypad management
- Android Power Management
- The Linux Power Management architecture
- Android Wake Locks
- Android Power Management in Linux drivers
- The Android Kernel debugger
Exercise : | Configuration and build of the Android kernel for the target board | |
Exercise : | Checking the first phases of kernel boot |
- The Android code base
- Building Android
- The Android build environment
- The Android build system
- The Android.mk files
- Adding new components to the build system
- Java components
- Native components
- Applications
Exercise : | Compiling the Android platform |
- Android properties
- Automatic properties
- Default properties
- Persistent properties
- The Android initialization
- Structure of the init process
- The Android initialization language
- The Dalvik Java virtual machine
- The Dalvik machine structure
- The Dalvik bytecodes
- The Dalvik “zygote” process
- The bionic C library
- Why a new C library
- The bionic Android-specific features
- What is missing in bionic
- Adding native components
- Adding native executables
- Defining Java methods in C or C++
- JNI for Android
- Platform interface for native components
- Accessing system properties
- Accessing the Android log system
- Interacting with daemon services
Exercise : | Creating a new native component |
- The Android Binder architecture
- Why a new IPC mechanism
- The Binder in action
- The Binder kernel driver
- Binder implementation
- The AIDL language
- The AIDL tool
- Binder Java classes
- C++ binder implementation classes
- Writing Services
- Standard Java services
- Services and C++
- Using the binder from C++
- System services
- What is a system service
- Static and context-dependent services
- Structure of a system service
- Adding a new system service
- The system ServiceManager process
Exercise : | Coding a system service |
- The Driver API
- The user-mode API
- The Java API
- Why a HAL?
- HAL component structure
- Defining HAL components
- Loading and using HAL component
- The standard HAL components
- Graphics
- Audio
- Camera
- Bluetooth
- GPS
- Sensors
- WiFi
- The Radio Interface Layer (RIL)
Exercise : | Create a simple HAL component |
- Sensors in Android
- The sensor types
- The Sensor Manager
- Accessing Sensors
- Framework Architecture
- Sensor discovery
- Sensor Calibration
- The HAL components
- Multimedia in an Android device
- Data formats and File formats
- Codec and Demux
- Multimedia for Applications
- Audio and video playback (MediaPlayer class)
- Audio and video capture (MediaRecorder class)
Exercise : | Implementation of an mp3 playback service |
- Framework Architecture
- General framework architecture
- General data and control flows
- The MediaPlayer service layer
- Stagefright and OpenMAX
- OpenMAX Overview
- The Khronos Group
- OpenMAX/DL: the Development Layer
- OpenMAX/IL: the Integration Layer
- OpenMAX/AL: the Application Layer
- OpenMAX and OpenSL/ES
- OpenMAX in the Android Media Framework
- Interface between Android and OpenMAX
- The OpenMAX/IL Architecture
- Stagefright the Android playback engine
- The Stagefright class structure
- The OpenMAX/IL Bellagio implementation
- OpenMAX/IL LGPL implementation of the core
- Sample implementation of components
- Anatomy of a component
- Configuration interface
- Data interface
- Buffer allocation
- Bellagio specific setup
- Integration of OpenMAX/IL in Stagefright
- Component registration
- Component configuration
- Component Quirks
- The Surface Flinger
- The Binder interface
- OpenGL/ES interface
- Using hardware accelerators
- Double buffering using framebuffer page-flip
- The HAL graphics components
- Framebuffer control
- Graphic memory allocator
- Bit blitting
- The Hardware composer
- Audio routing
- General architecture of Audio manager
- Audio system
- Audio policy manager
- Audio policy service
- Sound effects
- Control flow
- Playback and recording control
- Time source generation
- Output/input audio flow
- Buffer management
- Audio track
- Overview
- Track live cycle
- Data flow
- Audio mixer:
- Overview
- Mixer life cycle
- Fast mixer
- Resampling
- Volume
- Audio recorder:
- Overview
- Data flow
- Audio policies
- Audio Policies and policy devices
- HAL Audio policy provided services
- Use from the audio policy manager
- Use of audio services by the HAL audio policy
- Output duplication
- Suspend/resume
- Audio devices
- Audio device classes
- Data flow
- Interaction with audio track and record
- Audio effects