因为公司业务中涉及的面比较广泛,虽然都是提供移动终端PDA,但是使用的场景很多时候是不同的。例如,有提供给大型物流仓储的设备,对这样的设备必需具备扫码功能,键盘(戴手套操作),耐用(rug),无线漫游,续航久,支持电池的热插拔。也有提供给零售行业的终端,那这种类型的产品的就需要相对轻薄,具有扫码,大屏,全屏,无线,5G ,拍照(高清晰度),支持电池热插拔等功能。甚至有提供给车载的平板。针对,这些不同类型的设备,为了降低开发/维护成本,开发设计初期,往往都是基于一种类型的平台(e.g Qualcomm sdm660, sdm4490)进行开发,所使用的代码(Android版本)也需要某个大版本Android进行多产品兼容,也就是One OTA for Multi-SKU。
从下面的信息,大概可以推断,从Android11开始,Android才开始支持 OTA packages for multiple SKU。之前都是一个OTA包支持一个产品类型,例如支持Nexus5或者Pixel11。而我们从Android7开始就开始支持了One package for multi-sku了,还是很厉害的。
来自Android官网的一些信息:
为了更好的理解项目上的One OTA设计,搞清楚Android的OTA是个什么内容很有必要。除了Android官网的一些信息(相对比较简单)https://source.android.com/docs/core/ota,另外还找到了一个很清楚的说明文章:Android OTA Update Mechanism
简单提一些Android OTA的发展过程:
阶段一: 比较老的设备,例如Android7/8/9, 沿用的是Non-A/B system updates;具体信息为https://source.android.com/docs/core/ota/nonab
简单的讲就是,进入Recovery(一个独立运行的系统,可以理解为非常原始可运行的最小系统,主要功能是进行,原本系统的分区替换,系统修复)。
阶段二:较新的设备上Google使用了无缝A/B系统升级https://source.android.com/docs/core/ota/ab
这时候我们就不需要进入Recovery而进行工作分区的更新了。是一边工作,一边升级,只需要一次的reboot。但是,我们的磁盘(emmc或者ufs)需要有两个启动分区,有两个slot。如单个系统分区6G,那么为了支持A/B分区,我们就需要预留12G的系统空间。
阶段三:最后, 到Anroid12开始,Google开始应用Virtual A/B进行OTA的优化升级,减少磁盘的使用,细节部分可以参考https://source.android.com/docs/core/ota/virtual_ab
补充一个动态分区的概念,经常做Android系统开发/Framework开发的朋友肯定知道,
那么针对同平台多产品的One OTA需要注意哪些方面?下次内容在叙。