Duration
21 hours (usually 3 days including breaks)
Requirements
- C/C++ programming experience.
- Java programming experience.
- Knowledge of hardware and software architecture.
Audience
- Linux system developers
- Android system programmers
- Developers who want to get into Android system programming
Overview
Android HAL (Hardware Abstraction Layer) is one of the lower layers in the Android OS software stack (right above the Linux kernel). It is a hardware specific implementation that provides an interface between system services (e.g., camera software) and the hardware drivers for that service (e.g., camera driver).
This instructor-led, live training (online or onsite) is aimed at developers who wish to write HAL interfaces to enable Android applications to talk to the underlying hardware.
By the end of this training, participants will be able to:
- Set up the development environment needed to start HAL development for Android.
- Implement a HAL interface to enable Android services to communication with hardware device drivers.
- Understand how a HAL module is loaded by an Android system.
- Develop, test and debug HAL code iteratively using an Android emulator.
- Load and deploy HAL modules onto a physical Android device for real-world testing.
- Understand and implement HAL’s re-architectured HIDL on Android 8.0 devices.
Format of the Course
- Interactive lecture and discussion.
- Lots of exercises and practice.
- Hands-on implementation in a live-lab environment.
Course Customization Options
- To request a customized training for this course, please contact us to arrange.
Course Outline
Introduction
- Android HAL as a hardware specific implementation.
Overview of the Android Platform Architecture
The HAL Development Cycle for Hardware Vendors
Case Study: Interfacing Low-Level C/C++ with High-Level Java
Preparing the Development Environment
Setting up an Android Emulator
Creating a HAL Implementation
Understanding the File Structure of a HAL Interface (C headers, hardware/libhardware, etc.).
HAL vs HIDL (HAL Interface Definition Language)
Coding for HIDL on Android O.
Packaging Code into a Library Module (.so) File
Writing an Application Level Code in the Java API Framework
Calling the Device Hardware from a Java Service
Debugging the HAL Module
Deploying a HAL Module
Updating HAL to New Versions of Android OS
Troubleshooting
Summary and Conclusion