本系列介绍自己理解的基于android P的OTA系统。由于工作需要开始研究,实践经验匮乏,难免有理解不够或者错误之处。还请多多指正,不吝赐教!

1、

本文提及的OTA指的是android手机的基础操作系统、系统分区上安装的只读应用和/或时区规则的无线下载 (OTA) 更新。

根据升级方式不同,分为:A/B(无缝)系统更新(android O新增)、 传统的非 A/B 系统更新、 时区规则更新(Android 8.1 开始支持)。
其中,传统的非 A/B 系统更新 又可以分为 基于文件的ota(android5.0之前) 和 基于块的ota(block , android5.0开始支持,即升级android5.0以上的系统,可以用基于block的ota包)。
块 OTA 不会比较各个文件,也不会分别计算各个二进制补丁程序,而是将整个分区处理为一个文件并计算单个二进制补丁程序,以确保生成的分区刚好包含预期的位数。这样一来,设备系统映像就能够通过 fastboot 或 OTA 达到相同的状态。因为块 OTA 可确保每个设备使用相同的分区,所以它能够使用 dm-verity 以加密的方式为系统分区签名。dm-verity是验证启动相关的,具体的可以查看官网介绍。

根据升级内容不同,又可以分为整包升级和差分升级。
文件和块OTA的区别主要在差分包:系统分区的内容可能会在 adb remount 期间或由于恶意软件而被修改。如果某分区已经被修改,执行基于块的OTA升级就会失败。而对于基于文件的OTA方式,只要当前设备的系统中此差分包要升级的文件没有被修改,就不会有冲突。
相应的,块升级前检查到当前设备分区被修改,就升级失败,系统以旧系统重启运行。而文件OTA虽然能升级成功,但重启运行后可能会有问题。

2、

A/B系统更新 与  非 A/B 系统更新 两者是不兼容的。因为他们对应的系统分区和升级逻辑完全不同。

3、

现在基本用的都是基于块的OTA方式。
android P的代码中关于OTA升级包的制作已经默认只有基于块的OTA和AB系统OTA这两种包的制作流程了。
不再支持基于文件的OTA包的制作。
但,基于AB系统的OTA还不流行,主要是因为它System、Vendor等分区都是两份,占用存储空间太多。

4、

OTA流程:

1)、设备会与 OTA 服务器进行定期确认,并被告知是否有更新可用,包括更新软件包的 URL 和向用户显示的描述字符串。
2)、将更新下载到缓存或数据分区,并根据 /system/etc/security/otacerts.zip 中的证书验证加密签名。系统提示用户安装更新。
3)、设备重新启动进入Recovery模式,引导恢复分区中的内核和系统启动,而非引导分区中的内核。
恢复分区的二进制文件由 init 启动。它会在 /cache/recovery/command 中寻找将其指向下载软件包的命令行参数。
4)、恢复操作会根据 /res/keys (包含在恢复分区中的 RAM 磁盘的一部分)中的公钥来验证软件包的加密签名。
5)、从软件包中提取数据,并根据需要使用该数据更新引导、系统和/或供应商分区。系统分区上其中一个新文件包含新恢复分区内容。
6)、设备正常重启。加载最新更新的引导分区,在最新更新的系统分区中装载并开始执行二进制文件。
7)、作为正常启动的一部分,系统会根据所需内容(预先存储为 /system 中的一个文件)检查恢复分区的内容。如果二者内容不同,则恢复分区会被所需内容重新刷写(在后续引导中,恢复分区已经包含新内容,因此无需重新刷写)。
系统更新完成!

5、还有一点要补充

OTA过程中相关的几种软件包:
(1)、Target包。
这个包可以理解为系统内容资料收集包,它对应了某个版本的软件。里面基本包含了系统的所有内容。是用来生成升级包的中间包。我们每次编译android系统软件,都可以同步生成Target包,特别是发布的软件一定要备份对应的Target包,以便后面升级使用。

(2)、完整升级包。
这个是用来进行系统完整升级的包。任何版本的软件都可以用这个包升级到指定的版本。比如,从android O升级到android P一般会通过完整升级包进行升级。它是通过脚本,从Target包生成的。

(3)、增量升级包。
这个是用来进行增量升级的包。里面一般只包含了一些新版本对比老版本变化了的内容。理所当然的,这种升级包要求只能从指定的版本(版本1)升级到当前新版本(版本2)。它是在版本1 和版本2 对应的Target包基础上生成的。

android P OTA 初探 —— 1、OTA简单介绍相关推荐

  1. 从零开始开发Android相机app(三)简单介绍图像滤镜功能

    目前章节 1.从零开始安卓端相机功能开发(一)了解用什么去开发以及流程 2.从零开始安卓端相机功能开发(二)让我们来开发一个相机 3.从零开始开发Android相机app(三)简单介绍图像滤镜功能 文 ...

  2. Android Fragment(三)ListFragment简单介绍以及Fragment之间通信

    一.Fragment通信简单介绍:Fragments之间是不能够直接通信的,他们之间的通信是通过Activity这个中间件来通信的, 为了让Fragment跟它的Activity通信,我们可以在Fra ...

  3. Android应用的白盒加密简单介绍

    0x00 背景 白盒攻击 白盒攻击者对终端具有完全控制的能力,能够观测和修改程序运行时的内部数据,包括内存信息,磁盘的读写权限等.在程序运行时就可以dump出内存中的数据,从而使运行在内存中的密钥不再 ...

  4. android日记管理,Android日志管理Logger框架的简单介绍

    Android开发中,我们常常用到日志打印.利用系统的Log打印可以满足大部分需求,如果想使用起来更方便一般会在系统Log的基础上再进行封装.比如可以全局定义Tag,亦或是定义一个变量,控制Debug ...

  5. android 事件类,30_Android MotionEvent 类简单介绍

    在自定义 View 的过程中,如果设计到控件的触摸事件处理,我们就需要重写 onTouchEvent() 方法.在这个方法中最重要的一个类就是 MotionEvent类.下面会详细介绍一下这个类的各种 ...

  6. android Mediaplayer各种属性和方法简单介绍

    主要涉及类:MediaPlayer (1) 当一个MediaPlayer对象被创建或者调用reset()方法之后,它处于空闲状态,调用release()方法后处于结束状态 1,一个MediaPlaye ...

  7. Android 系统(136)---OTA 差分升级包的制作

    OTA 差分升级包的制作 OTA 升级是 Android 系统提供的标准软件升级方式. 它功能强大,提供了完全升级.增量升级模式,可以通过 SD卡升级,也可以通过网络升级. 那如何生成差分升级包呢? ...

  8. Android 系统简单介绍

    Android 系统简单介绍 2011年11月20日 写这篇文章的目的是为了给那些刚刚入手安 卓手机的新手们一些参考,希望他们能快速的上手 [第一期]ANDROID基础知识1~20 [第二期]继续泡! ...

  9. Android 系统(229)---OTA

    OTA 更新 正常使用的 Android 设备可以接收和安装系统和应用软件的无线 (OTA) 更新.本部分介绍了更新包的结构以及构建更新包时所用的工具.它适用于希望将 OTA 更新系统用于新的 And ...

  10. 手动刷入Android 4.4.1 KOT49E OTA更新包

    一.Android 4.4 KitKat Google前段时间发布了Android新版本Android 4.4 KitKat,由于我的Nexus 4也是托朋友从US带回来的,所以很快就收到了Googl ...

最新文章

  1. python之模块base64
  2. R语言plotly可视化:plotly可视化累积cumulative直方图(Cumulative Histogram)
  3. MySQL数据类型中DECIMAL的作用和用法
  4. ubuntu下安装zabbix
  5. typeScript的函数实例
  6. android动态设置文本居中显示图片,Android DrawableTextView图片文字居中显示实例
  7. 循环小数与费马小定理
  8. 结对编程项目---四则运算
  9. 比较两个数组,输出不重复的数组
  10. 随想录(fpga处理图像的优缺点)
  11. paip.多线程调用静态方法错乱的解决
  12. Android Studio 里sync下载慢,怎么办?
  13. 现代软件工程 教课心得
  14. UE4 Material 101学习笔记——08-12 凹凸和视差贴图/纹理压缩/布料/体积冰/摇曳树叶
  15. BRAC模型 权限表设计
  16. 人民币首度超过美元!
  17. 微商小白如何有效快速精准引流?哪里能找到精准顾客群体?
  18. java学习-节点1
  19. CSS速成手册(5)
  20. carsim和simulink联合仿真中出现了这种错误,怎么回事?

热门文章

  1. 阵列信号DOA估计系列(三).MVDR/Capon波束形成(附代码)
  2. Android二維碼掃描
  3. 暴雪将终止与网易合作:《魔兽世界》面临在大陆暂停服务
  4. 【Oracle】record varray (associative array 关联数组) table (nested table type 嵌套表类型)和%type、%rowtype的使用详解
  5. Spring Boot 启动成功
  6. Unicode 索引表,编码表,编码范围
  7. 如何解决EDIUS无法打开文件的问题
  8. 【虹科案例】Dimetix 激光测距传感器:筒仓内料位高度的测量
  9. 从SUMSUNG闪存芯片编号识容量
  10. 计算机控制器输入设备的功能是,计算机5大部件之一的控制器的作用是什么?...