簡體   English   中英

Android 12/13 由於添加供應商二進制文件時缺少文件 vendor.img,簽署 OTA 失敗並在 sign_target_files_apks 中出現錯誤

[英]Android 12/13 Signing OTA fails with error in sign_target_files_apks due to missing file vendor.img when vendor binaries are added

嘗試在 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

我添加了從谷歌網站下載的正確設備二進制文件,編譯並成功燒錄到 Pixel 3a 設備(代號 Sargo)。

然后嘗試按照谷歌關於簽署發布版本的文檔構建 OTA package 以生成密鑰,構建 OTA 包以構建實際的 OTA package,並按照簽署發布版本簽署package。

當我嘗試通過運行以下命令對 OTA package 進行簽名時(引用自Signing Builds for Release ):

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 error occurs only after vendor binaries are added。

我找到了解決方案:

PixelExperience 有一個補丁,適用於 AOSP 10,但適用於 AOSP 12。可以在Github和他們的Gerrit上找到該補丁。

進一步闡述:

該補丁修改了位於build/make/tools/releasetools sign_target_files_apks.py build/tools/releasetools releasetools 下的 sign_target_files_apks.py。 您可以修改任一文件,它們已鏈接並且更改會反映出來。

在 function ProcessTargetFiles中:將if filename.startswith("IMAGES/"):行替換為if filename.startswith("IMAGES/") and not filename.endswith("vendor.img"):

在 function main中:將行new_args = ["--is_signing"]替換為行new_args = ["--is_signing", "--add_missing"]

在嘗試運行sign_target_files_apks之前,請確保使用make dist重建 AOSP,因為它的路徑很快就會解析out文件夾。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM