Android M差分パッケージの作成の流れ

5209 ワード

ネット上で差分パッケージを作る流れを参考にしていたが、なかなか起きられず、様々な模索とテストを経て、android M上でAndroid M差分パッケージを正常に動作させることができた.迷っているあなたに捧げたい.
Android差分パッケージ(update.zip)は主にAndroid OSのOTA updateに用いられる.AndroidのOTA更新には主に2つの更新が含まれています:1)FULL OTA 2)Diff OTA更新.FULL OTAはパッケージ全体の更新であり、diff OTAは前回のupdateに基づいている.zipの違いの更新(すなわち、差分パケットupdate.zipには主にpatchが含まれています).したがって、OTA差分パッケージの更新を行う際には、FULL OTA更新、更新のupdateを必ず1回行う.zipはあなたが差分パッケージを作ったBaseバージョンです.
Android M差分パッケージの作成の詳細について説明します.
1.ベースバージョンのupdateを作成する.zip
$ source build/envsetup.sh
$ lunch xxx
$ make otapackage

コンパイルが完了すると、2つのファイルを保存する必要があります:1)初めてFULL OTAが更新したBaseバージョンのupdate.zipこのファイルのパスは、out/target/product/$(product_name)/update.zip 2)差分パケットのbaseバージョンを作成するためのupdate.zipこのファイルのパスは、out/target/product/$(product_name)/obj/ACKAGING/target_です.files_intermediates/$(product_name)-target_files-eng.root.zipコマンドmake otapackageの後の中間生産物で、最も原始的なアップグレードパッケージです.差分パッケージの作成に必要な書類が含まれています.注意:差分パケットを作成するにはout/target/product/$(product_name)/update.zip. そうでなければ対応する差分バッグは作れません.私たちはまずout/target/product/$(product_name)/obj/PAKAGING/target_files_intermediates/$(product_name)-target_files-eng.root.zipはBaseと名付けられた.zip.
 $ mv  $(product_name)-target_files-eng.root.zip   Base.zip

2.Android OSのソース部分を修正する.
テストのために、私たちは1つのappにlogを加えるだけです.d(「###」)はdebugに用いる.
3.新しいバージョンupdateを作成する.zip
   $  source build/envsetup.sh
   $ lunch xxx
   $ make otapackage   

1とは異なり、out/target/product/$(product_name)/obj/PAKAGING/target_files_intermediates/$(product_name)-target_files-eng.root.zip. 私たちはそれをnewと名付けました.zip.
  $ mv  $(product_name)-target_files-eng.root.zip   New.zip   

4.build/tools/releasetools/ota_の変更from_target_files.pyスクリプト
system_items.GetMetadata(target_zip)
system_items.Get("system").SetPermissions(temp_script)

変更後:
system_items.GetMetadata(target_zip)
#system_items.Get("system").SetPermissions(temp_script)
system_items.Get("system").SetPermissions_NonSelinux(temp_script) 

そうでなければ、更新時にエラーが発生します.
5.修正したスクリプトを使用して差分パッケージを作成する:
$ ota_from_target_files.py  -i     Base.zip  New.zip  update.zip

完成したら、私たちの差分バッグは成功しました.
6.1で生成するupdateを使用する.zipにてFULL OTA更新
update.zipは、1で生成するout/target/product/$(product_name)/update.zip.
7.5で生成するupdateを使用する.zipはインクリメンタル更新すればよい.
これでAndroid Mの差分パッケージの更新が完了しました.次のエラーメッセージについて説明します.
a).
file "/system/etc/recovery-resource.dat" doesn't have any of expected sha1 sums; checking cache
failed to stat "/cache/saved.file": No such file or directory
failed to load cache file
script aborted: "/system/etc/recovery-resource.dat" has unexpected contents.

このエラーはapply_patch_check()印刷で、この関数がアップグレード条件に合致するかどうかをチェックし、sha値を判断し、A状態またはC状態であることを確認します.通常、このメッセージを印刷するのは更新の条件を備えていないことです.例えば、FULL OTAの更新を事前に行わずにDIFFOTAの更新を直接行うと、このエラーが印刷されます.
b).
script aborted: set_metadata_recursive: some changes failed
Symlinks and permissions...
ApplyParsedPerms: lsetfilecon of /system/lost+found to u:object_r:system_file:s0 failed: Operation not supported on transport endpoint
set_metadata_recursive: some changes failed
E:Error in /cache/update.zip
(Status 7) 

これを4通りに修正したら、問題は解決されました.Qing 2017/08/31
注:selinuxの定義がない人がいる場合は、このスクリプトを参照してください.添付ファイルは次のとおりです.https://github.com/jwzl/ota_from_target_files.git