При попытке собрать образ из пакета 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
ошибка возникает только после добавления двоичных файлов поставщика.
Я нашел решение:
Есть патч от 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
.