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

При разработке и выпуске новых устройств поставщики могут определить и объявить целевую версию 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, должны иметь целевую версию FCM, равную 3 (более поздняя версия, доступная на данный момент). Чтобы объявить это в манифесте устройства:

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

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

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

Обновление HAL

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

  • Устройства Google Pixel 2 и Pixel 2 XL выпущены с целевой версией FCM 2, в которой реализован необходимый HAL аудио 2.0 android.hardware.audio@2.0::IDeviceFactory/default .
  • Для аудио 4.0 HAL, выпущенного с Android 9, устройства Google Pixel 2 и Pixel 2 XL могут использовать полную версию OTA для обновления до HAL 4.0, которая реализует android.hardware.audio@4.0::IDeviceFactory/default .
  • Несмотря на то, что в compatibility_matrix.2.xml указано только аудио 2.0, требование к образу поставщика с целевой версией 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 должна быть как минимум устаревшей. Однако в манифесте устройства указана целевая версия FCM 2, поскольку образ поставщика был обновлен в соответствии с compatibility_matrix.2.xml :

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

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

Например, устройства Google Pixel 2 и Pixel 2 XL имеют целевую версию 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 .