本页介绍了运行 Android 8.0 及更高版本的设备的目录布局、VNDK 规则以及相关的 sepolicy。
目录布局
“退化目录布局”包含以下目录:
/system/lib[64]
包含所有框架共享库,包括 LL-NDK、VNDK 和仅框架库(包括 LL-NDK-Private 和一些与 VNDK-SP 中的库同名的库)。/system/lib[64]/vndk-sp
包含用于同进程 HAL 的 VNDK-SP 库。/vendor/lib[64]
包含由供应商扩展的 VNDK 库(DXUA 或 DXUX VNDK 库)、同进程 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 库的其他供应商共享库。
- 仅当供应商共享库不是 AOSP 库且其依赖项限制为 LL-NDK 库、Google 定义的 VNDK-SP 库、SP-HAL 库和/或其他 SP-HAL-Dep 库时,才能将其标记为 SP-HAL-Dep 库。
- VNDK-SP 必须是自包含的。
libRS_internal.so
在 Android 8.0 中得到了特殊处理,但在未来的版本中将会重新审视。 - 不允许通过非 HIDL 接口进行框架-供应商通信,包括(但不限于)binder、套接字、共享内存、文件等。
- system 分区的大小必须足够大,以容纳所有符合条件的 VNDK 库的两个副本以及不符合条件的框架共享库的一个副本。
sepolicy
本节中描述的框架进程对应于 sepolicy 中的 coredomain
,而供应商进程对应于 non-coredomain
。例如,/dev/binder
只能在 coredomain
中访问,而 /dev/vndbinder
只能在非 coredomain
中访问。
类似的策略限制了对 system 和 vendor 分区上共享库的访问。下表显示了访问不同类别共享库的权限。
类别 | 分区 | 可从以下位置访问 coredomain |
可从以下位置访问 non-coredomain |
---|---|---|---|
LL-NDK | System | Y | Y |
LL-NDK-Private | System | Y | Y |
VNDK-SP/VNDK-SP-Private | System | Y | Y |
VNDK-SP-Ext | Vendor | Y | Y |
VNDK | System | Y | Y |
VNDK-Ext | Vendor | N | Y |
FWK-ONLY | System | Y | N |
FWK-ONLY-RS | System | Y | N |
SP-HAL | Vendor | Y | Y |
SP-HAL-Dep | Vendor | Y | Y |
VND-ONLY | Vendor | N | Y |
LL-NDK-Private 和 VNDK-SP-Private 必须可以从两个域访问,因为非coredomain
将间接访问它们。同样,SP-HAL-Dep 必须可以从 coredomain
访问,因为 SP-HAL 依赖于它。
same_process_hal_file 标签
以下库存在于 vendor 分区中。使这些库可以从 coredomain
和非 coredomain
访问。
- VNDK-SP-Ext,位于
/vendor/lib[64]/vndk-sp
中 - SP-HAL,位于
/vendor/lib[64]
或/vendor/lib[64]/hw
中 - SP-HAL-Dep,位于
/vendor/lib[64]
或/vendor/lib[64]/hw
中
显式地将这些文件标记为 same_process_hal_file
,因为默认情况下 vendor
分区中的任何内容都无法被 coredomain
访问。将类似于以下内容的行添加到特定于供应商的 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