OTA常见⽅案分析(差分升级全量升级AB⾯升级Recovery系统升级)
1.全量升级:
  完整的下载新版本固件,下载完成后将固件搬运到APP程序运⾏的位置。(⼀般来说是将APP从⽚外flash搬运到⽚内flash上)。搬运完成后校验通过后重启APP。
2.差分升级:
  利⽤算法,做出原版APP和新版APP程序的差分包,将差分包下载到flash,内部的BootLoader程序在利⽤算法将新版APP合成,合成后在搬运,搬运后校验,重启。
  ⼀般制作出来的差分包只有原包的5%左右。省空间!
服务器端: ⽣成差分包,bsdiff算法
1.对old⽂件中所有⼦字符串形成⼀个字典;宿建德江的意思翻译
2.对⽐old⽂件和new⽂件,产⽣diff string和extra string;
3.将diff string 和extra string 以及相应的控制字⽤zip压缩成⼀个patch包。
设备端: ⽣成new File,bspatch算法
1.接收patch包;
2.解压patch包;
3.还原new⽂件。大学生实习报告
3.原地升级:
相⽐差分升级,合包的过程,直接搬运。
容错率低。
三十而已林有有是谁扮演4.AB⾯升级(AB系统升级)
  Android从7.0开始,引⼊了新的OTA升级⽅式:A/B System Updates
  A/B系统是指设备上有A和B两套可以⼯作的系统(⽤户数据只有⼀份,为两套系统共⽤),我们可以理解为⼀套系统分区,另外⼀套为备份分区。其系统版本可能⼀样,也可能不⼀样;通过升级,可以将旧版本也更新为新版本。当然,设备出⼚时这两套系统肯定是⼀样的。
虞书欣妈妈被限制消费如图所⽰:
A/B 系统更新可带来以下好处:
OTA 更新可以在系统运⾏期间进⾏,⽽不会打断⽤户。⽤户可以在 OTA 期间继续使⽤其设备。在更新期间,唯⼀的⼀次宕机发⽣在设备重新启动到更新后的磁盘分区时。qq网名女生
更新后,重新启动所⽤的时间不会超过常规重新启动所⽤的时间。
如果 OTA ⽆法应⽤(例如,因为刷机失败),⽤户将不会受到影响。⽤户将继续运⾏旧的操作系统,并且客户端可以重新尝试进⾏更新。
如果 OTA 更新已应⽤但⽆法启动,设备将重新启动回旧分区,并且仍然可以使⽤。客户端可以重新尝试进⾏更新。
任何错误(例如 I/O 错误)都只会影响未使⽤的分区组,并且⽤户可以进⾏重试。由于 I/O 负载被特意控制在较低⽔平,以免影响⽤户体验,因此发⽣此类错误的可能性也会降低。
更新包可以流式传输到 A/B 设备,因此在安装之前不需要先下载更新包。流式更新意味着⽤户没有必要在 /data 或 /cache 上留出⾜够的可⽤空间来存储更新包。著名钢琴家
缓存分区不再⽤于存储 OTA 更新包,因此⽆需确保缓存分区的⼤⼩要⾜以应对⽇后的更新。
dm-verity 可保证设备将使⽤未损坏的启动映像。如果设备因 OTA 错误或 dm-verity问题⽽⽆法启动,则可以重新启动到旧映像。
(Android 验证启动不需要 A/B 更新。)
Recovery系统升级
Recovery系统安卓7.0以前传统的OTA⽅式:设备上有⼀个Android主系统和⼀个Recovery系统,Android主系统运⾏时检测是否需要升级,如果需要升级,则将升级的数据包下载并存放到cache分区,重启系统后进⼊Recovery系统,并⽤cache分区下载好的数据更新Android主系统,更新完成后重新启动进⼊Android主系统。如果更新失败,设备重启后就不能正常使⽤了,唯⼀的办法就是重新升级,直到成功为⽌。