建構 OTA 套件

您可以使用 ota_from_target_files build/make/tools/releasetools 提供的工具,以建構完整和增量 OTA 套件適用於使用 A/B 系統更新的裝置, 非 A/B 系統更新。這項工具會擷取 Android 建構系統產生的 target-files.zip 檔案做為輸入內容。

針對搭載 Android 11 以上版本的裝置,您可以 適用於具備不同 SKU 的多部裝置適用的單一 OTA 套件。要這麼做 將目標裝置設定為使用動態指紋更新 OTA 中繼資料,將裝置納入其中 命名條件和指紋。

Android 8.0 已淘汰的非 A/B 裝置檔案型 OTA 套件, 請改用區塊式 OTA 套件。目的地: 產生區塊式 OTA 套件或搭載 Android 7.x 以下版本的裝置,然後 對 ota_from_target_files 參數加入 --block 選項。

建構完整更新內容

「完整」更新是 OTA 套件,內含 裝置(系統、啟動與復原分區)。 接收及套用套件,套件便可安裝 無論裝置目前狀態為何例如,下列 指令會使用發布工具建立 target-files.zip 封存檔 tardis 部裝置。

. build/envsetup.sh && lunch tardis-eng
mkdir dist_output
make dist DIST_DIR=dist_output

make dist 會在 $OUT 中建構完整的 OTA 套件。產生的 .zip 檔案 包含為 tardis 裝置建構 OTA 套件所需的一切資訊。 您也可以將 ota_from_target_files 建構為 Python 二進位檔,並呼叫 並建構完整或漸進式套件

ota_from_target_files dist_output/tardis-target_files.zip ota_update.zip

ota_from_target_files 路徑會在 $PATH 中設定,而產生的 Python 位於 out/ 目錄。

現在可以將「ota_update.zip」傳送給測試裝置 (所有已簽署項目) 測試金鑰)。如果是使用者裝置,請產生並使用自己的私密金鑰, ,詳情請參閱「簽署要發布的版本」。

建構漸進式更新

「漸進式」更新是 OTA 套件,包含資料的二進位修補程式 。採用漸進式更新的套件通常較小 因為這類不需要納入未變更的檔案另外,變更的檔案 與先前版本非常相似,套件只需要包含 兩個檔案間的差異編碼。

您只能在符合下列條件的裝置上安裝漸進式更新套件: 建構套件時使用的原始碼建構作業如要建構漸進式更新 您需要上一個版本 (所要的) 的 target_files.zip 檔案 更新 from) 及從新建構的 target_files.zip 檔案。適用對象 舉例來說,下列指令會使用發布工具來建立漸進式更新 都對 tardis 裝置至關重要

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 建構,使用 fastboot update 刷新) PRODUCT_OUT 目錄中的目錄 (使用 make 建構的, 已透過 fastboot flashall 刷新)。正在嘗試安裝漸進式套件 會導致安裝錯誤發生。當 安裝失敗,裝置仍會處於相同的工作狀態 (執行舊版 系統);套件會驗證其更新所有檔案的先前狀態 再接觸,因此裝置不會處於半升級狀態。

為提供最佳使用者體驗,建議每 3 到 4 次更新一次 更新。這種做法可讓使用者掌握最新版本的內容,避免長時間使用 安裝增量更新。

為多個 SKU 建構 OTA 套件

Android 11 以上版本支援使用單一 OTA 連線 適用於具備不同 SKU 的多部裝置。為此,您需要設定 讓目標裝置使用動態指紋並更新 OTA 中繼資料 (使用 OTA 工具) 將裝置名稱及指紋納入前後對照 條件項目。

關於 SKU

SKU 格式是合併後的建構版本 參數值和 通常是目前 build_fingerprint 參數中未宣告的子集。 原始設備製造商 (OEM) 可針對 SKU 使用任意 CDD 核准的建構參數組合 以及這些 SKU 的單一映像檔舉例來說,下列 SKU 多種變化版本:

SKU = <product><device><modifierA><modifierB><modifierC>
  • modifierA 是裝置層級 (例如 Pro、 Premium 或 Plus)
  • modifierB 是硬體變化版本 (例如 電台)
  • modifierC 是區域,可能為一般區域 (例如北美洲、歐洲、中東和非洲地區或中華電信),或是國家/地區或語言特定 (例如 JPN、 英文或 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.build.fingerprintro.boot.product.hardware.sku 系統啟動載入程式屬性 (唯讀)。

更新 OTA 套件中繼資料

OTA 套件內含中繼資料檔案 (META-INF/com/android/metadata), 說明套件,包括 OTA 的先決條件和事後條件 套件。舉例來說,以下程式碼是 OTA 套件的中繼資料檔案 指定 tardis 裝置。

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 套件才能安裝 OTA 套件。 post-build-incrementalpost-build 值會定義裝置目前的狀態 安裝 OTA 套件後安裝的產品。pre-post- 欄位衍生自下列對應的建構屬性。

  • pre-device 值衍生自 ro.product.device 建構屬性。
  • pre-build-incrementalpost-build-incremental 值是衍生結果 來自 ro.build.version.incremental 建構屬性。
  • pre-buildpost-build 值衍生自 ro.build.fingerprint 建構屬性。

在搭載 Android 11 以上版本的裝置上,您可以使用 OTA 工具中的 --boot_variable_file 旗標,指定該檔案的路徑 包含建立裝置的 動態指紋該資料會用來更新 OTA 中繼資料,將 pre-post- 條件中的裝置名稱和指紋 (使用 直立線字元 |分隔)。--boot_variable_file 旗標具有 遵循的語法和說明

  • 語法:--boot_variable_file <path>
  • Description: 指定檔案路徑,其中包含可能的值 ro.boot.* 屬性。用於計算可能的執行階段指紋 某些 ro.product.* 屬性遭到匯入陳述式覆寫。 檔案中每一行一個屬性應該包含下列屬性 格式:prop_name=value1,value2

例如,當屬性是 ro.boot.product.hardware.sku=std,pro 時, 以下為 tardistardispro 裝置的 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 中繼資料