Android HAL (Hardware Abstraction Layer) Training Course

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