Android OTA更新

​ ​ ​ ​  Android设备可以接受和安装系统和应用软件的空中下载更新.设备有一个特殊的带有软件的recovery分区,该分区可以解压下载的更新包并且将他们应用到系统中.

​ ​ ​ ​  这一小节描述了这些包的结构和为了构建他们所提供的工具.主要是为了那些想要在新的Android设备上制作OTA更新系统工作和那些为发行的的设备构建更新包的开发者设计的.OTA更新被设计用于设计底层的操作系统和安装在系统分区的只读app;这些更新不会影响来自应用市场的用户安装的应用程序.

​ ​ ​ ​  这一小节描述的是Android5.x发行版的OTA系统升级.最后我会将其他版本的OTA相关的代码附上.

Android设备更新

Android设备上的flash空间包含下面的几个分区:

boot
包含Linux内核和一个小型的根文件系统(被加载到RAM中).他挂载系统和其他分区,并且启动位于系统分区上的运行时.
system
​包含系统应用和在android开源项目(AOSP)中存在源代码的库文件.在正常操作期间,这个分区是以只读方式被挂载的;他的内容仅仅在OTA更新期间被改变.
vendor
​包含系统应用和在AOSP中不存在源代码的库文件.在正常操作期间,该分区是以只读的方式挂载的;他的内容仅仅在OTA更新期间被改变.
userdata
保存由用户安装的应用的数据.这个分区通常是不能被OTA更新改变的.
cache
​​暂时持有被一些应用所使用的区域(访问这个分区需要特殊的app权限),并且用于存储下载的OTA更新包.其他应用程序使用这个空间,会知道文件会在任何时候消息.一些OTA包安装程序可能会导致这个分区被完全擦除.   ​
recovery
​包含一个完整的Linux系统,包括一个内核和特殊的recovery二进制文件,这些文件读取一个包并且使用他的内容来更新其他分区.
misc
被recovery使用的小型分区来保存一些信息,以防止当OTA包正在被应用的时候设备重启.

一个OTA更新的声明周期

一个典型的OTA更新包含下面的步骤:

  1. 设备使用OTA服务运行常规的检查,并且被可用更新通知,包括更新包的URL和展示给用户的一个描述字符串.
  2. 更新下载到一个cache或者是data分区,并且他的加密签名和位于/system/etc/security/otacerts.zip的证书进行验证.用户被推送来安装更新
  3. 设备重启进入recovery模式,在这个模式中,位于recovery分区的内核和系统被启动,而不是位于boot分区内核启动
  4. Recovery二进制文件被init启动.他寻找位于/cache/recovery/command中的命令行参数,该参数执行下载的包.
  5. Recovery通过位于/res/keys(位于recovery分区的一部分RAM)下的公共钥匙来验证包的加密签名.
  6. 数据从包中提取出来并且用于去更新需要的boot,system和vendor分区.位于system分区的其他新文件之一包含新的recovery分区的内容
  7. 设备正常重启.
    a.  新更新的boot分区被加载,他挂载和开始执行位于新的更新的system分区中的二进制文件
    b. ​作为正常启动的一部分,系统检查recovery分区的内容和需要的内容做对比(之前以文件的形式保存在/system中). 他们是不同的,所以recovery分区被需要的内容写入.(在随后的启动中,recovery分区已经包含新的内容,所以不需要重新写入了.)

系统更新完成了.

迁移从先前的版本

当从Android2.3/3.0/4.0发行版迁移的时候,主要的改变就是所有的设备特定的函数从一套C函数到预定义名称的C++对象的转换.下列的表列举除了实现同样目的的旧函数和新方法.

C function C++ method
device_recovery_start() Device::RecoveryStart()
device_toggle_display()
device_reboot_now()
RecoveryUI::CheckKey()
(also RecoveryUI::IsKeyPressed())
device_handle_key() Device::HandleMenuKey()
device_perform_action() Device::InvokeMenuItem()
device_wipe_data() Device::WipeData()
device_ui_init() ScreenRecoveryUI::Init()

旧函数到新方法的转换应该是非常合理直接的.不要忘记添加一个新的make_device()函数来创建和返回一个新的设备子类的实例.

android OTA更新相关推荐

  1. android ota更新app,企业 OTA 更新  |  Android 开源项目  |  Android Open Source Project

    Android 兼容性定义文档 (CDD) 可更新软件要求设备实现 SystemUpdatePolicy 类.SystemUpdatePolicy 可让设备所有者 (DO) 应用(如果存在)控制系统更 ...

  2. (9)Android之路====Android系统OTA更新

    本次介绍Android OTA更新,AOSP官方教程的地址是:https://source.android.google.cn/devices/tech/ota/ 另外可以参考:https://blo ...

  3. android ota功能,支持 OTA 更新  |  Android 开源项目  |  Android Open Source Project

    为支持无线下载 (OTA) 更新,引导加载程序必须能够在启动期间访问恢复 RAM 磁盘.如果设备使用未经修改的 AOSP 恢复映像,引导加载程序会读取 misc 分区的前 32 个字节:如果数据与 b ...

  4. Android下的配置管理之道之对 OTA 更新包进行签名

    对要发布的版本进行签名 Android 操作系统映像在两个地方使用加密签名: 映像中的所有 .apk 文件都必须经过签名.Android 软件包管理器通过下列两种方式使用 .apk 签名: 更换应用时 ...

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

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

  6. android ota 版本校验,OTA升级签名校验简析

    1. 概要 如果进行过OTA升级的开发者,都或多或少有这样的疑问,如何确定该OTA升级包是可以信任的呢?这其中其实涉及到一个签名验证的流程. 2. 签名生成 在生成正规的固件时,一般会运行生成新key ...

  7. Android OTA升级(1):编译升级全包

         Android原生系统中就已经支持OTA升级.所谓OTA升级就是通过空中接口获取升级包,然后更新系统固件.一般地,升级包无论如何获取,哪怕是直接TCard本地升级,也被称为OTA升级.    ...

  8. android系统更新原理简介

    简介: Android系统更新简而言之就是将升级包从服务器下载到本地然后对当前系统进行升级的过程,主要包括三大块:升级包.应用层.recovery层. 主要功能流程如下如所示: 升级包: 版本编译完成 ...

  9. Android OTA升级原理和流程分析(五)---update.zip包从上层进入Recovery服务

    转载自:http://blog.chinaunix.net/uid-22028566-id-3533854.html 文章开头我们就提到update.zip包来源有两种: 一个是OTA在线下载(一般下 ...

最新文章

  1. 机器学习 欧式距离及代码实现
  2. SQL like 模糊查询
  3. drill apache_Apache Drill 1.4性能增强的简要概述
  4. 堆排序 Heap Sort
  5. 再说过程和结果的关系
  6. HTML中嵌入FLV视频文件
  7. VS各个版本的密钥及下载地址
  8. AtCoder - ABC 160 - DE(贪心)
  9. 【秋无痕作品】Windows7SP1(32位)+XPSP3集成安装版V201108
  10. Excel多列筛选同一个数据
  11. JavaScrpit+Html实现日期时间启动、停止操作(应用场景:计时器、秒表)
  12. 制坯系列-Golang专题-chan
  13. 购买阿里云域名绑定ip教程
  14. php开发人工智能,php可以开发人工智能吗
  15. 计算机英语大专期末考试,电子科技大学《大学英语2(专科)》20春期末考试【标准答案】...
  16. Authentication token manipulation error问题解决
  17. 理解 OpenStack + Ceph (3):Ceph RBD 接口和工具 [Ceph RBD API and Tools]
  18. Linux之 解决 Linux 性能瓶颈的黄金 60 秒
  19. Lintcode 2.尾部的零
  20. C++学习记录---(6)类和对象-----友元和运算符重载

热门文章

  1. 【思维导图】她提出了“计算思维”,并解释我们为什么要学会跟机器对话 | 造访·周以真【整理自公众号:造就】
  2. 正确使用自旋锁、互斥锁
  3. 道友自诉:入职中软一个月(外包华为)就离职了!
  4. 配置VS2019 执行cu文件
  5. 报表开发工具 Stimulsoft Reports V2022.3.5系列发布!
  6. JAVA Web day01--- Android小白的第一天学习笔记
  7. 关于web出现此问题:index:25 Uncaught ReferenceError: delFruit is not defined at HTMLImageElement.onclick
  8. 50 行代码爬取链家租房信息
  9. 一个简单的格式化信函生成器
  10. 红米AirDots蓝牙耳机如何重置并进行双耳连接