構建 OTA 包

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

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

的Android 8.0棄用基於文件的OTA包非A / B設備,它們必須改用基於塊的OTA包。為了產生基於塊的OTA包或運行Android 7.x的裝置或降低,傳--block選項將ota_from_target_files參數。

構建完整更新

一個完整的更新是一個OTA包,其中包含的裝置(系統,引導和恢復分區)的整個最終狀態。只要設備能夠接收和應用包,無論設備的當前狀態如何,包都可以安裝構建。例如,下面的命令使用釋放工具來構建target-files.zip存檔tardis設備。

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

make dist建立一個完整的OTA包(在$OUT )。得到的.zip文件包含構建OTA包所需要的一切tardis設備。您也可以建立ota_from_target_files為Python二進制,並調用它來構建完全或增量包。

ota_from_target_files dist_output/tardis-target_files.zip ota_update.zip

ota_from_target_files路徑是建立在$PATH ,並將得到的蟒蛇二進制位於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.zipPREVIOUS-tardis-img.zip (均內置make dist ,用閃現fastboot update ,而不是下的那些), PRODUCT_OUT目錄(建有make ,這將亮出fastboot flashall )。嘗試在具有其他構建的設備上安裝增量包會導致安裝錯誤。安裝失敗時,設備保持相同的工作狀態(運行舊系統);該軟件包在接觸它們之前驗證它更新的所有文件的先前狀態,因此設備不會陷入半升級狀態。

為獲得最佳用戶體驗,每 3-4 次增量更新提供一次完整更新。這有助於用戶趕上最新版本並避免增量更新的長安裝序列。

為多個 SKU 構建 OTA 包

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

關於 SKU

一個SKU的格式是組合的變型版本參數的值,並且通常的電流的未聲明的子集build_fingerprint參數。 OEM 可以為 SKU 使用 CDD 批准的構建參數的任意組合,同時也可以為這些 SKU 使用單個映像。例如,以下 SKU 有多種變體:

SKU = <product><device><modifierA><modifierB><modifierC>
  • modifierA是設備級(如Pro,高級,或加號)
  • modifierB是硬件的變化(例如,無線電)
  • modifierC是區域,其可以是一般的(如NA,EMEA,或CHN)或特定於語言的國家或(如JPN,ENG,或CHN)

許多 OEM 對多個 SKU 使用單個映像,然後在設備啟動後在運行時派生最終產品名稱和設備指紋。這個過程簡化了平台的開發流程,使有輕微的自定義,但不同的產品名稱,設備共享共同的圖像(如tardistardispro )。

使用動態指紋

指紋是所定義的級聯構建參數ro.product.brandro.product.name ,和ro.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.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-devicepre-build-incremental ,和pre-build的值定義一個設備必須具有前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或更高版本的設備,您可以使用--boot_variable_file在OTA工具標誌指定到包含在創建設備的動態指紋所使用的運行時變量的值的文件的路徑。然後該數據被用於更新所述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,pro ,對於OTA元數據tardistardispro被如下所示的設備。

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此功能,請參照執行。這個變更列表有條件地解析import文中陳述build.prop文件,這使得特性替代得到認可並反映在最終的OTA元。