На этой странице описывается макет каталога для устройств под управлением Android 8.0 и выше, правила VNDK и связанная с ними политика безопасности.
Макет каталога
Вырожденная структура каталогов состоит из следующих каталогов:
/system/lib[64]содержит все общие библиотеки фреймворка, включая LL-NDK, VNDK и библиотеки, предназначенные только для фреймворка (в том числе LL-NDK-Private и некоторые библиотеки с теми же названиями, что и в VNDK-SP)./system/lib[64]/vndk-spсодержит библиотеки VNDK-SP для HAL, работающих в том же процессе./vendor/lib[64]содержит библиотеки VNDK, расширенные поставщиком (библиотеки VNDK DXUA или DXUX), реализации HAL в том же процессе и другие общие библиотеки поставщика./vendor/lib[64]/vndk-spможет содержать библиотеки VNDK-SP, расширенные поставщиком.
Модули поставщика загружают библиотеки VNDK из /system/lib[64].
Правила VNDK
В этом разделе приведен полный список правил VNDK:
- Процессы фреймворка не должны загружать общие библиотеки, не относящиеся к SP-HAL, из разделов поставщика (строгое требование, начиная с Android 8.1).
- Процессы поставщика не должны загружать библиотеки, не относящиеся к LL-NDK, VNDK-SP и VNDK, из системного раздела. (в Android O это требование не является обязательным, но будет введено в будущих версиях).
- Установленные библиотеки VNDK должны быть подмножеством допустимых библиотек VNDK, определенных Google.
- Внешние зависимости SP-HAL и SP-HAL-Dep должны быть ограничены библиотеками LL-NDK или VNDK-SP, определенными Google.
- Зависимости общей библиотеки SP-HAL должны быть ограничены библиотеками LL-NDK, библиотеками VNDK-SP, определенными Google, другими библиотеками SP-HAL и/или другими общими библиотеками поставщиков, которые могут быть помечены как библиотеки SP-HAL-Dep.
- Общая библиотека поставщика может быть помечена как библиотека SP-HAL-Dep, только если она не является библиотекой AOSP и ее зависимости ограничены библиотеками LL-NDK, библиотеками VNDK-SP, определенными Google, библиотеками SP-HAL и/или другими библиотеками SP-HAL-Dep.
- VNDK-SP должен быть автономным.
libRS_internal.soполучает особый статус в Android 8.0, но в будущем мы пересмотрим этот подход. - Обмен данными между фреймворком и поставщиком должен осуществляться только через интерфейсы HIDL, а не через binder, сокеты, общую память, файлы и т. д.
- Размер системного раздела должен быть достаточно большим, чтобы вместить две копии всех подходящих библиотек VNDK и копию неприемлемых общих библиотек фреймворка.
sepolicy
Процессы фреймворка, описанные в этом разделе, соответствуют coredomain в sepolicies, а процессы поставщика – non-coredomain. Например, /dev/binder доступен
только в coredomain, а /dev/vndbinder –
только в других coredomain странах.
Аналогичные правила ограничивают доступ к общим библиотекам в разделах system и vendor. В таблице ниже показаны права доступа к общим библиотекам разных категорий:
| Категория | Раздел | Доступно из 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 | Поставщик | НЕТ | Г |
LL-NDK-Private и VNDK-SP-Private должны быть доступны из обоих доменов, поскольку не относящиеся к coredomain компоненты будут обращаться к ним косвенно. Аналогичным образом SP-HAL-Dep должен быть доступен из coredomain, поскольку SP-HAL зависит от него.
Ярлык same_process_hal_file
В разделе поставщика находятся следующие библиотеки: Сделайте эти библиотеки доступными как из
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