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

В выпуске платформы Android есть несколько матриц совместимости инфраструктуры (FCM) - по одной для каждой обновляемой целевой версии FCM, - которые определяют, что платформа может использовать, и требования к целевой версии FCM. В рамках жизненного цикла ТСМ, Android принижает и удаляет HIDL Хальса, затем изменяет 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. Содержимое манифеста устройства ограничено целевой версией FCM устройства, но может содержать список HAL, которые являются строго более новыми по сравнению с FCM, соответствующим V.
HAL устройства HAL, перечисленные (предоставленные) в манифесте устройства и перечисленные (обязательные или необязательные) в матрице совместимости инфраструктуры (FCM).
Матрица совместимости устройств (DCM) XML-файл, в котором указаны требования поставщика к соответствующим реализациям платформы. Каждое устройство содержит один DCM.
Фреймворк Манифест XML-файл, который указывает, какие версии HAL предоставляет платформа интерфейса поставщика, включая system, system_ext и изображения продуктов. HAL в манифесте платформы динамически отключаются в соответствии с версией Target FCM устройства.
Рамочные HAL HAL, перечисленные в манифесте платформы и перечисленные как обязательные или необязательные в матрице совместимости устройств (DCM).

Разработка новой версии FCM

Android увеличивает версию FCM для каждого выпуска фреймворка (например, Android 8, 8.1 и т. Д.). В процессе разработки новой compatibility_matrix.current.xml создается ( F ) и существующий compatibility_matrix.f.xml (где f < F ) больше не изменился.

Для того, чтобы приступить к разработке в новой версии ТСМ F :

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

Представляем новый HAL

Во время разработки, при внедрении новой HAL (Wi-Fi, NFC и т.д.) для Android от текущей версии ТСМ F , добавьте HAL в compatibility_matrix.current.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.current.xml (переименованный в compatibility_matrix.2.xml после Android 8.1 выпущен):

<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) в текущей версии ТСМ F , если эта версия:

  • Требуется на устройствах запуска с V = F , в compatibility_matrix.current.xml должен указать x.(z+1) и optional="false" .
  • Не требуется на устройствах запуска с V = F , то compatibility_matrix.current.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.current.xml (переименовано в compatibility_matrix.2.xml после Android 8.1 выпущено) и изменена следующим образом :

<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 имеет обновление мейджор-версии в текущей версии ТСМ F , новая основная версия x.0 добавляется compatibility_matrix.current.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 в качестве основного-версии обновления на 1.0 HAL и уменьшает значимость 1.0 HAL. Старая версия, health@1.0 , не является обязательной для устройств запуска с Android 8.0 и Android 8.1. Устройства, запускаемые с Android 9, не должны предоставлять устаревшую версию 1.0 HAL, а должны предоставлять новую версию 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.current.xml (переименован в compatibility_matrix.3.xml с Android выпуска 9) и модифицированного следующим образом :

<hal format="hidl" optional="false">
    <name>android.hardware.health</name>
    <version>2.0</version>
    <interface>
        <name>IHealth</name>
        <instance>default</instance>
    </interface>
</hal>

Ограничения:

  • Поскольку 2,0 HAL в compatibility_matrix.3.xml с optional="false" , устройств, запуск с Android 9 должен поставляться с 2,0 HAL.
  • Поскольку 1,0 HAL не в compatibility_matrix.3.xml , устройства, запуск с Android 9 не должен предоставлять 1.0 HAL (как считается этот HAL устаревшее).
  • Поскольку 1.0 HAL присутствует в legacy / 1 / 2.xml (более старые версии FCM, с которыми может работать Android 9) в качестве дополнительного HAL, платформа Android 9 может по-прежнему работать с 1.0 HAL (который не считается удаленной версией HAL. ).

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

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

  1. Переименовать compatibility_matrix.current.xml в compatibility_matrix.F.xml .
  2. Убедитесь , что файл имеет атрибут level="F" .
  3. Изменить соответствующие правила сборки , чтобы отразить изменение имени файла.
  4. Убедитесь, что все устройства собраны и загружаются.
  5. Обновление VTS тесты для обеспечения устройств запуская с последней базой ( в зависимости от уровня API судоходства) имеет Target ТСМ Версия V >= F .
  6. Опубликовать файл в AOSP.

Этот файл не может быть изменен после был переименован и опубликован. Например, во время Android 9 развития следующие файлы построены для hardware/interfaces/compatibility_matrices/ :

  • compatibility_matrix.legacy.xml
  • compatibility_matrix.1.xml
  • compatibility_matrix.2.xml
  • compatibility_matrix.current.xml

Когда Android 9 отпускания compatibility_matrix.current.xml переименован в compatibility_matrix.3.xml и следующие файлы построены для hardware/interfaces/compatibility_matrices/ :

  • compatibility_matrix.legacy.xml
  • compatibility_matrix.1.xml
  • compatibility_matrix.2.xml
  • compatibility_matrix.3.xml

VTS испытания убедиться , что устройства с Android запуская 9 имеют Target FCM версия> = 3.

Кроме того, FCM product и system_ext могут также перечислять требования для каждой версии FCM платформы. Выпуск версий FCM для разделов product и system_ext осуществляется владельцем этих образов соответственно. Номера версий FCM в разделах product и system_ext должны совпадать с номерами версий в системном разделе. Подобно версиям FCM в системном разделе, матрица совместимости для FCM версии F в разделах product и system_ext отражает требования к устройству с целевой версией FCM F.

Прекращение поддержки версии HAL

Решение об отказе от версии HAL принимает разработчик (т. Е. Решение для HAL AOSP принимает Google). Это может произойти, когда будет выпущена более высокая версия HAL (младшая или основная).

Прекращение поддержки устройства HAL

Когда данное устройство HAL foo@xy является устаревшим в ТСМЕ версия F , это означает , что любое устройство запуск с целевым ТСМОМ версия V = F или более поздней версией не должен реализовывать foo в версии xy или любую версию старше xy . Устаревшая версия HAL по-прежнему поддерживается платформой для обновления устройств.

При ТСМ версии F отпускании HAL версии foo@xy считается устаревшим , если конкретный HAL версии в явном виде не указано в последнем ТСМ для целевой ТСМ версии 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 и compatibility_matrix.2.xml . Следовательно, health@1.0 считается устаревшим.

Устарела фреймворк HAL

Когда данная структура HAL foo@xy является устаревшим в ТСМ версии F , это означает , что любое устройство запуска с целевой ТСМ версии 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 , версии ТСМ введенную в Android 11. См Android 12 рамочного манифесте .

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

Когда активные устройства определенной целевой ТСМ версии V опускается ниже определенного порогового значения, то целевая ТСМ версия удаляется из набора S F следующего рамочного выпуска. Это делается двумя следующими шагами:

  • Удаление compatibility_matrix.V.xml из правил сборки (так , что он не установлен на образ системы), и удаление любой код , который реализуется или зависит от удаляемого функциональности.
  • Удаление рамочного HALS с max-level ниже или равен V от рамочной декларации и удаление какого - либо кода , который реализует удаленные рамки HALS.

Устройства с целевой FCM версия снаружи S F для данной структуры выпуска не могут перейти на эту версию.

Статус версии HAL

В следующих разделах описываются (в хронологическом порядке) возможные состояния версии HAL.

Неизданный

Для устройств HAL, если версия HAL не входит ни в одну из общедоступных или замороженных матриц совместимости, она считается невыпущенной и, возможно, находится в разработке. Это включает в себя HAL версии, которые только в compatibility_matrix.current.xml . Примеры:

  • В процессе разработки Android 9 (до compatibiility_matrix.current.xml переименован в compatibility_matrix.3.xml ), то health@2.0 HAL считался невыпущенный HAL.
  • teleportation@1.0 HAL не в какой - либо выпущенные матрицах совместимости, а также считается невыпущенным HAL.

Для фреймворков HAL, если версия HAL находится только в манифесте фреймворка несвязанной ветки разработки, она считается невыпущенной.

Выпущено и текущее

Для устройств HAL, если версия HAL присутствует в какой-либо общедоступной и замороженной матрице совместимости, она выпускается. Например, после того, как FCM Version 3 заморожен (когда compatibiility_matrix.current.xml переименован в compatibility_matrix.3.xml ) и опубликованы в AOSP, то health@2.0 HAL считается выпущенный и текущий HAL версии.

Если HAL версия находится в матрице общественной и замороженная совместимости , которая имеет самый высокий FCM версия ( за исключение compatibility_matrix.current.xml ), версия HAL является текущей (т.е. не рекомендуется). Например, существующие версии HAL (такие как nfc@1.0 введенной в compatibility_matrix.legacy.xml ) , которые продолжают существовать в compatibility_matrix.3.xml , также рассматриваются как выпущенные и текущие версии HAL.

Для каркасного Хальса, если версия HAL находится в рамочном манифесте последней выпущенной ветви без max-level атрибута или (необычно) с max-level равной или выше , чем версия ТСМА выпущенной в этой отрасли, это считается выпущенным и текущая версия HAL. Например, displayservice HAL высвобождается , и ток в Android 12, как указано самым Android 12framework manifest .

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

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

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

Примеры:

Следовательно power@1.0 является текущим, но НЕ рекомендуется, в Android 9.

Для каркасного Хальса, если версия HAL находится в рамочном манифесте последней выпущенной ветви с max-level атрибутом ниже , чем версия ТСМА выпущенной в этой отрасли, он считается освобождено , но устаревшая версией HAL. Например, schedulerservice HAL выпущен , но не рекомендуется в Android 12, как указано Android 12framework manifest .

Удаленный

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

  • Ранее он был выпущен.
  • Фреймворк не поддерживает никаких публичных и замороженных матриц совместимости.

Матрицы совместимости, которые являются общедоступными, замороженными, но не поддерживаются платформой, хранятся в базе кода для определения удаленного набора версий HAL, чтобы можно было написать тесты VTS, чтобы гарантировать, что удаленные HAL не находятся на новых устройствах.

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

  • Ранее он был выпущен.
  • Его нет в манифесте фреймворка последней выпущенной ветки.

Устаревшие FCM

Устаревшая целевая версия FCM - это особое значение для всех устройств, не поддерживающих высокие частоты. Наследие ТСМ, compatibility_matrix.legacy.xml , перечислены требования каркаса на устаревших устройств (т.е. устройства запущен до Android 8.0).

Если этот файл существует для ТСМА с версией F , любое не Treble устройство может быть повышенно до F условия , что его устройство манифест совместим с этим файлом. Его удаление выполняется по той же процедуре, что и FCM для других целевых версий FCM (удаляется после того, как количество активных устройств до 8.0 упадет ниже определенного порогового значения).

Выпущенные версии FCM

Список выпущенных версий ТСМ можно найти в hardware/interfaces/compatibility_matrices .

Чтобы найти версию ТСМ выпущен с определенным Android версии см Level.h .