Google is committed to advancing racial equity for Black communities. See how.
本頁面由 Cloud Translation API 翻譯而成。
Switch to English

目錄,規則和分隔

本頁介紹了運行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域將間接訪問它們。同樣,由於SP-HAL依賴SP-HAL-Dep,因此必須可以從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

將這些文件明確標記為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