В выпуске фреймворка Android есть несколько матриц совместимости фреймворка (FCM), по одной для каждой обновляемой целевой версии FCM, которые определяют, что фреймворк может использовать, и требования к целевой версии 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
(префикс root, например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_matrices/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 | Android 13/T |
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
в качестве основного обновления HAL 1.0 добавлена версия foo@2.0
, которая объявляется устаревшей. Более старая версия, 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 принимается разработчиками (например, для версий 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
представлен как основное обновление версии HAL 1.0. health@1.0
удален из compatibility_matrix.3.xml
, но присутствует в файлах compatibility_matrix.legacy.xml
, compatibility_matrix.1.xml
и compatibility_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 удаляется из набора S F следующего выпуска фреймворка. Это выполняется двумя следующими шагами:
Удаление
compatibility_matrix.V.xml
из правил сборки (чтобы он не устанавливался в образе системы) и удаление любого кода, который реализовывал удаленные возможности или зависел от них.Удаление фреймворковых HAL с
max-level
ниже или равнымV
из манифеста фреймворка и удаление любого кода, реализующего удаленные фреймворковые HAL.
Устройства с целевой версией FCM за пределами SF для данного выпуска фреймворка не могут обновиться до этого выпуска.
Удаление полностью устаревших HAL
После удаления версии FCM некоторые интерфейсы 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
health@2.0
HAL считался невыпущенным HAL и присутствовал только вcompatibility_matrix.3.xml
. -
teleportation@1.0
HAL не входит ни в одну из выпущенных матриц совместимости и также считается невыпущенным HAL.
Для фреймворковых HAL, если версия HAL присутствует только в манифесте фреймворка несвязанной ветки разработки, она считается невыпущенной.
Выпущено и актуально
Для HAL-файлов устройств, если версия HAL присутствует в любой общедоступной и замороженной матрице совместимости, она считается выпущенной. Например, после того, как версия FCM 3 заморожена и опубликована в AOSP, версия HAL health@2.0
считается выпущенной и актуальной.
Если версия HAL находится в общедоступной и замороженной матрице совместимости с наивысшей версией FCM, то версия HAL является актуальной (т.е. не устаревшей). Например, существующие версии HAL (например, nfc@1.0
, представленные в compatibility_matrix.legacy.xml
), которые продолжают существовать в compatibility_matrix.3.xml
, также считаются выпущенными и актуальными версиями HAL.
Для HAL-файлов фреймворка, если версия HAL указана в манифесте фреймворка последней выпущенной ветки без атрибута max-level
или (что необычно) с max-level
равным или превышающим версию FCM, выпущенную в этой ветке, она считается выпущенной и актуальной версией HAL. Например, HAL displayservice
выпущен и актуален в 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. Например, HAL schedulerservice
выпущен, но устарел в Android 12, как указано в манифесте фреймворка Android 12 .
Удаленный
Для устройств HAL версия HAL удаляется только в том случае, если выполняются следующие условия:
- Ранее он был выпущен.
- Он не находится ни в одной общедоступной и замороженной матрице совместимости, поддерживаемой фреймворком.
Матрицы совместимости, которые являются общедоступными, замороженными, но не поддерживаются фреймворком, хранятся в кодовой базе для определения набора удаленных версий HAL, чтобы можно было написать тесты VTS для гарантии того, что удаленные версии HAL не будут присутствовать на новых устройствах.
Для фреймворков HAL версия HAL удаляется только в том случае, если выполняются следующие условия:
- Ранее он был выпущен.
- Его нет ни в одном манифесте фреймворка последней выпущенной ветки.
Устаревшие FCM
Версия Target FCM 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
.