Выпуск Android framework имеет несколько матриц совместимости Framework (FCM), по одной для каждой обновляемой версии Target FCM, которые определяют, что может использовать framework и требования к версии Target FCM. В рамках жизненного цикла FCM Android прекращает поддержку и удаляет HIDL HAL, а затем изменяет файлы FCM, чтобы отразить статус версии HAL .
Чтобы включить OTA, работающие только на основе фреймворка, в своих собственных экосистемах, партнеры, расширяющие интерфейсы поставщиков, также должны прекратить поддержку и удалить HIDL HAL, используя те же методы.
Терминология
- Матрица совместимости фреймворков (FCM)
- Файл XML, который определяет требования к фреймворку для соответствующих реализаций поставщиков. Матрица совместимости версионируется, и новая версия замораживается для каждого выпуска фреймворка. Каждый выпуск фреймворка содержит несколько FCM.
- Версии платформы FCM (S F )
- Набор всех версий FCM в выпуске фреймворка. Фреймворк может работать с любой реализацией поставщика, которая удовлетворяет одному из этих FCM.
- Версия FCM (F)
- Самая высокая версия среди всех FCM в выпуске фреймворка.
- Целевая версия FCM (V)
- Целевая версия FCM (из S F ), явно объявленная в манифесте устройства, которой удовлетворяет реализация поставщика. Реализация поставщика должна быть сгенерирована на основе опубликованного FCM, хотя она может объявлять более новые версии HAL в своем манифесте устройства.
- HAL-версия
- Версия HAL имеет формат
foo@xy
, гдеfoo
— это имя HAL, аxy
— это конкретная версия; напримерnfc@1.0
,keymaster@3.0
(корневой префикс, напримерandroid.hardware
, в этом документе опускается). - Манифест устройства
- Файлы XML, которые определяют, какие версии HAL предоставляет сторона устройства интерфейса поставщика, включая образы поставщика и ODM. Содержимое манифеста устройства ограничено версией Target FCM устройства, но может содержать список HAL, которые строго новее относительно FC, соответствующего V.
- Устройства HAL
- HAL, которые перечислены (предоставлены) в манифесте устройства и перечислены в матрице совместимости фреймворка (FCM).
- Матрица совместимости устройств (DCM)
- XML-файл, который определяет требования поставщика к соответствующим реализациям фреймворка. Каждое устройство содержит один DCM.
- Манифест фреймворка
- Файл XML, в котором указано, какие версии HAL предоставляет сторона фреймворка интерфейса поставщика, включая system, system_ext и образы продукта. HAL в манифесте фреймворка динамически отключаются в соответствии с версией Target 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 15:
ФКМ | Версия Android |
---|---|
5 | Android 11/R |
6 | Android 12/S |
7 | Андроид 13/Т |
8 | Android 14/U |
202404 | Android 15/V |
Уровень 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
.
Например, Android 8.1 представил cas@1.0
. Устройства, запускаемые с Android 8.1, могут реализовать этот HAL, поэтому следующая запись была добавлена в файл compatibility_matrix.F.xml
(который раньше временно назывался файлом compatibility_matrix.current.xml
во время разработки этого релиза):
<hal format="hidl">
<name>android.hardware.cas</name>
<version>1.0</version>
<interface>
<name>IMediaCasService</name>
<instance>default</instance>
</interface>
</hal>
Обновление HAL (незначительное)
Версии AIDL HAL считаются второстепенными версиями HAL. Версии интерфейса HIDL имеют major . minor
версии, например 1.2
.
Во время разработки, когда версия AIDL HAL обновляется с 2
до 3
в текущей версии FCM F
, новая версия добавляется в запись HAL в compatibility_matrix.F.xml
. Поле версии записи HAL принимает диапазоны вроде 2-3
.
Например, Android FCM F
представил foo@3
как обновление младшей версии HAL. Старая версия, foo@2
, используется для устройств, ориентированных на старые FCM, в то время как более новая версия, foo@3
, может использоваться для устройств, ориентированных на Android FCM F
. Запись в старых FCM до версии 2
выглядит так:
<hal format="aidl">
<name>foo</name>
<version>2</version>
<interface>
<name>IFoo</name>
<instance>default</instance>
</interface>
</hal>
Эта запись была скопирована в файл compatibility_matrix.F.xml
и изменена для поддержки версии 3
следующим образом:
<hal format="aidl">
<name>foo</name>
<version>2-3</version>
<interface>
<name>IFoo</name>
<instance>default</instance>
</interface>
</hal>
Модернизация HAL (основная)
В процессе разработки, когда HAL обновляется до основной версии FCM F
, новая основная версия x.0
добавляется в файл compatibility_matrix.F.xml
со следующими настройками:
- Только версия
x.0
, если устройства, поставляемые сV = F
должны запускаться сx.0
. - При наличии более старых основных версий в том же теге
<hal>
, если устройства, поставляемые сV = F
могут запускаться со старой основной версией.
Например, FCM версии F
представляет foo@2.0
как обновление основной версии 1.0 HAL и делает устаревшим 1.0 HAL. Более старая версия, foo@1.0
, используется для устройств, ориентированных на предыдущие версии FCM. Устройства, ориентированные на FCM версии F
должны предоставлять новую версию 2.0, если они предоставляют HAL. В этом примере предыдущие версии FCM содержат следующую запись:
<hal format="hidl">
<name>foo</name>
<version>1.0</version>;
<interface>
<name>IFoo</name>
<instance>default</instance>
</interface>
</hal>
Скопируйте эту запись в файл compatibility_matrix.F.xml
и измените ее следующим образом:
<hal format="hidl">
<name>foo</name>
<version>2.0</version>
<interface>
<name>IFoo</name>
<instance>default</instance>
</interface>
</hal>
Ограничения:
- Поскольку HAL 1.0 отсутствует в
compatibility_matrix.F.xml
, устройства, предназначенные для FCM версииF
не должны предоставлять HAL 1.0 (поскольку этот HAL считается устаревшим). - Поскольку 1.0 HAL присутствует в более старых версиях FCM, фреймворк по-прежнему может работать с 1.0 HAL, поэтому он обратно совместим со старыми устройствами, ориентированными на более старые версии FCM.
Новые версии 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 на разделах продукта и system_ext осуществляется владельцем этих образов соответственно. Номера версий FCM на разделах продукта и system_ext должны совпадать с номерами на системном разделе. Подобно версиям FCM на системном разделе, матрица совместимости в версии FCM F в разделах продукта и system_ext отражает требования к устройству с целевой версией FCM F.
Устаревание версии HAL
Устаревание версии HAL — это решение разработчика (т. е. для AOSP HAL решение принимает Google). Это может произойти при выпуске более высокой версии HAL (независимо от того, является ли она младшей или старшей).
Отменить поддержку HAL устройства
Когда данное устройство HAL foo@xy
устарело в FCM Version F
, это означает, что любое устройство, запускаемое с Target FCM Version 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
и compatible_matrix.2.xml . Следовательно, health@1.0
считается устаревшим.
Отменить поддержку фреймворка HAL
Когда данный фреймворк HAL foo@xy
устарел в FCM Version F
, это означает, что любое устройство, запускаемое с Target FCM Version 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
Когда активные устройства определенной версии Target FCM V
падают ниже определенного порога, версия Target FCM удаляется из набора S F следующего выпуска фреймворка. Это делается с помощью двух следующих шагов:
Удаление файла
compatibility_matrix.V.xml
из правил сборки (чтобы он не устанавливался в образе системы) и удаление любого кода, который реализовывал удаленные возможности или зависел от них.Удаление HAL-уровней фреймворка с
max-level
ниже или равнымV
из манифеста фреймворка и удаление любого кода, реализующего удаленные HAL-уровней фреймворка.
Устройства с целевой версией FCM за пределами S F для данного выпуска фреймворка не могут обновиться до этого выпуска.
Удаление полностью устаревших HAL
При удалении версии FCM некоторые интерфейсы HAL или версии интерфейсов HAL больше не присутствуют ни в одном FCM. Это означает, что Android больше не поддерживает их вообще, даже для обновления устройств.
После того, как поддержка HAL прекращается, разработчики удаляют ссылки на этот интерфейс HAL из Android, в том числе в клиентском коде фреймворка, реализации по умолчанию и тестовых случаях VTS.
Если поддерживаемых HAL, наследуемых от удаляемого HAL, нет, то само определение HAL можно удалить, выполнив несколько дополнительных шагов.
- Удалить определение интерфейса HAL из исходного кода. Это включает файлы
*.aidl
и модульAndroid.bp
aidl_interface
. - Если HIDL, удалите HASH из
hardware/interfaces/current.txt
. - Если AIDL, удалите каталог
aidl_api
с замороженными файлами AIDL. - Удалите интерфейс из
hardware/interfaces/compatibility_matrices/exclude/fcm_exclude.cpp
.
Статус версии HAL
В следующих разделах описываются (в хронологическом порядке) возможные состояния версии HAL.
Неизданный
Для устройств HAL, если версия HAL не находится ни в одной из общедоступных и замороженных матриц совместимости, она считается невыпущенной и, возможно, в разработке. Это включает версии HAL, которые находятся только в compatibility_matrix.F.xml
. Примеры:
- Во время разработки Android 9 HAL
health@2.0
считался невыпущенным HAL и присутствовал только вcompatibility_matrix.3.xml
. -
teleportation@1.0
HAL не входит ни в одну из выпущенных матриц совместимости и также считается невыпущенным HAL.
Для фреймворковых HAL, если версия HAL присутствует только в манифесте фреймворка несвязанной ветки разработки, она считается невыпущенной.
Выпущено и актуально
Для устройств HAL, если версия HAL находится в любой публичной и замороженной матрице совместимости, она выпускается. Например, после того, как версия FCM 3 заморожена и опубликована в AOSP, health@2.0
HAL считается выведенной и текущей версией 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.
- Это общедоступная и замороженная матрица совместимости, которую фреймворк все еще поддерживает.
Примеры:
-
health@1.0
HAL есть в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
Target FCM Version legacy — это особое значение для всех устройств, отличных от Treble. Legacy FCM, compatibility_matrix.legacy.xml
, перечисляет требования фреймворка на устаревших устройствах (т. е. устройствах, выпущенных до Android 8.0).
Если этот файл существует для FCM с версией F
, любое устройство, отличное от Treble, может быть обновлено до F
при условии, что его манифест устройства совместим с этим файлом. Его удаление следует той же процедуре, что и FCM для других версий Target FCM (удаляется после того, как количество активных устройств до 8.0 падает ниже определенного порога).
Выпущенные версии FCM
Список выпущенных версий FCM можно найти в разделе hardware/interfaces/compatibility_matrices
.
Чтобы найти версию FCM, выпущенную с определенным выпуском Android, см Level.h
.