Hardware Abstraction Layer の概要

Android 8.0 以降では、下位のレイヤを書き換え、モジュール化が進んだ新しいアーキテクチャを採用しています。Android 8.0 以降を搭載するデバイスでは、HIDL で記述された HAL をサポートする必要がありますが、以下のようにいくつか例外があります。そのような HAL は、主にバインドとパススルーです。Android 11 では、AIDL で記述された HAL もサポートされています。AIDL HAL はすべてバインドです。

  • バインドされた HAL: HAL インターフェース定義言語(HIDL)または Android インターフェース定義言語(AIDL)で表現された HAL。これらの HAL は、以前のバージョンの Android で使用されていた従来型 HAL とレガシー HAL の両方を置き換えます。バインドされた HAL では、Android フレームワークと HAL はバインダー プロセス間通信(IPC)呼び出しを使用して通信します。Android 8.0 以降で起動するデバイスはすべて、バインドされた HAL のみをサポートする必要があります。

  • パススルー HAL: HIDL でラップされた伝統型 HAL または従来型 HAL。これらの HAL は、既存の HAL をラップし、バインドされた同じプロセス(パススルー)モードで HAL を処理できます。Android 8.0 にアップグレードするデバイスは、パススルー HAL を使用できます。

HAL モードの要件

デバイス パススルー バインド
Android 8.0 でリリース パススルー HAL にリストされている HAL はパススルーされる必要があります。 ベンダー拡張の HAL も含む他のすべての HAL はバインドされます。
Android 8.0 にアップグレード パススルー HAL にリストされている HAL はパススルーされる必要があります。 バインドされた HAL にリストされている HAL はバインドされる必要があります。
ベンダー イメージで提供されるその他の HAL はすべて、パススルー モードまたはバインドモードのどちらかにできます。Treble に完全に準拠したデバイスでは、すべてをバインドする必要があります。

バインダー化された HAL

リリース デバイスかアップグレード デバイスかにかかわらず、すべての Android デバイスで以下の HAL をバインドする必要があります。

  • android.hardware.biometrics.fingerprint@2.1: Android 8.0 に含まれなくなった fingerprintd を置き換えます。
  • android.hardware.configstore@1.0: Android 8.0 の新機能です。
  • android.hardware.dumpstate@1.0: この HAL によって提供された元のインターフェースは shim を適用できなかったため、変更されました。そのため、所定のデバイスに dumpstate_board を再実装する必要があります(この HAL は省略可能です)。
  • android.hardware.graphics.allocator@2.0: 信頼できるプロセスと信頼できないプロセスとの間でファイル記述子を共有しなくてよいように、Android 8.0 でバインドする必要があります。
  • android.hardware.radio@1.0: 独自のプロセスにある rild が提供しているインターフェースを置き換えます。
  • android.hardware.usb@1.0: Android 8.0 の新機能です。
  • android.hardware.wifi@1.0: Android 8.0 の新機能です。system_server に読み込まれた従来の Wi-Fi HAL ライブラリを置き換えます。
  • android.hardware.wifi.supplicant@1.0: 既存の wpa_supplicant プロセスに対する HIDL インターフェースです。

パススルー HAL

リリース デバイスかアップグレード デバイスかに関係なく、すべての Android デバイスでパススルー モードにするには、次の HAL が必要です。

  • android.hardware.graphics.mapper@1.0: メモリを処理中のプロセスにマップします。
  • android.hardware.renderscript@1.0: 同じプロセス内のアイテムをパスします(openGL に相当)。

上記以外のすべての HAL は、リリース デバイス用にバインドする必要があります。

Same-Process HAL

Same-Process HAL(SP-HAL)は、使用されているプロセスと常に同じプロセスで開きます。これには HIDL では記述されていないすべての HAL を含み、バインドされていないものも一部含みます。SP-HAL セットのメンバーシップは Google のみが管理し、例外はありません。

SP-HAL には次のものがあります。

  • openGL
  • Vulkan
  • android.hidl.memory@1.0(Android システムが提供し、常にパススルーとなる)
  • android.hardware.graphics.mapper@1.0
  • android.hardware.renderscript@1.0