При разработке и выпуске новых устройств поставщики могут определять и объявлять целевую версию FCM в манифесте устройства (DM). При обновлении образа поставщика для старых устройств поставщики могут реализовать новые версии HAL и увеличить целевую версию FCM.
Разработка новых устройств.
При определении целевой версии FCM для новых устройств:
- Оставьте
DEVICE_MANIFEST_FILEиPRODUCT_ENFORCE_VINTF_MANIFESTнеопределенными. - Реализуйте HAL для целевой версии FCM.
- Создайте правильный файл манифеста устройства.
- Запишите целевую версию FCM в файл манифеста устройства.
- Задайте значение
DEVICE_MANIFEST_FILE. - Задайте для параметра
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. - В аудиоинтерфейсе HAL 4.0, выпущенном с Android 9, устройства Google Pixel 2 и Pixel 2 XL могут использовать полное OTA-обновление для перехода на HAL 4.0, в котором реализован
android.hardware.audio@4.0::IDeviceFactory/default. - Хотя в
compatibility_matrix.2.xmlуказано, что требуется только аудио HAL 2.0, требование к образу поставщика с целевой версией FCM 2 было ослаблено, поскольку в платформе Android 9 (версия FCM 3) аудио HAL 4.0 считается функциональным аналогом аудио HAL 2.0.
Подведем итог. Поскольку для 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 на устройстве, поставщикам необходимо:
- Реализуйте все новые обязательные версии HAL для целевой версии FCM.
- Измените версии HAL в файле манифеста устройства.
- Измените целевую версию FCM в файле манифеста устройства.
- Удалите устаревшие версии 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.
Обязательные требования к ядру при беспроводном обновлении
Обновление устройств с 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 на устройствах с 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.