ac6-training, un département d'Ac6 SAS
Site displayed in English (USA)
View the site in FrenchSite affiché en English (USA)Voir le site en English (GB)
+ +
- -
Online Training
Calendar  Details
Operating Systems
Calendar  Details
Calendar  Details
Calendar  Details
Calendar  Details
+ +
> >
- -

ac6 >> ac6-training >> Operating Systems >> Android >> Android Internals Download Catalog Download as PDF Write us Printable version

G3 Android Internals

Android Frameworks and HAL Implementation

Android Frameworks and HAL Implementation
  • Explore the Android source code architecture
    • The Android init process
    • System services
    • The Android Binder
    • The Android Application Framework
    • The Android Hardware Abstraction Layer
    • The Android Multimedia Framework and OpenMAX
  • Understand the static and dynamic framework structure
    • Class structure
    • Split between Java and C++ code
    • Data flow through the frameworks
    • Control structure of the frameworks
Labs are conducted on i.MX6 or i.MX8 boards
We use the last open source version of Android, as available on the board.
For on-site trainings, if suitable Linux workstations are not available, we provide virtual machine images for VirtualBox; the only requisite is then a recent 64bit PC with at least 8Gb of RAM and 100Gb of free disk space.
Who should attend this course?
  • 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
Course environment
  • Printed course material (in English).
  • One Linux PC for two trainees.
  • One target platform (dual Cortex/A9) for two trainees.
Course modularity
  • 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)

First Day
Android Architecture Overview
  • Linux and Android
  • Android Licensing
The Android Linux kernel enhancements
  • 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 Build system
  • The Android code base
  • Building Android
    • The Android build environment
    • The Android build system
    • The files
  • Adding new components to the build system
    • Java components
    • Native components
    • Applications
Exercise:  Compiling the Android platform
Android System Initialization
  • 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
Second Day
Android Native Interface
  • 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
Android as a Massively Distributed System
  • 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 Android Power Manager
  • The Driver API
  • The user-mode API
  • The Java API
Third Day
The Hardware Abstraction Layer
  • 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
The Android Sensors Framework
  • Sensors in Android
    • The sensor types
    • The Sensor Manager
    • Accessing Sensors
  • Framework Architecture
    • Sensor discovery
    • Sensor Calibration
  • The HAL components
The Android Multimedia Framework
  • 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
Fourth Day
OpenMAX for Android Multimedia
  • 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
Android Graphics low-level components
  • 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
Fifth Day
The Android Audio Manager
  • 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
The Audio Flinger
  • 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
The HAL Audio components
  • 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