1.獲取update.zip文件
2.驗證簽名文件
3.通過installPackage接口升級,往/cache/recovery/command中寫入recoveryELF的執行參數
4.系統重新啓動進入recovery界面(判斷/cache/recovery 是否有cmd文件)
5.try_update_binary執行升級腳本
6.finish_recovery 重啓
app執行安裝/重置/清楚緩存操作調用代碼文件frameworks/base/core/java/android/os/RecoverySystem.java
不同的操作使用不同的方法:
安裝升級包 -------- installPackage
清除用戶數據------ rebootWipeUserData
清楚緩存 ----------- rebootWipeCache
上面的所有操作都是往/cache/recovery/command文件中寫入不同的命令,在進入recovery後(recovery.cpp)對command的關鍵字進行判斷,執行相應的操作,下文會詳細講解,這裏先簡單提及
根據升級方式不同,分爲:A/B(無縫)系統更新(android O新增)、 傳統的非 A/B 系統更新、
A/B 系統更新,也稱爲無縫更新;確保在OTA(Over-The-Air)升級期間,仍然在磁盤上保留有一份可以正常啓動的系統。
用於確保可運行的啓動系統在無線 (OTA) 更新期間能夠保留在磁盤上。這樣可以降低更新之後設備無法啓動的可能性。
A/B 系統更新使用稱爲 update_engine 的後臺守護進程以及兩組分區。這兩組分區稱爲插槽,通常爲插槽 A 和插槽 B。系統從其中一個插槽(“當前插槽”)運行,但運行的系統不會訪問“未使用的”插槽中的分區(用於正常操作)。
ab升級方式中boot和system均保留了兩份,所以對設備的存儲容量要求會比傳統升級方式要大的多。