製作OTA升級包

来源:https://www.cnblogs.com/rossoneri/archive/2018/09/21/9688132.html
-Advertisement-
Play Games

OTA 軟體包工具 本文地址 "http://wossoneri.github.io/2018/09/21/%5BAndroid%5D%5BFramework%5Dcreate ota update zip/" 中提供的 ota_from_target_files 工具可以構建兩種類型的軟體包:完整 ...


OTA 軟體包工具

本文地址http://wossoneri.github.io/2018/09/21/%5BAndroid%5D%5BFramework%5Dcreate-ota-update-zip/
build/tools/releasetools 中提供的 ota_from_target_files 工具可以構建兩種類型的軟體包:完整更新軟體包和增量更新軟體包。該工具將 Android 構建系統生成的 target_files .zip 文件作為輸入文件。

完整更新

完整更新是指軟體包將對設備的整個最終狀態(system分區、boot分區和recovery分區)進行更新。只要設備能夠接收軟體包並啟動恢復系統,軟體包就可以安裝所需的版本,而不受設備當前狀態的影響。

示例:使用發佈工具為假設的 msm8953_32 設備構建完整更新:

# first, build the target-files .zip
. build/envsetup.sh && lunch msm8953_32-user
mkdir dist_output
make dist DIST_DIR=dist_output

target_files .zip 包含構建 OTA 軟體包所需的所有內容。

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

ota_update.zip 現已準備就緒,可以發送到測試設備(所有內容均使用測試密鑰進行簽名)。

增量更新

增量更新包含一組要應用於設備上的已有數據的二進位補丁程式。以下原因可能會導致此類更新軟體包非常小:

  • 未更改的文件不需要包含在其中。
  • 更改的文件通常與之前的版本非常相似,因此軟體包中只需包含針對兩個文件之間的不同之處進行的編碼。

只有當設備具有構建相應軟體包所使用的舊版本或源版本時,您才能在設備上安裝增量更新軟體包。要構建增量更新,您需要擁有上一個版本(您要更新的版本)中的 target_files .zip 以及新版本中的 target_files .zip。

./build/tools/releasetools/ota_from_target_files -i PREVIOUS-tardis-target_files.zip dist_output/tardis-target_files.zip incremental_ota_update.zip # make incremental from the older version

該版本與上一個版本非常類似,而且增量更新軟體包(約 1 MB)比對應的完整更新軟體包 (60 MB) 小得多。

僅當設備運行的上一個版本與相應增量更新軟體包的起點版本完全一樣時,才向其分發該增量更新軟體包。如果嘗試在運行其他版本的設備上安裝該增量包,系統將會顯示恢復錯誤圖標。此時用戶只要重新啟動設備,即可回到舊系統;軟體包會先驗證它要更新的所有文件是否已回到之前的狀態,然後再對其執行操作,因此,如果發生上述情況,設備不應留在半升級狀態。

製作升級包

為了減小升級包的大小,我們選擇製作差分包(增量升級包)。

要製作差分升級包,需要先做出兩個全升級包,然後根據這兩個包製作出差分升級包。

編譯系統

製作升級包之前需要先對系統代碼進行整編。編譯之前記得清空out目錄,因為系統編譯不會自動檢查刪除當前版本棄用的文件。

. build/envsetup.sh
lunch msm8953
make clobber
make -j20

編譯完成就會在$OUT目錄下生成所有的img文件。

可以通過printenv查看$OUT指向哪裡。

編譯升級包

使用

make otapackage

編譯結束會在$OUT/obj/PACKAGING/target_files_intermediates/目錄下生成升級用的.zip包。比如:msm8953-target_files-eng.Data.BU.zip

製作差分包

有了升級包,將其拷貝到一個目錄下保存,比如OTA/old,然後對源碼做一些修改,保證有更新。然後clean掉$OUT目錄,再次整編,製作升級包,然後把新的升級包拷貝到OTA/new目錄下。

最後使用ota_from_target_files腳本製作差分包就可以了:

./build/tools/releasetools/ota_from_target_files -i OTA/old/*.zip OTA/old/*.zip OTA/update/update.zip

差分包簽名

使用

make otapackage

生成的包是系統簽過名的。耳機通過腳本做出來的差分包也是簽過名的:

$ unzip update.zip
Archive: update.zip
signed by SignApk
  inflating: META-INF/com/android/metadata
  inflating: META-INF/com/google/android/update-binary
  inflating: META-INF/com/google/android/updater-script
  inflating: META-INF/com/android/otacert
  inflating: META-INF/MANIFEST.MF
  inflating: META-INF/CERT.SF
  inflating: META-INF/CERT.RSA
$ keytool -printcert -file META-INF/CERT.RSA

能夠列印出我們的keystore。

如果手動修改自定義升級包,需要再次簽名

./build/tools/releasetools/ota_from_target_files \
    -k ~/.android-certs/releasekey \
    signed-target_files.zip \
    signed-ota_update.zip

編寫升級包製作腳本

腳本在croot目錄執行,思路是首先製作一個升級包放在OTA/old目錄下,之後每次編譯,都會編譯出升級包放在OTA/new目錄下,製作完差分包後,把新的升級包移動到OTA/old目錄作為下一次升級的基礎包。

#!/bin/sh

OTA_PATH="OTA/"
OTA_OLD="OTA/old/"
OTA_NEW="OTA/new/"
OTA_DIFF="OTA/update/"


create_dir()
{
    if [ ! -d "$1" ]
    then
        mkdir "$1"
        echo "Create $1"
    fi
}

check_dir_empty()
{
    if [ "`ls -A $1`" = "" ]; then
        echo "Couldn\`t find update package in folder $1"
        exit 404
    fi
}

create_dir $OTA_PATH
create_dir $OTA_OLD
create_dir $OTA_NEW
create_dir $OTA_DIFF

#. build/envsetup.sh

make otapackage -j20

# copy this time's build upgrade package to OTA/new
cp $OUT/obj/PACKAGING/target_files_intermediates/*.zip OTA/new

# compare this one to old one to make a diff package
check_dir_empty $OTA_OLD
check_dir_empty $OTA_NEW
./build/tools/releasetools/ota_from_target_files -i $OTA_OLD*.zip $OTA_NEW*.zip OTA/update/update.zip

check_dir_empty $OTA_UPDATE
echo "update.zip created in $OTA_UPDATE"

# put this zip to old folder
mv $OTA_NEW*.zip $OTA_OLD

echo "Finished!"

Ref:
https://blog.csdn.net/mike8825/article/details/47871481
https://source.android.com/devices/tech/ota


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • MongoDB副本集搭建 準備三台伺服器: 10.175.120.131(主節點) 10.175.121.134(副本節點) 10.175.121.136(副本節點) 1.分別在每台伺服器上安裝MongoDB,並通過配置文件啟動服務,配置文件如下: 2.進入MongoDB後臺管理 Shell 3.使 ...
  • oracle服務 參考網址:http://www.oraclejsq.com/jsq/getOracle_jcjc.do?nodeid=010100132 Oracle在window下安裝完畢,會安裝很多服務,如下圖: 1、OracleService+服務名(ORCL): 2、OracleOraDb ...
  • union 連接查詢 連接兩個表後會過濾掉重覆的值 <sql id="condition"> <if test="transType != null"> and trans_type = #{transType,jdbcType=TINYINT} </if> <if test="payChannel ...
  • 以前總結過一篇文章SQL SERVER中什麼情況會導致索引查找變成索引掃描 介紹了幾種索引查找(Index Seek)變成索引掃描(Index Scan)的情形。昨天寫一篇文章的時候,也遇到了一個讓人奇怪的執行計劃。一時沒有想明白為什麼優化器會選擇聚集索引掃描。案例詳情請見SQL Server OP... ...
  • 參考: http://www.sqlservercentral.com/articles/Replication/117265/ 前提: 準備一臺電腦,主機名和以前的分發資料庫一致。並且安裝sql server 恢復步驟: 在新的distribution伺服器上 1.配置distribution,增 ...
  • 筆者目前開發運維的存儲系統的伺服器都跑在SSD之上,目前單機伺服器最大的SSD容量有4T之多。( 公司好有錢,以前在實驗室都只有機械硬碟用的~~ )但SSD本身的特性與機械硬碟差距較大,雖然說在性能上有諸多優勢,但是如果使用的方式方法不對,反而會事倍功半。所以筆者花時間調研了一下固態硬碟的結構與特性 ...
  • 大數據指不用隨機分析法這樣捷徑,而採用所有數據進行分析處理的方法。互聯網時代每個企業每天都要產生龐大的數據,對數據進行儲存,對有效的數據進行挖掘分析並應用需要依賴於大數據開發,大數據開發課程採用真實商業數據源並融合雲計算+機器學習,讓學員有實力入職一線互聯網企業。 今天小編的技術分享詳細學習大數據的 ...
  • 選擇"Tools -> Model Options"後,彈出如下圖所示視窗: 這兩個選項取消勾選 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...