ディレクトリ、ルール、sepolicy

このページでは、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/bindercoredomain でのみアクセスでき、/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