Жизненный цикл FCM

В выпуске платформы Android имеется несколько матриц совместимости платформы (FCM), по одной для каждой обновляемой целевой версии FCM, которые определяют, что может использовать платформа, и требования к целевой версии FCM. В рамках жизненного цикла FCM Android объявляет устаревшими и удаляет HAL HIDL, а затем изменяет файлы FCM, чтобы они отражали статус версии HAL .

Чтобы включить OTA только для платформы в своих собственных экосистемах, партнеры, которые расширяют интерфейсы поставщиков, также должны отказаться от поддержки и удалить HIDL HAL, используя те же методы.

Терминология

Матрица совместимости фреймворков (FCM)
XML-файл, в котором указаны требования к платформе для соответствующих реализаций поставщика. Матрица совместимости имеет версии, и новая версия замораживается для каждого выпуска платформы. Каждый выпуск платформы содержит несколько FCM.
Platform FCM Versions (S F )
Набор всех версий FCM в выпуске платформы. Платформа может работать с реализацией любого поставщика, которая удовлетворяет одному из этих FCM.
Версия FCM (F)
Самая высокая версия среди всех FCM в выпуске платформы.
Целевая версия FCM (V)
Целевая версия FCM (из SF ), явно объявленная в манифесте устройства, которой соответствует реализация поставщика. Реализация поставщика должна быть создана на основе опубликованного FCM, хотя она может объявлять более новые версии HAL в своем манифесте устройства.
HAL-версия
A HAL Version has the format foo@xy , where foo is the HAL name and xy is the specific version; например, 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 :

  1. Скопируйте последнюю версию compatibility_matrix.<F-1>.xml в compatibility_matrix.F.xml .
  2. Update the level attribute in the file to F .
  3. Добавьте соответствующие правила сборки, чтобы установить эту матрицу совместимости на устройство.

Представляем новый 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.

For example, Android 9 introduces health@2.0 as a major-version upgrade of the 1.0 HAL and deprecates the 1.0 HAL. Старая версия 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 и включает следующие шаги:

  1. Убедитесь, что файл compatibility_matrix.F.xml имеет атрибут level="F" .
  2. Убедитесь, что все устройства собраны и загрузились.
  3. Обновите тесты VTS , чтобы гарантировать, что устройства, запускаемые с последней платформой (на основе уровня API доставки), имеют целевую версию FCM V >= F .
  4. Опубликовать файл в 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 является решением разработчика (т. е. для версий 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 .

For example, in Android 12, schedulerservice@1.0 is deprecated. Для его атрибута max-level установлено значение 5 — версия FCM, представленная в Android 11. См. манифест платформы Android 12 .

Удаление поддержки целевых версий FCM.

Когда активные устройства определенной целевой версии FCM V падают ниже определенного порога, целевая версия FCM удаляется из набора SF следующего выпуска платформы. Это делается с помощью обоих следующих шагов:

  1. Удаление compatibility_matrix.V.xml из правил сборки (чтобы он не устанавливался в образе системы) и удаление любого кода, который реализовал удаленные возможности или зависел от них.

  2. Удаление 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 находится в какой-либо общедоступной и замороженной матрице совместимости, она выпускается. Например, после того, как версия 3 FCM заморожена и опубликована в 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.
  • Фреймворк все еще поддерживает общедоступную и замороженную матрицу совместимости.

Примеры:

Следовательно, 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 .

,

В выпуске платформы Android имеется несколько матриц совместимости платформы (FCM), по одной для каждой обновляемой целевой версии FCM, которые определяют, что может использовать платформа, и требования к целевой версии FCM. As part of the FCM lifecycle, Android deprecates and removes HIDL HALs, then modifies FCM files to reflect the status of the HAL version .

Чтобы включить 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 :

  1. Скопируйте последнюю версию compatibility_matrix.<F-1>.xml в compatibility_matrix.F.xml .
  2. Обновите атрибут level в файле до F
  3. Добавьте соответствующие правила сборки, чтобы установить эту матрицу совместимости на устройство.

Представляем новый 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.`
  • Because the 1.0 HAL is not in compatibility_matrix.3.xml , devices that launch with Android 9 must not provide the 1.0 HAL (as this HAL is considered deprecated).
  • Поскольку HAL 1.0 присутствует в legacy/1/2.xml (более старые версии FCM, с которыми может работать Android 9) в качестве дополнительного HAL, платформа Android 9 по-прежнему может работать с HAL 1.0 (который не считается удаленной версией HAL). ).

Новые версии FCM

Процесс выпуска версии FCM в системном разделе выполняется исключительно Google как часть выпуска AOSP и включает следующие шаги:

  1. Убедитесь, что compatibility_matrix.F.xml имеет атрибут level="F" .
  2. Убедитесь, что все устройства собраны и загрузились.
  3. Обновите тесты VTS , чтобы гарантировать, что устройства, запускаемые с последней платформой (на основе уровня API доставки), имеют целевую версию FCM V >= F .
  4. Опубликовать файл в 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 является решением разработчика (т. е. для версий HAL AOSP решение принимает Google). Это может произойти при выпуске более высокой версии HAL (младшей или основной).

Устареть HAL устройства

When a given device HAL foo@xy is deprecated at FCM Version F , it means that any device launching with Target FCM Version V = F or later must not implement foo at version xy or any version older than 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 следующего выпуска платформы. Это делается с помощью обоих следующих шагов:

  1. Удаление compatibility_matrix.V.xml из правил сборки (чтобы он не устанавливался в образе системы) и удаление любого кода, который реализовал удаленные возможности или зависел от них.

  2. Removing framework HALs with max-level lower than or equal to V from the framework manifest, and deleting any code that implements the removed framework HALs.

Устройства с целевой версией 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 находится в какой-либо общедоступной и замороженной матрице совместимости, она выпускается. Например, после того, как версия 3 FCM заморожена и опубликована в AOSP, HAL health@2.0 считается выпущенной и текущей версией HAL.

Если версия HAL находится в общедоступной и замороженной матрице совместимости с самой высокой версией FCM, версия HAL является текущей (т. е. не устарела). For example, existing HAL Versions (such as nfc@1.0 introduced in compatibility_matrix.legacy.xml ) that continue to exist in compatibility_matrix.3.xml are also considered as released and current HAL Versions.

Для HAL платформы, если версия HAL находится в манифесте платформы последней выпущенной ветки без атрибута max-level или (что необычно) с max-level равным или выше версии FCM, выпущенной в этой ветке, она считается выпущенной. и текущая версия HAL. Например, displayservice HAL выпущен и актуален в Android 12, как указано в манифесте платформы Android 12 .

Выпущен, но устарел

Для HAL устройств версия HAL считается устаревшей тогда и только тогда, когда выполняются все следующие условия:

  • Он выпущен.
  • В общедоступной и замороженной матрице совместимости нет самой высокой версии FCM.
  • Фреймворк все еще поддерживает общедоступную и замороженную матрицу совместимости.

Примеры:

Hence power@1.0 is current, but NOT deprecated, in 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 .