このページでは、Android 8.0 以上を搭載するデバイスのディレクトリ レイアウト、VNDK ルール、関連する sepolicy について説明します。
ディレクトリ レイアウト
縮退ディレクトリ レイアウトは、以下のディレクトリで構成されます。
/system/lib[64]
には、LL-NDK、VNDK、フレームワークのみのライブラリ(LL-NDK-Private と、VNDK-SP 内のライブラリと同名のいくつかのライブラリを含む)など、すべてのフレームワーク共有ライブラリが含まれます。/system/lib[64]/vndk-sp
には、same-process HAL 用の VNDK-SP ライブラリが含まれます。/vendor/lib[64]
には、ベンダーによって拡張された VNDK ライブラリ(DXUA または DXUX VNDK ライブラリのいずれか)、same-process HAL の実装、およびその他のベンダー共有ライブラリが含まれます。/vendor/lib[64]/vndk-sp
には、ベンダーによって拡張された VNDK-SP ライブラリが含まれる可能性があります。
ベンダー モジュールは、/system/lib[64]
から VNDK ライブラリを読み込みます。
VNDK のルール
このセクションでは、VNDK ルールの包括的なリストを示します。
- フレームワーク プロセスは、ベンダー パーティションから SP-HAL 以外の共有ライブラリを読み込んではなりません(このルールは、Android 8.1 以降、厳格に適用されます)。
- ベンダー プロセスは、システム パーティションから LL-NDK / VNDK-SP / VNDK 以外のライブラリを読み込んではなりません(このルールは、Android O では厳格に適用されませんが、将来のリリースでは厳格に適用されます)。
- インストールされた VNDK ライブラリは、Google が定義する適格な VNDK ライブラリのサブセットでなければなりません。
- SP-HAL と SP-HAL-Dep の外部依存関係は、LL-NDK または Google が定義する VNDK-SP ライブラリに制限される必要があります。
- SP-HAL 共有ライブラリの依存関係は、LL-NDK ライブラリ、Google が定義する VNDK-SP ライブラリ、その他の SP-HAL ライブラリ、および / または SP-HAL-Dep ライブラリとしてラベル付けできるその他のベンダー共有ライブラリに制限される必要があります。
- ベンダー共有ライブラリを SP-HAL-Dep ライブラリとしてラベル付けできるのは、AOSP ライブラリではなく、依存関係が LL-NDK ライブラリ、Google が定義する VNDK-SP ライブラリ、SP-HAL ライブラリ、および / またはその他の SP-HAL-Dep ライブラリに制限されている場合のみです。
- VNDK-SP は自己完結型でなければなりません。
libRS_internal.so
は Android 8.0 では特別な扱いを受けますが、これは将来のリリースで見直される予定です。 - 非 HIDL インターフェースを介したフレームワークとベンダー間の通信は許されません。非 HIDL インターフェースには、バインダ、ソケット、共有メモリ、ファイルなどが含まれます。
- システム パーティションのサイズは、すべての適格な VNDK ライブラリの 2 つのコピーと、不適格なフレームワーク共有ライブラリの 1 つのコピーを格納できる大きさを持つ必要があります。
sepolicy
このセクションで説明するフレームワーク プロセスは sepolicy の coredomain
に対応し、ベンダー プロセスは non-coredomain
に対応します。たとえば、/dev/binder
は coredomain
でのみアクセスでき、/dev/vndbinder
は non-coredomain
でのみアクセスできます。
同様のポリシーにより、システム パーティションとベンダー パーティション上の共有ライブラリへのアクセスも制限されます。次の表に、さまざまなカテゴリの共有ライブラリへのアクセスの可否を示します。
カテゴリ | パーティション | コアドメイン からアクセスできる |
コアドメイン以外 からアクセスできる |
---|---|---|---|
LL-NDK | システム | はい | はい |
LL-NDK-Private | システム | はい | はい |
VNDK-SP / VNDK-SP-Private | システム | はい | はい |
VNDK-SP-Ext | ベンダー | はい | はい |
VNDK | システム | はい | はい |
VNDK-Ext | ベンダー | いいえ | はい |
FWK-ONLY | システム | はい | いいえ |
FWK-ONLY-RS | システム | はい | いいえ |
SP-HAL | ベンダー | はい | はい |
SP-HAL-Dep | ベンダー | はい | はい |
VND-ONLY | ベンダー | いいえ | はい |
LL-NDK-Private と VNDK-SP-Private は、non-coredomain
によって間接的にアクセスされるので、どちらのドメインからもアクセス可能でなければなりません。同様に、SP-HAL-Dep は、SP-HAL がこれに依存しているので、coredomain
からアクセス可能でなければなりません。
same_process_hal_file ラベル
ベンダー パーティションには次のライブラリが存在します。これらのライブラリは、coredomain
と non-coredomain
の両方からアクセス可能にする必要があります。
/vendor/lib[64]/vndk-sp
の VNDK-SP-Ext/vendor/lib[64]
または/vendor/lib[64]/hw
の SP-HAL/vendor/lib[64]
または/vendor/lib[64]/hw
の SP-HAL-Dep
デフォルトでは、vendor
パーティションにあるものはすべて coredomain
からアクセスできないので、これらのファイルには明示的に same_process_hal_file
ラベルを付けてください。そのためには、ベンダー固有の file_contexts
ファイルに次の行を追加します。
/vendor/lib(64)?/hw/libMySpHal\.so u:object_r:same_process_hal_file:s0 /vendor/lib(64)?/vndk-sp/libBase\.so u:object_r:same_process_hal_file:s0 /vendor/lib(64)?/libBaseInternal\.so u:object_r:same_process_hal_file:s0