本頁介紹了運行Android 8.0及更高版本的設備,VNDK規則以及相關的分隔符的目錄佈局。
目錄佈局
退化的目錄佈局由以下目錄組成:
-
/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接口的通信,包括(但不限於)活頁夾,套接字,共享內存,文件等。
- 系統分區的大小必須足夠大,以包含所有合格的VNDK庫的兩個副本和不合格的框架共享庫的副本。
隔olic
本節中描述的框架流程對應於coredomain
中的coredomain,而供應商流程對應於non-coredomain
。例如, /dev/binder
可以訪問僅在coredomain
和/dev/vndbinder
只能在非訪問coredomain
。
類似的策略限制了對系統分區和供應商分區上共享庫的訪問。下表顯示了訪問不同類別的共享庫的權限:
類別 | 劃分 | 可從訪問 核心域 | 可從訪問 非核心網域 |
---|---|---|---|
LL-NDK | 系統 | ÿ | ÿ |
LL-NDK-私人 | 系統 | ÿ | ÿ |
VNDK-SP / VNDK-SP-私有 | 系統 | ÿ | ÿ |
VNDK-SP-Ext | 供應商 | ÿ | ÿ |
越南盾 | 系統 | ÿ | ÿ |
越南盾 | 供應商 | ñ | ÿ |
僅FWK | 系統 | ÿ | ñ |
FWK-ONLY-RS | 系統 | ÿ | ñ |
SP-HAL | 供應商 | ÿ | ÿ |
SP-HAL-Dep | 供應商 | ÿ | ÿ |
越南盾 | 供應商 | ñ | ÿ |
LL-NDK-Private和VNDK-SP-Private必須可從兩個域訪問,因為非coredomain
域將間接訪問它們。同樣,必須從coredomain
訪問SP-HAL-Dep,因為SP-HAL依賴於SP-HAL-Dep。
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
將這些文件明確標記為same_process_hal_file
,因為默認情況下coredomain
無法訪問vendor
分區中的任何內容。在供應商特定的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