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 Android.mk 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
- Audio track
- Overview
- Track live cycle
- Data flow
- Audio mixer:
- Overview
- Mixer life cycle
- Fast mixer
- Resampling
- Volume
- Audio recorder:
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
|