HAL タイプ

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 インターフェースです。

: Android には、常にバインドモードとなる HIDL インターフェース(android.frameworks.*android.system.*android.hidl.*)があります(後述の android.hidl.memory@1.0 は例外です)。

パススルー 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

伝統型 HAL と従来型 HAL

Android 8.0 でサポートが終了する伝統型 HAL は、特定の名前を付けられ、バージョンが管理されたアプリケーション バイナリ インターフェース(ABI)に準拠したインターフェースです。Android システム インターフェースの大部分(カメラオーディオセンサーなど)は伝統型 HAL の形式となっており、hardware/libhardware/include/hardware で定義されています。

同じく Android 8.0 でサポートが終了する従来型 HAL は、伝統型 HAL よりも前のインターフェースです。重要なサブシステム(Wi-Fi、無線インターフェース レイヤ、Bluetooth)のいくつかは、従来型 HAL です。従来型 HAL を記述する統一された方法や標準化された方法はありませんが、伝統型 HAL ではない Android 8.0 より前の HAL は、従来型 HAL です。従来型 HAL には libhardware_legacy に含まれているものと、コードベース全体に散在しているものがあります。