Разработка индивидуальных устройств

На этой странице объясняется несколько задач, которые вам, возможно, придется выполнить, если вы настраиваете сборку для своего собственного устройства.

Создайте пользовательскую конфигурацию вспышки

Инструкции для быстрой загрузки определены в артефакте fastboot-info.txt . При сборке нескольких целевых устройств в каталоге $OUT_DIR будет несколько файлов fastboot-info.txt . При этом $ANDROID_PRODUCT_OUT указывает на последнюю собранную вами целевую систему. На этой странице перечислены задачи, которые должна выполнить быстрая загрузка, и её можно сгенерировать заново с помощью m fastboot_info . Вы можете настроить собственную логику прошивки, изменив файл fastboot-info.txt .

Файл fastboot-info.txt поддерживает следующие команды:

  • flash %s : прошивает указанный раздел. Необязательные аргументы: --slot-other, filename_path , and --apply-vbmeta`.
  • update-super : Обновляет суперраздел.
  • if-wipe : Условно запускает какой-либо другой компонент, если указано стирание.
  • erase %s : стирает указанный раздел (можно использовать только вместе с if-wipe -> например, if-wipe erase cache ).

Определить состояние блокировки вспышки

Если вы создаёте собственный демон флеш-загрузки (flashbootd) для устройства, вам необходимо получить информацию о загрузчике и его блокировке. Метод getFlashLockState() @SystemApi передаёт состояние загрузчика, а системный API PersistentDataBlockManager.getFlashLockState() возвращает состояние блокировки загрузчика на совместимых устройствах.

Возвращаемое значение Условия
FLASH_LOCK_UNKNOWN Возвращается только устройствами, обновляемыми до Android 7.x или выше, которые ранее не поддерживали изменения загрузчика, необходимые для получения статуса блокировки прошивки, если они поддерживали возможность блокировки/разблокировки прошивки.
  • Новые устройства под управлением Android 7.x или выше должны находиться в состоянии FLASH_LOCK_LOCKED или FLASH_LOCK_UNLOCKED .
  • Устройства, обновляемые до Android 7.x или выше, которые не поддерживают возможность разблокировки/блокировки с помощью прошивки, должны возвращать состояние FLASH_LOCK_LOCKED .
FLASH_LOCK_LOCKED Возвращается любым устройством, которое не поддерживает блокировку/разблокировку с помощью вспышки (то есть устройство всегда заблокировано), или любым устройством, которое поддерживает блокировку/разблокировку с помощью вспышки и находится в заблокированном состоянии.
FLASH_LOCK_UNLOCKED Возвращается любым устройством, поддерживающим блокировку/разблокировку прошивки и находящимся в разблокированном состоянии.

Производители должны тестировать значения, возвращаемые устройствами с заблокированными и разблокированными загрузчиками. Например, AOSP содержит эталонную реализацию, которая возвращает значение на основе загрузочного свойства ro.boot.flash.locked . Примеры кода находятся в следующих каталогах:

  • frameworks/base/services/core/java/com/android/server/PersistentDataBlockService.java
  • frameworks/base/core/java/android/service/persistentdata/PersistentDataBlockManager.java