В выпуске платформы Android имеется несколько матриц совместимости платформы (FCM), по одной для каждой обновляемой целевой версии FCM, которые определяют, что может использовать платформа, и требования к целевой версии FCM. В рамках жизненного цикла FCM Android объявляет устаревшими и удаляет HAL HIDL, а затем изменяет файлы FCM, чтобы они отражали статус версии HAL .
Чтобы включить OTA только для платформы в своих собственных экосистемах, партнеры, которые расширяют интерфейсы поставщиков, также должны отказаться от поддержки и удалить HIDL HAL, используя те же методы.
Терминология
- Матрица совместимости фреймворков (FCM)
- XML-файл, в котором указаны требования к платформе для соответствующих реализаций поставщика. Матрица совместимости имеет версии, и новая версия замораживается для каждого выпуска платформы. Каждый выпуск платформы содержит несколько FCM.
- Версии платформы FCM (S F )
- Набор всех версий FCM в выпуске платформы. Платформа может работать с реализацией любого поставщика, которая удовлетворяет одному из этих FCM.
- Версия FCM (F)
- Самая высокая версия среди всех FCM в выпуске платформы.
- Целевая версия FCM (V)
- Целевая версия FCM (из SF ), явно объявленная в манифесте устройства, которой соответствует реализация поставщика. Реализация поставщика должна быть создана на основе опубликованного FCM, хотя она может объявлять более новые версии HAL в своем манифесте устройства.
- HAL-версия
- Версия HAL имеет формат
foo@xy
, гдеfoo
— это имя HAL, аxy
— конкретная версия; например,nfc@1.0
,keymaster@3.0
(корневой префикс, напримерandroid.hardware
, в этом документе опущен). - Манифест устройства
- XML-файлы, которые определяют, какие версии HAL предоставляет сторона устройства интерфейса поставщика, включая изображения поставщика и ODM. Содержимое манифеста устройства ограничено целевой версией устройства FCM, но может содержать список HAL, которые являются строго более новыми по отношению к FC, соответствующему V.
- HAL устройства
- HAL, которые перечислены (предоставлены) в манифесте устройства и перечислены (обязательные или необязательные) в матрице совместимости платформы (FCM).
- Матрица совместимости устройств (DCM)
- XML-файл, в котором указаны требования поставщика к соответствующим реализациям платформы. Каждое устройство содержит один DCM.
- Рамочный манифест
- XML-файл, указывающий, какие версии HAL предоставляет сторона интерфейса поставщика, включая system, system_ext и образы продуктов. HAL в манифесте платформы динамически отключаются в соответствии с целевой версией FCM устройства.
- Платформа HAL
- HAL, которые указаны в манифесте платформы и указаны как обязательные или необязательные в матрице совместимости устройств (DCM).
Жизненный цикл FCM в базе кода
В этом документе абстрактно описан жизненный цикл FCM. Чтобы просмотреть поддерживаемые манифесты, обратитесь к hardware/interfaces/compatibility_matrix.<FCM>.xml
, где FCM можно найти в system/libvintf/include/vintf/Level.h
.
Ожидается, что устройство, поставляющее соответствующую версию Android, будет иметь значение FCM, большее или равное эквивалентному уровню. Например, устройство, поставляемое с Android 11, обычно имеет уровень FCM 5, но реализует уровень FCM 6 или выше, что сопровождается различными дополнительными требованиями, указанными в матрицах совместимости. Поддерживаемые уровни:
ФКМ | Версия Android |
---|---|
4 | Андроид 10/Q |
5 | Андроид 11/Р |
6 | Андроид 12/С |
7 | Андроид 13/Т |
8 | Андроид 14/U |
202404 | Андроид 15/В |
Уровень FCM равен уровню API поставщика или новее.
Когда Android прекращает поддержку уровня FCM, он по-прежнему поддерживается для существующих устройств. Устройствам, ориентированным на более низкие уровни FCM, неявно разрешено использовать HAL, перечисленные в более новых уровнях FCM, если они доступны в ветке.
Разработка в новой версии FCM
Android увеличивает версию FCM для каждой версии платформы (например, Android 8 и 8.1). Во время разработки создается новый файл compatibility_matrix.F.xml
, а существующий compatibility_matrix.f.xml
(где f
< F
) больше не изменяется.
Чтобы начать разработку в новой версии FCM F
:
- Скопируйте последнюю версию
compatibility_matrix.<F-1>.xml
вcompatibility_matrix.F.xml
. - Обновите атрибут
level
в файле доF
- Добавьте соответствующие правила сборки, чтобы установить эту матрицу совместимости на устройство.
Представляем новый HAL
Во время разработки при внедрении нового HAL (Wi-Fi, NFC и т. д.) в Android в текущей версии FCM F
добавьте HAL в compatibility_matrix.F.xml
со следующими optional
настройками:
-
optional="false"
, если устройства, поставляемые сV = F
должны запускаться с этим HAL, -
optional="true"
, если устройства, поставляемые сV = F
могут запускаться без этого HAL.
Например, в Android 8.1 cas@1.0
представлен в качестве дополнительного HAL. Устройствам, запускаемым с Android 8.1, не требуется реализация этого HAL, поэтому в compatibility_matrix.F.xml
(который во время разработки этой версии временно назывался compatibility_matrix.current.xml
) была добавлена следующая запись:
<hal format="hidl" optional="true">
<name>android.hardware.cas</name>
<version>1.0</version>
<interface>
<name>IMediaCasService</name>
<instance>default</instance>
</interface>
</hal>
Обновление HAL (второстепенное)
Во время разработки, когда HAL имеет второстепенную версию обновления с xz
до x.(z+1)
текущей версии FCM F
, если эта версия:
- Требуется на устройствах, запускаемых с
V = F
,compatibility_matrix.F.xml
должно быть указаноx.(z+1)
иoptional="false"
. - Не требуется на устройствах, запускаемых с
V = F
,compatibility_matrix.F.xml
должна скопироватьxy-z
и опциональность изcompatibility_matrix.<F-1>.xml
и изменить версию наxw-(z+1)
(гдеw >= y
).
Например, в Android 8.1 broadcastradio@1.1
появился как небольшое обновление версии 1.0 HAL. Старая версия, broadcastradio@1.0
, является необязательной для устройств, запускаемых с Android 8.0, а более новая версия, broadcastradio@1.1
, является необязательной для устройств, запускаемых с Android 8.1. В compatibility_matrix.1.xml
:
<hal format="hidl" optional="true">
<name>android.hardware.broadcastradio</name>
<version>1.0</version>
<interface>
<name>IBroadcastRadioFactory</name>
<instance>default</instance>
</interface>
</hal>
Эта запись была скопирована в файл compatibility_matrix.F.xml
и изменена следующим образом:
<hal format="hidl" optional="true">
<name>android.hardware.broadcastradio</name>
<version>1.0-1</version>
<interface>
<name>IBroadcastRadioFactory</name>
<instance>default</instance>
</interface>
</hal>
Обновление HAL (основное)
Во время разработки, когда HAL имеет обновление основной версии до текущей версии FCM F
, новая основная версия x.0
добавляется в compatibility_matrix.F.xml
со следующими optional
настройками:
-
optional="false"
только с версиейx.0
, если устройства, поставляемые сV = F
должны запускаться сx.0
. -
optional="false"
, но вместе со старыми основными версиями в том же теге<hal>
, если устройства, поставляемые сV = F
, должны запускаться с этим HAL, но могут запускаться с более старой основной версией. -
optional="true"
, если устройства, поставляемые сV = F
не должны запускать HAL.
Например, в Android 9 health@2.0
представлен как обновление основной версии HAL 1.0 и прекращена поддержка HAL 1.0. Старая версия health@1.0
является необязательной для устройств, запускаемых под управлением Android 8.0 и Android 8.1. Устройства, работающие под управлением Android 9, должны иметь новую версию 2.0. Например, предположим, compatibility_matrix.legacy.xml
, compatibility_matrix.1.xml
и compatibility_matrix.2.xml
содержат следующую запись:
<hal format="hidl" optional="true">
<name>android.hardware.health</name>
<version>1.0</version>;
<interface>
<name>IHealth</name>
<instance>default</instance>
</interface>
</hal>
Скопируйте эту запись в compatibility_matrix.F.xml
и измените следующим образом:
<hal format="hidl" optional="false">
<name>android.hardware.health</name>
<version>2.0</version>
<interface>
<name>IHealth</name>
<instance>default</instance>
</interface>
</hal>
Ограничения:
- Поскольку HAL 2.0 указан в
compatibility_matrix.3.xml
сoptional="false"
, устройства, запускаемые с Android 9, должны поставляться с HAL 2.0.` - Поскольку HAL 1.0 отсутствует в
compatibility_matrix.3.xml
, устройства, запускаемые с Android 9, не должны предоставлять HAL 1.0 (поскольку этот HAL считается устаревшим). - Поскольку HAL 1.0 присутствует в
legacy/1/2.xml
(более старые версии FCM, с которыми может работать Android 9) в качестве дополнительного HAL, платформа Android 9 по-прежнему может работать с HAL 1.0 (который не считается удаленной версией HAL). ).
Новые версии FCM
Процесс выпуска версии FCM в системном разделе выполняется исключительно Google как часть выпуска AOSP и включает следующие шаги:
- Убедитесь, что
compatibility_matrix.F.xml
имеет атрибутlevel="F"
. - Убедитесь, что все устройства собраны и загрузились.
- Обновите тесты VTS , чтобы гарантировать, что устройства, запускаемые с последней платформой (на основе уровня API доставки), имеют целевую версию FCM
V >= F
. - Опубликовать файл в AOSP.
Например, тесты VTS гарантируют, что устройства, запускаемые с Android 9, имеют целевую версию FCM >= 3.
Кроме того, FCM продукта и system_ext также могут перечислять требования для версий FCM каждой платформы. Выпуск версий FCM на разделах product и system_ext осуществляет владелец этих образов соответственно. Номера версий FCM в разделах продукта и system_ext должны совпадать с номерами версий в системном разделе. Подобно версиям FCM в системном разделе, матрица совместимости FCM версии F в разделах product и system_ext отражает требования к устройству с целевой версией FCM F.
Устаревшая версия HAL
Отказ от версии HAL является решением разработчика (т. е. для версий AOSP решение принимает Google). Это может произойти при выпуске более высокой версии HAL (младшей или основной).
Устареть HAL устройства
Когда данное устройство HAL foo@xy
устарело в FCM версии F
, это означает, что любое устройство, запускаемое с целевой версией FCM V = F
или более поздней версии, не должно реализовывать foo
в версии xy
или любой версии старше xy
. Устаревшая версия HAL по-прежнему поддерживается платформой обновления устройств.
При выпуске FCM версии F
версия HAL foo@xy
считается устаревшей, если конкретная версия HAL не указана явно в последнем FCM для целевой версии FCM V = F
. Для устройств, запускающихся с V = F
, справедливо одно из следующих условий:
- Для платформы требуется более высокая версия (основная или дополнительная);
- Фреймворк больше не требует HAL.
Например, в Android 9 health@2.0
представлен как основное обновление версии 1.0 HAL. health@1.0
удален из compatibility_matrix.3.xml
но присутствует в compatibility_matrix.legacy.xml
, compatibility_matrix.1.xml
и совместимости_matrix.2.xml . Следовательно, health@1.0
считается устаревшим.
Устареть фреймворком HAL
Когда данная платформа HAL foo@xy
устарела в FCM версии F
, это означает, что любое устройство, запускаемое с целевой версией FCM V = F
или более поздней версии, не должно ожидать, что платформа предоставит foo
версии xy
или любой версии старше xy
. Устаревшая версия HAL по-прежнему предоставляется платформой для обновления устройств.
Когда выпускается версия FCM F
, версия HAL foo@xy
считается устаревшей, если в манифесте платформы указано max-level=" F - 1 "
для foo@xy
. Для устройств, запускаемых с V = F
, платформа не предоставляет HAL foo@xy
. Матрица совместимости устройств на устройствах, запускаемых с V = F
не должна содержать HAL платформы с max-level < V
.
Например, в Android 12 schedulerservice@1.0
устарел. Для его атрибута max-level
установлено значение 5
— версия FCM, представленная в Android 11. См. манифест платформы Android 12 .
Удаление поддержки целевых версий FCM.
Когда активные устройства определенной целевой версии FCM V
падают ниже определенного порога, целевая версия FCM удаляется из набора SF следующего выпуска платформы. Это делается с помощью обоих следующих шагов:
Удаление
compatibility_matrix.V.xml
из правил сборки (чтобы он не устанавливался в образе системы) и удаление любого кода, который реализовал удаленные возможности или зависел от них.Удаление HAL платформы с
max-level
ниже или равнымV
из манифеста платформы и удаление любого кода, реализующего удаленные HAL платформы.
Устройства с целевой версией FCM за пределами SF для данного выпуска платформы не могут обновиться до этого выпуска.
Статус версии HAL
В следующих разделах описываются (в хронологическом порядке) возможные состояния версии HAL.
Неизданный
Для HAL устройств, если версия HAL отсутствует ни в одной из общедоступных и замороженных матриц совместимости, она считается невыпущенной и, возможно, находится в разработке. Сюда входят версии HAL, которые есть только в compatibility_matrix.F.xml
. Примеры:
- Во время разработки Android 9 HAL
health@2.0
считался невыпущенным HAL и присутствовал только вcompatibility_matrix.3.xml
. - HAL
teleportation@1.0
отсутствует ни в одной из выпущенных матриц совместимости, а также считается невыпущенным HAL.
Для HAL платформы, если версия HAL присутствует только в манифесте платформы несвязанной ветки разработки, она считается невыпущенной.
Выпущено и актуально
Для HAL устройств, если версия HAL находится в какой-либо общедоступной и замороженной матрице совместимости, она выпускается. Например, после того, как FCM версии 3 заморожен и опубликован в AOSP, HAL health@2.0
считается выпущенной и текущей версией HAL.
Если версия HAL находится в общедоступной и замороженной матрице совместимости с самой высокой версией FCM, версия HAL является текущей (т. е. не устарела). Например, существующие версии HAL (например, nfc@1.0
, представленные в compatibility_matrix.legacy.xml
), которые продолжают существовать в compatibility_matrix.3.xml
также считаются выпущенными и текущими версиями HAL.
Для HAL платформы, если версия HAL находится в манифесте платформы последней выпущенной ветки без атрибута max-level
или (что необычно) с max-level
равным или выше версии FCM, выпущенной в этой ветке, она считается выпущенной. и текущая версия HAL. Например, displayservice
HAL выпущен и актуален в Android 12, как указано в манифесте платформы Android 12 .
Выпущен, но устарел
Для HAL устройств версия HAL считается устаревшей тогда и только тогда, когда выполняются все следующие условия:
- Он выпущен.
- В общедоступной и замороженной матрице совместимости нет самой высокой версии FCM.
- Фреймворк все еще поддерживает общедоступную и замороженную матрицу совместимости.
Примеры:
- HAL
health@1.0
находится вcompatibility_matrix.legacy.xml
,compatibility_matrix.1.xml
иcompatibility_matrix.2.xml
, но не вcompatibility_matrix.3.xml
. Следовательно, он считается устаревшим в Android 9. - Power HAL имеет незначительное обновление версии в Android 9, но
power@1.0
все еще находится вcompatibility_matrix.3.xml
. -
power@1.0
compatibility_matrix.legacy.xml
,compatibility_matrix.1.xml
иcompatibility_matrix.2.xml
. -
compatibility_matrix.3.xml
имеетpower@1.0-1
.
Следовательно, power@1.0
является текущим, но НЕ устаревшим в Android 9.
Для HAL платформы, если версия HAL находится в манифесте платформы последней выпущенной ветки с атрибутом max-level
ниже, чем версия версии FCM в этой ветке, она считается выпущенной, но устаревшей версией HAL. Например, schedulerservice
HAL выпущена, но устарела в Android 12, как указано в манифесте платформы Android 12 .
Удаленный
Для HAL устройств версия HAL удаляется тогда и только тогда, когда выполняются следующие условия:
- Ранее оно было выпущено.
- Платформа не поддерживает ни одну общедоступную и замороженную матрицу совместимости.
Матрицы совместимости, которые являются общедоступными, замороженными, но не поддерживаются платформой, хранятся в базе кода для определения набора удаленных версий HAL, чтобы можно было написать тесты VTS, чтобы гарантировать, что удаленные HAL не находятся на новых устройствах.
Для HAL платформы версия HAL удаляется тогда и только тогда, когда выполняются следующие условия:
- Ранее оно было выпущено.
- Его нет ни в одном манифесте фреймворка последней выпущенной ветки.
Устаревшие FCM
Устаревшая целевая версия FCM представляет собой особую ценность для всех устройств, отличных от Treble. Устаревший FCM, compatibility_matrix.legacy.xml
, перечисляет требования платформы для устаревших устройств (т. е. устройств, выпущенных до Android 8.0).
Если этот файл существует для FCM с версией F
, любое устройство, отличное от Treble, можно обновить до F
при условии, что его манифест устройства совместим с этим файлом. Его удаление выполняется по той же процедуре, что и FCM для других целевых версий FCM (удаляется после того, как количество активных устройств до 8.0 падает ниже определенного порога).
Выпущенные версии FCM
Список выпущенных версий FCM можно найти в разделе hardware/interfaces/compatibility_matrices
.
Чтобы найти версию FCM, выпущенную для конкретной версии Android, см. Level.h
.