您可以使用 build/make/tools/releasetools
提供的 ota_from_target_files
工具,為使用 A/B 系統更新或非 A/B 系統更新的裝置建構完整和增量 OTA 套件。這項工具會擷取
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
檔案,以及新版本的 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.zip
或 PREVIOUS-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 使用同一張圖片,然後衍生出最終成品
名稱和裝置指紋。這項程序
簡化平台開發程序,讓裝置能夠
客製化圖片,但使用不同的產品名稱,藉此分享共同圖片 (例如
tardis
和 tardispro
)。
使用動態指紋
指紋是建構參數的定義串連,例如 ro.product.brand
、ro.product.name
和 ro.product.device
。裝置的指紋是從系統分區指紋衍生而來,用於識別在裝置上執行的映像檔 (和位元組)。如要建立動態指紋,請在裝置的 build.prop
檔案中使用動態邏輯,在裝置啟動時取得引導程式變數的值,然後使用該資料為該裝置建立動態指紋。
舉例來說,如要為 tardis
和 tardispro
裝置使用動態指紋,請更新下列檔案,如下所示。
更新
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.fingerprint
值
ro.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-device
、pre-build-incremental
和 pre-build
值會定義裝置必須具備的狀態,才能安裝 OTA 套件。
post-build-incremental
和 post-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>
- Description: 指定檔案路徑,其中包含可能的值
ro.boot.*
屬性。用於計算可能的執行階段指紋 某些ro.product.*
屬性遭到匯入陳述式覆寫。 檔案中每一行一個屬性應該包含下列屬性 格式:prop_name=value1,value2
。
舉例來說,如果屬性為 ro.boot.product.hardware.sku=std,pro
,tardis
和 tardispro
裝置的 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 中繼資料