Hardware Abstraction Layer(HAL)は抽象化レイヤの種類のひとつであり、ハードウェア ベンダーが実装を行うための標準のインターフェースを備えています。ハードウェア ベンダーは HAL を使用して、高レベルのレイヤにあるコードに影響を与えたり修正を加えたりすることなく、低レベル、デバイス固有の機能を実装できるようになります。
必要な用語
以下は、ドキュメントのこのセクションで使用される用語の定義の一覧です。
- Android インターフェース定義言語(AIDL)
 - Java に似た言語です。使用されるプログラミング言語とは独立した形でインターフェースを定義するために使用されます。AIDL は、HAL クライアントと HAL サービス間の通信を可能にします。
 - バインダ化された HAL
 - バインダ プロセス間通信(IPC)呼び出しを使用して他のプロセスとのやり取りを行う HAL です。バインダ化された HAL は、それを使用するクライアントとは別のプロセスで実行されます。バインダ化された HAL はサービス マネージャーに登録され、クライアントはその機能にアクセスできるようになります。Android 8 以降で記述される HAL はバインダ化されています。
 - HAL クライアント
 - HAL サービスにアクセスするプロセスです。
 - HAL インターフェース
 - HAL クライアントとサービスの両方がやり取りを行うために使用する、共通のインターフェースです。
 - HAL サービス
 特定のデバイスのカメラとやり取りするためのコードなど、ハードウェア固有のコードです。ベンダー パーティションでターゲットにするリリースの互換性マトリックスに記載されている、すべての必須の HAL を実装する必要があります。互換性マトリックスについて詳しくは、互換性マトリックスをご覧ください。
また、新しい HAL インターフェースの作成や HAL のインターフェースの拡張を行い、ハードウェアの独自の要件に対応することもできます。
- ハードウェア インターフェース定義言語(HIDL)
 使用されるプログラミング言語とは独立した形でインターフェースを定義するために使用される言語です。HIDL は、HAL クライアントと HAL サービス間の通信を可能にします。
- Same Process HAL(SP-HAL)
 ラップされた HAL の制限のあるセットです。このセットのメンバーシップは Google により管理されます。SP HAL には以下が含まれています。
- Stable C マッパー 5 HAL
 - OpenGL
 - Vulkan
 - android.hidl.memory@1.0(Android システムが提供し、常にラップされる)
 - android.hardware.renderscript@1.0
 
- ラップされた HAL
 Android 8 以降で機能するようにするために、AIDL または HIDL ラッパーでラップされた、Android 8 よりも前に作成された HAL サービスです。
次のステップ
- HAL サービスの実装方法については、HAL 用の AIDL をご覧ください。
 - 既存の HAL を作成または拡張する方法については、アタッチされた拡張インターフェースをご覧ください。