android的A/B到底是什么?OTA升级又是什么?

简介: android的A/B到底是什么?OTA升级又是什么?

最近在做AVB校验,学习的时候就看到AVB里面有A/B系统。就挺纳闷这个是什么?

这个有什么用?在学习的时候看到了这个和OTA升级有关系?

下面看看为什么需要A/B系统,A/B是什么?

在这里、感谢这个时代的便捷性,感谢前辈精彩的blog,原文内容更加丰富哦。

为什么需要A/B系统?

什么是OTA升级

这就得了解一下OTA升级。

OTA(Over-the-AirTechnology)升级是指手机终端通过无线网络下载远程服务器上的升级包,对系统或应用进行升级的技术。

想想你每次手机升级是不是推送就来了,没说让你把手机寄回去嘛。

OTA(Over The Air)是一项基于短消息机制,通过手机终端或服务器(网上)方式实现SIM卡内业务菜单的动态下载、删除与更新,使用户获取个性化信息服务的数据增值业务(简称OTA业务),是通过移动通信(GSM或CDMA)的空中接口对SIM卡数据及应用进行远程管理的技术。

通过OTA空中下载技术,手机用户只要进行简单操作,就可以按照个人喜好把网络所提供的各种业务菜单利用OTA机制下载到手机中,并且还可以根据自己的意愿定制具体业务。

(技术还是要结合具体得场景会更加容易理解,脑子里能感性的想到手机升级的场景就好了)

二、ota升级方式有哪几种

1、乒乓升级

两个大小相同的分区APP1、APP2,如果当前在APP1分区执行代码,升级时就把固件下载到APP2分区。升级成功后设备重启,模组切换到APP2分区执行;下次再升级就切换到APP1分区,一直这样轮询。

2、拷贝升级

两个大小相同的分区APP、OTA。 APP分区存放要执行的固件,当OTA升级时会先把OTA数据包写入OTA分区,然后再将OTA数据搬移到APP数据区,最后从APP数据区启动执行。

3、压缩升级

两个大小相同的分区APP、OTA。 APP分区存放要执行的固件,OTA分区存放OTA数据的压缩包,bootload启动时会先将OTA压缩包解压,再搬移到APP分区。

其中,APP分区会比OTA分区要大,可以大大节省空间。

4、差分升级

差分升级又叫增量更新,是将旧版本与新版本的数据文件做差分,得到升级部分的补丁即差分包;用户下载了差分包之后,将旧版本数据与差分包进行组合,以得到新版本的数据文件,多数采用BSDiff差分算法。(这个游戏里面很多都是这样)

然后当我们把上面的APP1、APP2、OTA分区切成A/B两个分区的时候,是不是就好理解了。

下面进入A/B分区

A/B系统

A/B系统是什么?

顾名思义,A/B系统就是设备上有A和B两套可以工作的系统(用户数据只有一份,为两套系统共用),简单来讲,可以理解为一套系统分区,另外一套为备份分区。其系统版本可能一样;也可能不一样,其中一个是新版本,另外一个旧版本,通过升级,将旧版本也更新为新版本。当然,设备出厂时这两套系统肯定是一样的。

之所以叫套,而不是个,是因为Android系统不是由一个分区组成,其系统包括boot分区的kernel和ramdisk,system和vendor分区的应用程序和库文件,以及userdata分区的数据

A/B系统实现了无缝升级(seamless updates),有以下特点:

  • 出厂时设备上有两套可以正常工作的系统,升级时确保设备上始终有一个可以工作的系统,减少设备变砖的可能性,方便维修和售后。
  • OTA升级在Android系统的后台进行,所以更新过程中,用户可以正常使用设备,数据更新完成后,仅需要用户重启一次设备进入新系统(这场景熟不熟悉)
  • 如果OTA升级失败,设备可以回退到升级前的旧系统,并且可以尝试再次更新升级。

A/B系统前身-Android主系统和一个Recovery系统

Android 7.0上传统OTA方式和新的A/B系统方式都存在,只是编译时只能选择其中的一种OTA方式。由于A/B系统在分区上与传统OTA的分区设计不一样,二者无法兼容,所以7.0以前的系统无法通过OTA方式升级为A/B系统。

在Android 7.0之前,设备上有一个Android主系统和一个Recovery系统,Android主系统运行时检测是否需要升级,如果需要升级,则将升级的数据包下载并存放到cache分区,重启系统后进入Recovery系统,并用cache分区下载好的数据更新Android主系统,更新完成后重新启动进入Android主系统。如果更新失败,设备重启后就不能正常使用了,唯一的办法就是重新升级,直到成功为止。(想起当年按着开机键和音量键,进入recovery模式没)

A/B系统的不一样

与传统OTA方式相比,A/B系统的变化主要有:

1、系统的分区设置

  • 传统方式只有一套分区
  • A/B系统有两套分区,称为slot A和slot B

2、跟bootloader沟通的方式

  • 传统方式bootloader通过读取misc分区信息来决定是进入Android主系统还是Recovery系统
  • A/B系统的bootloader通过特定的分区信息来决定从slot A还是slot B启动

3、系统的编译过程

  • 传统方式在编译时会生成boot.img和recovery.img分别用于Android主系统和Recovery系统的ramdisk
  • A/B系统只有boot.img,而不再生成单独的recovery.img

4、OTA更新包的生成方式

  • A/B系统生成OTA包的工具和命令跟传统方式一样,但是生成内容的格式不一样了

由于内容较多,分多篇文章来详细分析整个A/B系统。(大家点击参考链接二进入前辈原文全系列学习,我只是做个学习笔记)

本文主要从分区和总体操作流程上来描述A/B系统,也可以参考Android官方对A/B系统的说明:“A/B System Updates”。

A/B系统的优势

整个A/B系统的升级更新在后台完成,升级中任何时间点都是可中断和可恢复的,相当于下载中的断点续传,更新操作对用户是透明的,在不影响用户操作的情况下完成升级。

设备可以设置数据下载、更新升级的场景和策略,例如:

只有在WiFi连接时才下载数据
电量较少时不下载数据、不进行更新
用户没有活动时才进行数据下载和更新等
具体有哪些策略依赖于开发者和用户的设置。

到这里大家应该有个感性的认识对于A/B系统,这就是本文的目的。对于更多的详细的内容,大家可以访问参考链接二继续学习。

参考链接:

https://m.eefocus.com/e/510559

https://blog.csdn.net/guyongqiangx/article/details/71334889

目录
相关文章
|
7月前
|
Web App开发 移动开发 小程序
"项目中mpaas升级到10.2.3 适配Android 14之后 app中的H5以及小程序都访问不了,
"项目中mpaas升级到10.2.3 适配Android 14之后 app中的H5以及小程序都访问不了,显示“网络不给力,请稍后再试”,预发内网版本不能使用,线上版本可以正常使用,这个是什么原因啊,是某些参数没有配置吗,还是说是一些参数改错了?
118 2
|
7月前
|
数据库 Android开发
Android 通过升级SettingsProvider数据强制覆盖用户的设置项
Android 通过升级SettingsProvider数据强制覆盖用户的设置项 【5月更文挑战第7天】
203 5
|
4月前
|
安全 Java Android开发
【Android P】OTA升级包定制,移除不需要更新的分区,重新打包签名
如何解压OTA升级包、编辑升级包内容(例如移除不需要更新的分区)、重新打包、签名以及验证OTA文件的过程。
366 2
【Android P】OTA升级包定制,移除不需要更新的分区,重新打包签名
|
4月前
|
编解码 Android开发 UED
【性能狂飙!】揭秘Android应用极速变身秘籍:内存瘦身+用户体验升级,打造丝滑流畅新境界!
【8月更文挑战第12天】构建高效Android应用需全方位优化,尤其重视内存管理和用户体验。通过弱引用降低内存占用,懒加载资源减少启动负担。运用Kotlin协程确保UI流畅不阻塞,响应式设计适配多屏需求。这些策略共同提升了应用性能与用户满意度。
58 1
|
5月前
|
Dart API 开发工具
Flutter Android 14 强制升级说明 2024
猫哥我也是心大,当群友问我 flutter 如何升级编译 Android 14 时才发现需要提交新版本。
121 0
Flutter Android 14 强制升级说明 2024
|
6月前
|
存储 Linux 开发工具
Linux手动升级替换Android Studio
【6月更文挑战第22天】
137 8
|
6月前
|
Android开发
如何 将Android Studio升级至最新版(4.0)
如何 将Android Studio升级至最新版(4.0)
1062 0
|
7月前
|
存储 缓存 Android开发
Android系统分区与升级
Android系统分区与升级
125 4
|
7月前
|
Android开发
Android Studio或IDEA 升级后 不提示错误问题
Android Studio或IDEA 升级后 不提示错误问题
254 1