Google is committed to advancing racial equity for Black communities. See how.
本頁面由 Cloud Translation API 翻譯而成。
Switch to English

構建OTA軟件包

您可以使用build/make/tools/releasetools ota_from_target_files提供的ota_from_target_files工具為使用A / B系統更新或非A / B系統更新的設備構建完整和增量OTA軟件包。該工具將Android構建系統生成的target-files.zip文件作為輸入。

對於運行Android 11或更高版本的設備,您可以為具有不同SKU的多個設備構建一個OTA軟件包。這樣做需要將目標設備配置為使用動態指紋,更新OTA元數據以在先決條件和後置條件條目中包括設備名稱和指紋。

對於非A / B設備,Android 8.0已棄用基於文件的OTA軟件包,而該設備必須使用基於塊的OTA軟件包。要生成運行Android 7.x或更低版本的基於塊的OTA軟件包或設備,請將--block選項傳遞給ota_from_target_files參數。

建立完整的更新

完整更新是一個OTA軟件包,其中包含設備的整個最終狀態(系統,引導和恢復分區)。只要該設備能夠接收和應用該軟件包,該軟件包就可以安裝內部版本,而與設備的當前狀態無關。例如,以下命令使用發行工具為tardis設備構建target-files.zip歸檔文件。

第063章

生成的.zip文件包含為tardis設備構造OTA軟件包所需的所有內容。

./build/make/tools/releasetools/ota_from_target_files dist_output/tardis-target_files.zip ota_update.zip

ota_update.zip現在可以發送到測試設備了(所有內容ota_update.zip通過測試密鑰簽名)。對於用戶設備,請生成並使用您自己的私鑰,如簽署發布的版本中所述

建立增量更新

增量更新是一個OTA軟件包,其中包含對設備上已有數據的二進制補丁。具有增量更新的軟件包通常較小,因為它們不需要包含不變的文件。另外,由於更改後的文件通常與以前的版本非常相似,因此該程序包僅需要包含兩個文件之間差異的編碼。

您只能將增量更新程序包安裝在具有用於構建程序包的源版本的設備上。要構建增量更新,您需要上一版本的target_files.zip文件(您要從進行更新),以及新版本的target_files.zip文件。例如,以下命令使用發行工具為tardis設備構建增量更新。

./build/make/tools/releasetools/ota_from_target_files -i PREVIOUS-tardis-target_files.zip dist_output/tardis-target_files.zip incremental_ota_update.zip

此版本與以前的版本非常相似,並且增量更新包( incremental_ota_update.zip )比相應的完整更新小得多(約1 MB而不是60 MB)。

僅將增量軟件包分發給運行與增量軟件包起點完全相同的內部版本的設備。您必須在PREVIOUS-tardis-target_files.zipPREVIOUS-tardis-img.zip (兩者都由make dist構建, make dist通過fastboot update進行閃爍)中fastboot update ,而不是PRODUCT_OUT目錄(由make ,其中將使用fastboot flashall )。嘗試在具有某些其他版本的設備上安裝增量軟件包會導致安裝錯誤。當安裝失敗時,設備將保持相同的工作狀態(運行舊系統)。程序包會在觸摸文件之前先驗證其更新的所有文件的先前狀態,因此設備不會處於半升級狀態。

為了獲得最佳的用戶體驗,請為每3–4個增量更新提供完整的更新。這可以幫助用戶趕上最新版本,避免冗長的增量更新安裝序列。

為多個SKU構建OTA軟件包

Android 11或更高版本支持將單個OTA軟件包用於具有不同SKU的多個設備。這樣做需要將目標設備配置為使用動態指紋,並更新OTA元數據(使用OTA工具),以將設備名稱和指紋包括在前後條件項中。

關於SKU

SKU的格式是組合的構建參數值的變體,並且通常是當前build_fingerprint參數的未聲明子集。 OEM可以將CDD批准的構建參數的任何組合用於SKU,同時也可以將單個映像用於這些SKU。例如,以下SKU有多種變體:

SKU = <product><device><modifierA><modifierB><modifierC>
  • modifierA是設備級別(例如Pro,Premium或Plus)
  • modifierB是硬件版本(例如收音機)
  • modifierC是該區域,可以是通用區域(例如NA,EMEA或CHN),也可以是特定於國家或語言的區域(例如JPN,ENG或CHN)

許多OEM將單個映像用於多個SKU,然後在設備啟動後在運行時導出最終產品名稱和設備指紋。此過程簡化了平台開發過程,使具有少量自定義但不同產品名稱的設備可以共享公用映像(例如tardistardispro )。

使用動態指紋

指紋是構建參數(例如ro.product.brandro.product.namero.product.device )的定義串聯。設備的指紋是從系統分區指紋派生的,並用作設備上運行的圖像(和字節)的唯一標識符。要創建動態指紋,請在設備的build.prop文件中使用動態邏輯在設備啟動時獲取引導加載程序變量的值,然後使用該數據為該設備創建動態指紋。

例如,要將動態指紋用於tardistardispro設備,請更新以下文件,如下所示。

  • 更新odm/etc/build_std.prop文件以包含以下行。

    ro.odm.product.device=tardis
    
  • 更新odm/etc/build_pro.prop文件以包含以下行。

    ro.odm.product.device=tardispro
    
  • 更新odm/etc/build.prop文件以包含以下行。

    ro.odm.product.device=tardis
    import /odm/etc/build_${ro.boot.product.hardware.sku}.prop
    

這些行根據ro.boot.product.hardware.sku bootloader屬性(只讀)的值動態設置設備名稱,指紋和ro.build.fingerprint值。

更新OTA軟件包元數據

OTA軟件包包含描述該軟件包的元數據文件( META-INF/com/android/metadata ),其中包括OTA軟件包的前提條件和後置條件。例如,以下代碼是針對tardis設備的OTA軟件包的元數據文件。

post-build=google/tardis/tardis:11/RP1A.200521.001/6516341:userdebug/dev-keys
post-build-incremental=6516341
post-sdk-level=30
post-security-patch-level=2020-07-05
post-timestamp=1590026334
pre-build=google/tardis/tardis:11/RP1A.200519.002.A1/6515794:userdebug/dev-keys
pre-build-incremental=6515794
pre-device=tardis

pre-devicepre-build-incrementalpre-build值定義OTA軟件包可以安裝之前設備必須具有的狀態。 post-build-incrementalpost-build值定義了安裝OTA軟件包後設備預期具有的狀態。 pre-字段和post-字段的值是從以下相應的構建屬性派生的。

  • pre-device值是從ro.product.device構建屬性派生的。
  • 生成pre-build-incremental和生成post-build-incremental值是從ro.build.version.incremental構建屬性派生的。
  • 生成pre-build和生成post-build值是從ro.build.fingerprint構建屬性派生的。

在運行Android 11或更高版本的設備上,可以使用OTA工具中的--boot_variable_file標誌來指定文件的路徑,該文件包含用於創建設備動態指紋的運行時變量的值。然後,該數據用於更新OTA元數據,以在pre-條件和post-條件中使用設備名稱和指紋(使用豎線字符|作為分隔符)。 --boot_variable_file標誌具有以下語法和描述。

  • 語法:-- --boot_variable_file <path>
  • 說明:指定包含ro.boot.*屬性的可能值的文件路徑。當某些ro.product.*屬性被import語句覆蓋時,用於計算可能的運行時指紋。該文件期望每行一個屬性,其中每行具有以下格式: prop_name=value1,value2

例如,當屬性為ro.boot.product.hardware.sku=std,protardistardispro設備的OTA元數據如下所示。

post-build=google/tardis/tardis:11/<suffix>|google/tardis/tardispro:11/<suffix>
pre-build=google/tardis/tardis:11/<suffix>|google/tardis/tardispro:11/<suffix>
pre-device=tardis|tardispro

要在運行Android 10的設備上支持此功能,請參閱參考實現。此更改列表有條件地解析build.prop文件中的import語句,這使屬性替代得以識別並反映在最終的OTA元數據中。