Android 12/13 Подписание изображений завершается с ошибкой в ​​sign_target_files_apks из-за отсутствия файла vendor.img при добавлении двоичных файлов поставщика

При попытке собрать образ из пакета AOSP 12 для OTA утилита sign_target_files_apks дает сбой из-за отсутствия файла vendor.img. Ошибка возникает только после добавления двоичных файлов поставщика. То же самое с AOSP 13, ошибка возникает только после добавления бинарных файлов поставщика.

Цель — Google Pixel 3a «Sargo», ОС — Ubuntu 18.04 LTS, тег версии AOSP — android-12.1.0_r27.

Я добавил правильные двоичные файлы устройства, загруженные с веб-сайта Google, скомпилированные и успешно прошитые на устройстве Pixel 3a (кодовое имя Sargo).

Затем предприняли попытку создать пакет OTA в соответствии с документацией Google по Подписание сборок для выпуска для генерации ключей, Создание пакетов OTA для создания фактического пакета OTA и подписать пакет после Подписание сборок для выпуска.

Когда я попытался подписать пакет OTA, запустив следующее (цитата из Подписание сборок для выпуска):

make dist
sign_target_files_apks \
-o \    # explained in the next section
--default_key_mappings ~/.android-certs out/dist/*-target_files-*.zip \
signed-target_files.zip

sign_target_files_apks выдает ошибку:

build_super_image.py - WARNING : Skip building super image because the following images are missing from target files:
/tmp/targetfiles-1KVO0M/IMAGES/vendor.img

И показывает след в конце:

Traceback (most recent call last):
  File "/home/dean/proj/aosp12/out/soong/host/linux-x86/bin/sign_target_files_apks/internal/stdlib/runpy.py", line 174, in _run_module_as_main
  File "/home/dean/proj/aosp12/out/soong/host/linux-x86/bin/sign_target_files_apks/internal/stdlib/runpy.py", line 72, in _run_code
  File "/home/dean/proj/aosp12/out/soong/host/linux-x86/bin/sign_target_files_apks/__main__.py", line 12, in <module>
  File "/home/dean/proj/aosp12/out/soong/host/linux-x86/bin/sign_target_files_apks/internal/stdlib/runpy.py", line 174, in _run_module_as_main
  File "/home/dean/proj/aosp12/out/soong/host/linux-x86/bin/sign_target_files_apks/internal/stdlib/runpy.py", line 72, in _run_code
  File "/home/dean/proj/aosp12/out/soong/host/linux-x86/bin/sign_target_files_apks/sign_target_files_apks.py", line 1420, in <module>
  File "/home/dean/proj/aosp12/out/soong/host/linux-x86/bin/sign_target_files_apks/sign_target_files_apks.py", line 1413, in main
  File "/home/dean/proj/aosp12/out/soong/host/linux-x86/bin/sign_target_files_apks/add_img_to_target_files.py", line 1039, in main
  File "/home/dean/proj/aosp12/out/soong/host/linux-x86/bin/sign_target_files_apks/add_img_to_target_files.py", line 985, in AddImagesToTargetFiles
  File "/home/dean/proj/aosp12/out/soong/host/linux-x86/bin/sign_target_files_apks/add_img_to_target_files.py", line 606, in CheckAbOtaImages
AssertionError: Failed to find vendor.img  

Некоторое тестирование, которое я провел, показало, что ошибка возникает только после добавления бинарных файлов поставщика в сборку, как указано в документации Google. Выполнение sign_target_files_apks без добавления двоичных файлов поставщика завершается успешно. Я попытался воспроизвести ошибку на AOSP 13 с другим целевым устройством и получил те же результаты: sign_target_files_apks ошибка возникает только после добавления двоичных файлов поставщика.

0
0
66
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я нашел решение:

Есть патч от PixelExperience, предназначенный для AOSP 10, но применимый к AOSP 12. Патч можно найти на Github , а также на их Gerrit.

Чтобы уточнить:

Патч изменяет sign_target_files_apks.py, расположенный под build/make/tools/releasetools или build/tools/releasetools. Вы можете изменить любой файл, они связаны и изменения отражаются.

В функции ProcessTargetFiles: заменить строку if filename.startswith("IMAGES/"): на строку if filename.startswith("IMAGES/") and not filename.endswith("vendor.img"):

В функции main: заменить строку new_args = ["--is_signing"] на строку new_args = ["--is_signing", "--add_missing"]

Обязательно перестройте AOSP с помощью make dist, прежде чем пытаться запустить sign_target_files_apks, потому что его путь скоро разрешает папку out.

Другие вопросы по теме