Уровень API поставщика – это версия интерфейса, поддерживаемая разделом поставщика. Интерфейс является двунаправленным. Он описывает API, который раздел поставщика предоставляет системному разделу (аппаратно-зависимый уровень или интерфейс HAL), а также API, который раздел поставщика запрашивает у системного раздела (низкоуровневый нативный набор средств разработки или интерфейс LLNDK).
Уровень API поставщика также используется для определения требований к ПО поставщика (VSR) – набора функциональных и нефункциональных требований, которым должно соответствовать ПО в разделе поставщика.
Далее на этой странице рассказывается, как системные свойства используются в зависимости от версии Android для определения уровня API поставщика.
Заморозка поставщика
Android позволяет поставщику зафиксировать раздел поставщика на определенной версии VSR. Набор функций, которые Android ожидает от раздела поставщика, определяется уровнем API поставщика, связанным с этим разделом. Во время выполнения поведение ПО в системном разделе корректируется в соответствии с уровнем API поставщика в разделе поставщика. Например, ПО в системном разделе может не использовать новые функции, если они не поддерживаются уровнем API в разделе поставщика.
Блокировка поставщика доступна, только если вы создаете устройство, совместимое с Android.
Как определить уровень API поставщика (Android 14 QPR3 и более поздние версии)
В Android 14 QPR3 и более поздних версиях ОС уровень API поставщика выпускается отдельно, поэтому уровень API SDK и уровень API поставщика не синхронизированы.
Из-за разных расписаний публикаций для Android 14 QPR3 и более поздних версий уровень API поставщика полностью отделен от уровня API SDK. Чтобы подчеркнуть это разделение, уровень API поставщика указывается в формате даты ГГГГММ (год и месяц), а уровень SDK – в виде целого числа.
В Android 14 QPR3 и более поздних версиях есть следующие системные свойства, связанные с уровнем API поставщика:
| Системное свойство | Формат | Описание | Исходные настройки |
|---|---|---|---|
ro.board.api_level |
ГГГГММ | Уровень API поставщика, который поддерживает ПО чипсета. Это свойство задано для всех чипсетов. | Это значение задается системой сборки автоматически. |
ro.board.first_api_level |
ГГГГММ | Уровень API поставщика, с которым было выпущено ПО чипсета. Это свойство зависит только от чипсета и задается поставщиками однокристальных систем, если чипсет подходит для заморозки. После первоначальной настройки это свойство должно считаться окончательным и не подлежать изменению. В редких исключительных случаях обновление может быть разрешено, но это крайне не рекомендуется. | Поставщики SoC задают этот параметр с помощью BOARD_SHIPPING_API_LEVEL. |
ro.product.first_api_level |
Целое число | Уровень API SDK, с которым устройство было изначально запущено. | Это свойство задается производителем и не обновляется, даже после обновления ОС. |
ro.vendor.api_level |
ГГГГММ | Уровень API поставщика, соответствующий ro.product.first_api_level. Мы устанавливаем для ro.vendor.api_level значение ro.board.api_level, если ro.board.api_level меньше уровня API поставщика ro.product.first_api_level, только если чипсет SoC подходит для заморозки поставщика. |
Описаны после этой таблицы. |
ro.board.api_frozen |
Логическое значение | Если уровень API поставщика, который представляет ro.board.api_level, завершен, для этого свойства устанавливается значение true. |
Если это свойство не задано, по умолчанию используется false. |
ro.llndk.api_level |
ГГГГММ | Уровень API поставщика в формате ГГГГММ, который предоставляет текущий LLNDK в системном разделе. LLNDK имеет обратную совместимость, поэтому любой образ поставщика, уровень API которого меньше или равен этому, можно прошить с помощью этого образа системы. | Это свойство задается в системном разделе. |
Свойство ro.vendor.api_level можно получить одним из двух способов:
Если чипсет соответствует требованиям для заморозки поставщиком:
ro.vendor.api_level = min( ro.board.api_level, AVendorSupport_getVendorApiLevelOf(ro.product.first_api_level))Если чипсет не находится в периоде заморозки:
ro.vendor.api_level = AVendorSupport_getVendorApiLevelOf(ro.product.first_api_level)
Метод AVendorSupport_getVendorApiLevelOf() определяет соответствующий уровень API поставщика на основе уровня API SDK. Например, AVendorSupport_getVendorApiLevelOf(35), где 35 – уровень API SDK для основного выпуска Android в 2024 году, возвращает 202404. Это приблизительная дата для Android 14 QPR3, когда был установлен текущий уровень API поставщика.
Как определить уровень API поставщика (Android 13)
Уровень API поставщика соответствует уровню API SDK, который используется для интерфейса приложения и ОС и обновляется раз в год при выпуске новой платформы Android для AOSP.
В Android 13 есть следующие системные свойства, связанные с уровнем API поставщика:
| Свойство системы | Формат | Описание | Исходная настройка |
|---|---|---|---|
ro.board.first_api_level |
Целое число | Уровень API поставщика, с которым впервые было выпущено ПО чипсета. Это функция чипсета, которую не могут изменить ни поставщики SoC, ни производители оригинального оборудования. Это свойство задается только для чипсетов, которые соответствуют требованиям для заморозки поставщика. | Значение устанавливается с помощью параметра BOARD_SHIPPING_API_LEVEL в файле device.mk. |
ro.board.api_level |
Целое число | Уровень API поставщика, который поддерживается ПО чипсета. Это свойство задается только для чипсетов, которые соответствуют требованиям для заморозки поставщиком. | Изначально значение этого свойства задается системой сборки и совпадает со значением ro.board.first_api_level, но его можно изменить, если обновить раздел поставщика. |
ro.product.first_api_level |
Целое число | Уровень API SDK, с которым устройство было изначально запущено. | Это свойство задается производителем и не обновляется даже после обновления ОС. |
ro.vendor.api_level |
Целое число | Аналогично описанию уровня API поставщика в предыдущей таблице. | |
ro.vndk.version |
Целое число | Версия VNDK, на основе которой создан раздел поставщика. | Это свойство задается в разделе поставщика. |
ro.vendor.build.version.sdk |
Целое число | Уровень SDK API дерева исходного кода, в котором был создан раздел поставщика. |