このドキュメントでは、HIDL インターフェースのハッシュ化について説明します。これは、誤ったインターフェースの変更を防ぎ、インターフェースの変更を徹底して検証するためのメカニズムです。HIDL インターフェースはバージョン管理されているため、このメカニズムは必須です。つまり、インターフェースのリリース後は、アプリケーション バイナリ インターフェース(ABI)の維持目的(コメントの修正など)以外には、インターフェースを変更できません。
レイアウト
すべてのパッケージのルート ディレクトリ(hardware/interfaces
にマッピングされる android.hardware
、または vendor/foo/hardware/interfaces
にマッピングされる vendor.foo
など)には、リリースされたすべての HIDL インターフェース ファイルを一覧表示する current.txt
ファイルが含まれている必要があります。
# current.txt files support comments starting with a '#' character # this file, for instance, would be vendor/foo/hardware/interfaces/current.txt # Each line has a SHA-256 hash followed by the name of an interface. # They have been shortened in this doc for brevity but they are # 64 characters in length in an actual current.txt file. d4ed2f0e...995f9ec4 vendor.awesome.foo@1.0::IFoo # comments can also go here # types.hal files are also noted in current.txt files c84da9f5...f8ea2648 vendor.awesome.foo@1.0::types # Multiple hashes can be in the file for the same interface. This can be used # to note how ABI sustaining changes were made to the interface. # For instance, here is another hash for IFoo: # Fixes type where "FooCallback" was misspelled in comment on "FooStruct" 822998d7...74d63b8c vendor.awesome.foo@1.0::IFoo
注: どのハッシュがどこから来ているかを追跡しやすくするために、Google は HIDL の current.txt
ファイルを別々のセクションに分割しています。最初のセクションは Android 8 でリリースされ、次のセクションは Android 8 MR1 でリリースされる予定です。お使いの current.txt
ファイルで同様のレイアウトを使用することを強くおすすめします。
hidl-gen を使用してハッシュ化する
手動で、または hidl-gen
を使用して、ハッシュを current.txt
ファイルに追加してください。次のコード スニペットでは、current.txt
ファイルを管理するために hidl-gen
で使用できるコマンドの例を示します(ハッシュは短縮されています)。
hidl-gen -L hash -r vendor.awesome:vendor/awesome/hardware/interfaces -r android.hardware:hardware/interfaces -r android.hidl:system/libhidl/transport vendor.awesome.nfc@1.0::types
9626fd18...f9d298a6 vendor.awesome.nfc@1.0::typeshidl-gen -L hash -r vendor.awesome:vendor/awesome/hardware/interfaces -r android.hardware:hardware/interfaces -r android.hidl:system/libhidl/transport vendor.awesome.nfc@1.0::INfc
07ac2dc9...11e3cf57 vendor.awesome.nfc@1.0::INfchidl-gen -L hash -r vendor.awesome:vendor/awesome/hardware/interfaces -r android.hardware:hardware/interfaces -r android.hidl:system/libhidl/transport vendor.awesome.nfc@1.0
9626fd18...f9d298a6 vendor.awesome.nfc@1.0::types 07ac2dc9...11e3cf57 vendor.awesome.nfc@1.0::INfc f2fe5442...72655de6 vendor.awesome.nfc@1.0::INfcClientCallbackhidl-gen -L hash -r vendor.awesome:vendor/awesome/hardware/interfaces -r android.hardware:hardware/interfaces -r android.hidl:system/libhidl/transport vendor.awesome.nfc@1.0 >> vendor/awesome/hardware/interfaces/current.txt
警告: 以前にリリースされたインターフェースのハッシュは置き換えないでください。このようなインターフェースを変更する場合は、current.txt
ファイルの末尾に新しいハッシュを追加します。詳しくは、ABI の安定性をご覧ください。
hidl-gen
で生成されたすべてのインターフェース定義ライブラリには、ハッシュが含まれます。これは、IBase::getHashChain
を呼び出すことで取得できます。hidl-gen
がインターフェースをコンパイルするときに、HAL パッケージのルート ディレクトリにある current.txt
ファイルをチェックし、HAL が変更されているかどうかを確認します。
- HAL のハッシュが見つからない場合、インターフェースは未リリース(開発中)と見なされ、コンパイルが続行されます。
- ハッシュが見つかった場合はチェックされ、現在のインターフェースと照合されます。
- インターフェースがハッシュと一致した場合、コンパイルが続行されます。
- インターフェースがハッシュと一致しない場合、コンパイルは停止されます。これは、以前にリリースされたインターフェースが変更されているためです。
- ABI を維持するための変更(ABI の安定性を参照)の場合は、コンパイルを続行する前に
current.txt
ファイルを変更する必要があります。 - それ以外の変更はすべて、インターフェースのマイナーまたはメジャー バージョン アップグレードで行う必要があります。
- ABI を維持するための変更(ABI の安定性を参照)の場合は、コンパイルを続行する前に
ABI の安定性
ABI には、バイナリ リンケージや呼び出し規約などが含まれます。ABI または API が変更された場合、インターフェースは公式のインターフェースでコンパイルされた一般的な system.img
と連携できなくなります。
インターフェースをバージョン管理して ABI を安定させることは、次のいくつかの理由により重要です。
- 実装がベンダー テストスイート(VTS)に合格して、フレームワークのみの OTA を実行できるようになります。
- OEM として、使いやすく、準拠したボードサポート パッケージ(BSP)を提供できます。
- どのインターフェースをリリースできるかを追跡するのに役立ちます。
current.txt
は、パッケージ ルート内で提供されているすべてのインターフェースの履歴と状態を確認できる、インターフェース ディレクトリのマップであると考えてください。
すでに current.txt
にエントリがあるインターフェースに新しいハッシュを追加する場合は、ABI の安定性を維持するインターフェースを表すハッシュのみを追加します。以下の変更の種類をご確認ください。
許可されている変更 |
|
---|---|
許可されていない変更 |
|