天天看點

基于Android Q的OTA包制作/簽名(包含差分包)

先介紹一下關于OTA

什麼是OTA?

通俗的說,OTA更新是指蘋果手機通過無線網絡下載下傳更新資料包,之後直接安裝更新的總稱。通常我們利用iPhone手機無線wifi網絡登入官方網站找到手機更新所需要的資料包或者直接在手機中找到更新入口進入下載下傳安裝等,主要包括iphone4s、iphone4、ipod touch、ipad等産品均可以實作OTA更新,使用過iPhone手機的朋友都知道,一般我們将手機與資料線與電腦連接配接後,一般是連接配接itunes實作軟體管理、安裝或者更新等。但這裡的OTA更新降調的是無線更新,借助無線wifi或者GRRS、WAP、CDMA1XD等無線技術完成相關軟體與系統的更新。
簡言之:手機系統更新包

什麼是OTA全包

OTA全包指的是系統大版本更新,更新整個系統,通常OTA包的大小都是1G以上.

什麼是OTA差分包

既然有全包 就有差分包,差分包指的是小版本更新,在原有的代碼和軟體中更新一部分東西,通常大小不超過1G,具體大小看更新内容

進入正題

1.OTA差分包編譯大法

  1. 使用

    make otapackage

    編譯整包,拷貝out目錄下的OTA整包,再拷貝

    out/target/product/dl35/obj/PACKAGING/tart.

    下的差異包,兩個包都放進源代碼目錄
  2. 對代碼改動一些,使得我們更新後能看得出來差異,再執行

    make otapackage

    編譯整包,拷貝

    out/target/product/dl35/obj/PACKAGING/tart.

    目錄下的差異包到源代碼目錄

    生成的結果如下:

    基于Android Q的OTA包制作/簽名(包含差分包)
    制作指令:
//進入AOSP源碼目錄下,執行
./build/tools/releasetools/ota_from_target_files -v -p out/host/linux-x86 -k ./vendor/{project}/{projcts}/releasekey/us_gms/releasekey -i OTA/old.zip OTA/new.zip old_to_new.zip
    或者 
./build/tools/releasetools/ota_from_target_files -v -p out/host/linux-x86 -k ./vendor/{project}/{project}/releasekey/us_gms/releasekey -s vendor/mediatek/proprietary/scripts/releasetools/releasetools.py -i OTA/old.zip OTA/new.zip update2.zip
           

以上代碼即可生成差分包,即可進行卡刷。下面的步驟可看可不看

2.OTA重新簽名

第一個路徑是需要簽名的OTA包,第二個是重新生成的OTA包

java -Xmx1024m -Djava.library.path=out/host/linux-x86/lib64 -jar out/host/linux-x86/framework/signapk.jar -w vendor/{projects}/{projects}/releasekey/us_gms/releasekey.x509.pem vendor/{projects}/{projects}/releasekey/us_gms/releasekey.pk8 ~/NEWOTA/update.zip ~/NEWOTA/update_with_new_key.zip
           

3.OTA密鑰制作

Android 源碼包裡面提供了生成key的工具,development/tools/make_key, 指令如下:
 ./make_key releasekey '/C=CN/ST=ShangHai/L=ShangHai/O=XXX/OU=XXX/CN=XXXV/emailAddress=XXX' rsa
 ./make_key platform  '/C=CN/ST=ShangHai/L=ShangHai/O=XXX/OU=XXX/CN=XXXV/emailAddress=XXX'  rsa
 ./make_key shared '/C=CN/ST=ShangHai/L=ShangHai/O=XXX/OU=XXX/CN=XXXV/emailAddress=XXX'   rsa
 ./make_key media    '/C=CN/ST=ShangHai/L=ShangHai/O=XXX/OU=XXX/CN=XXXV/emailAddress=XXX' rsa