Разработка манифеста устройства

При разработке и выпуске новых устройств поставщики могут определять и объявлять целевую версию FCM в манифесте устройства (DM). При обновлении образа поставщика для старых устройств поставщики могут выбрать внедрение новых версий HAL и увеличить целевую версию FCM.

Разработка новых устройств

При определении целевой версии FCM устройства для новых устройств:

  1. Оставьте DEVICE_MANIFEST_FILE и PRODUCT_ENFORCE_VINTF_MANIFEST неопределенными.
  2. Внедрите HAL для целевой версии FCM.
  3. Напишите правильный файл манифеста устройства.
  4. Запишите целевую версию FCM в файл манифеста устройства.
  5. Установите DEVICE_MANIFEST_FILE .
  6. Установите для PRODUCT_ENFORCE_VINTF_MANIFEST значение true .

Выпуск новых устройств

Когда новое устройство выпускается, его начальная целевая версия FCM должна быть определена и объявлена ​​в манифесте устройства как атрибут « target-level » в элементе <manifest> верхнего уровня.

Например, устройства, запускаемые с Android 9, должны иметь Target FCM Version, равную 3 (в настоящее время доступна более высокая версия). Чтобы заявить об этом в манифесте устройства:

<manifest version="1.0" type="device" target-level="3">
    <!-- ... -->
</manifest>

Обновление образа поставщика

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

Обновление HAL

Во время обновления образа поставщика поставщики могут реализовать новые версии HAL при условии, что имя HAL, имя интерфейса и имя экземпляра совпадают. Например:

  • Устройства Google Pixel 2 и Pixel 2 XL, выпущенные с Target FCM версии 2, в которых реализован требуемый аудио 2.0 HAL android.hardware.audio@2.0::IDeviceFactory/default .
  • Для аудио 4.0 HAL, выпущенного с Android 9, устройства Google Pixel 2 и Pixel 2 XL могут использовать полный OTA для обновления до 4.0 HAL, который реализует android.hardware.audio@4.0::IDeviceFactory/default .
  • Несмотря на то, что в файле compatibility_matrix.2.xml указано только аудио 2.0, требования к образу поставщика с Target FCM версии 2 были ослаблены, поскольку платформа Android 9 (FCM версии 3) рассматривает аудио 4.0 как замену аудио 2.0 HAL с точки зрения функциональности. .

Подводя итог, учитывая, что compatibility_matrix.2.xml требует аудио 2.0, а compatibility_matrix.3.xml требует аудио 4.0, требования следующие:

Версия FCM (Система) Целевая версия FCM (производитель) Требования
2 (8,1) 2 (8,1) Аудио 2.0
3 (9) 2 (8,1) Аудио 2.0 или 4.0
3 (9) 3 (9) Аудио 4.0

Обновление целевой версии FCM

Во время обновления образа поставщика поставщики также могут увеличивать целевую версию FCM, чтобы указать целевую версию FCM, с которой может работать обновленный образ поставщика. Чтобы повысить целевую версию FCM устройства, поставщики должны:

  1. Внедрите все новые требуемые версии HAL для целевой версии FCM.
  2. Измените версии HAL в файле манифеста устройства.
  3. Измените целевую версию FCM в файле манифеста устройства.
  4. Удалите устаревшие версии HAL.

Например, устройства Google Pixel и Pixel XL, запущенные с Android 7.0, поэтому их целевая версия FCM должна быть как минимум устаревшей. Однако манифест устройства объявляет Target FCM версии 2, поскольку образ поставщика был обновлен в соответствии с файлом compatibility_matrix.2.xml :

<manifest version="1.0" type="device" target-level="2">

Если поставщики не реализуют все необходимые новые версии HAL или не удаляют устаревшие версии HAL, Целевая версия FCM не может быть обновлена.

Например, устройства Google Pixel 2 и Pixel 2 XL имеют Target FCM версии 2. Хотя они и реализуют некоторые HAL, необходимые для файла compatibility_matrix.3.xml (например, audio 4.0, health 2.0 и т. Д.), Они не удаляют android.hardware.radio.deprecated@1.0 , который устарел в FCM версии 3 (Android 9). Следовательно, эти устройства не могут обновить целевую версию FCM до 3.

Обязательные требования к ядру во время OTA

Обновление устройств с Android 9 и ниже

На устройствах с Android 9 или более ранней версии убедитесь, что выбраны следующие CL:

Эти изменения вводят флаг сборки PRODUCT_OTA_ENFORCE_VINTF_KERNEL_REQUIREMENTS и оставляют флаг снятым для устройств, запущенных с Android 9 или ниже.

  • При обновлении до Android 10 клиенты OTA на устройствах под управлением Android 9 или более ранней версии неправильно проверяют требования ядра в пакете OTA. Эти изменения необходимы, чтобы отказаться от требований ядра из сгенерированного пакета OTA.
  • При обновлении до Android 11 необязательно устанавливать флаг сборки PRODUCT_OTA_ENFORCE_VINTF_KERNEL_REQUIREMENTS для проверки совместимости с VINTF при создании пакета обновления.

Дополнительные сведения об этом флаге сборки см. В разделе Обновление устройств с Android 10 .

Обновление устройств с Android 10

В Android 10 представлен новый флаг сборки PRODUCT_OTA_ENFORCE_VINTF_KERNEL_REQUIREMENTS . Для устройств, запущенных с Android 10, этот флаг автоматически устанавливается в значение true . Когда флаг установлен в значение true , сценарий извлекает версию ядра и конфигурации ядра из установленного образа ядра.

  • При обновлении до Android 10 пакет обновления OTA содержит версию и конфигурацию ядра. Клиенты OTA на устройствах под управлением Android 10 читают эту информацию, чтобы проверить совместимость.
  • При обновлении до Android 11 жанр пакета OTA считывает версию и конфигурацию ядра для проверки совместимости.

Если скрипту не удается извлечь эту информацию для образа ядра, выполните одно из следующих действий:

  • Отредактируйте сценарий, чтобы он поддерживал формат вашего ядра и вносил свой вклад в AOSP.
  • Установите BOARD_KERNEL_VERSION на версию ядра и BOARD_KERNEL_CONFIG_FILE на путь к встроенному файлу конфигурации ядра .config . Обе переменные должны быть обновлены при обновлении образа ядра.
  • Или установите для PRODUCT_OTA_ENFORCE_VINTF_KERNEL_REQUIREMENTS значение false чтобы пропустить проверку требований ядра. Это не рекомендуется, поскольку любая несовместимость скрыта и обнаруживается только при запуске тестов VTS после обновления.

Вы можете просмотреть исходный код сценария извлечения информации о ядре extract_kernel.py .