Android OTA实现流程分析

  • OTA升级概述
  • 制作升级包
    • 自动生成update.zip升级包
    • 手动生成update升级包
    • 增量包目录结构
  • 升级包写入设备分区
    • Android的三种工作模式
    • Recovery升级模式

OTA升级概述

OTA(Over-the-AirTechnology)是指手机终端通过无线网络下载远程服务器上的升级包,对系统或应用进行升级的技术。有关网络部分不做过多讨论,本文重点放在系统升级这一概念上。

目前主要分为两大类:

  • 按照升级的方式可以分为:T卡升级和网络升级
  • 按照包的内容可以分为:增量升级和整包升级

那么对于设备来说我们需要考虑几点:

  • 升级包是怎么产生的
  • 升级包是怎么写入设备对应的分区的。

制作升级包

对于Android系统升级包制作主要分两种:

  • 一种是通过命令自动产出全包和增量包;
  • 另一种是在之前升级包的基础(通常是增量包)上进行修改/增加新的内容;
    实际上第二种是对第一种的补充方式。

自动生成update.zip升级包

这种方式就是通过Android提供的编译指令进行自动制作。
该方法主要概括为以下几个步骤:

make  # 先编译Android源码
make otapackage  # 开始制作ota全量包
# 制作差分包, 这一步需要准备基包base.zip, target_files.zip是刚刚生成的包, update.zip就是基于前面两个包产生的增量包,用于后面升级使用
./build/tools/releasetools/ota_from_target_files -k build/target/product/security/testkey -s vendor/mediatek/proprietary/scripts/releasetools/mt_ota_from_target_files --block -i base.zip target_files.zip update.zip

注:
以上步骤是制作升级包的大概步骤,具体细节请各位自行搜索,网上资料实在太多了。

手动生成update升级包

这种模式通常情况下在改动很小或者只更新了某几个APK应用程序,不想再重新make otapackage的情况下采用的。
该方法主要概括以下几个步骤:

# 1.将现有的update.zip解压
# 2.将改动的apk替换到system/app或者其他具体的工作目录中
# 3.重新打包成update.zip, 打包的时候不能有二级目录,即解压后直接就是内容
# 4.对新的update.zip重新签名 - 必须做, 重新签名的指令如下:
java -Djava.library.path=out/host/linux-x86/lib64 \-jar out/host/linux-x86/framework/signapk.jar \-w build/target/product/security/testkey.x509.pem \build/target/product/security/testkey.pk8 update.zip update-new.zip

注:
1.以上步骤是制作升级包的大概步骤,具体细节请各位自行搜索,网上资料实在太多了。
2.网上有的资料提供的签名指令,没有增加-Djava.library.path=out/host/linux-x86/lib64这一句,导致签名失败,如果有遇到签名失败问题,可以加上试试。

增量包目录结构

制作好的update.zip结构通常如下:不同的平台可能有稍许差异
├── lk.img
├── META-INF
│ └── com
│ ├── android
│ │ ├── metadata
│ │ └── otacert
│ └── google
│ └── android
│ ├── update-binary
│ └── updater-script
├── odmdtbo.img
├── patch
│ └── boot.img.p
├── scatter.txt
├── system.new.dat
├── system.patch.dat
├── system.transfer.list
├── tee.img
├── type.txt
├── vendor.new.dat
├── vendor.patch.dat
└── vendor.transfer.list
其中有两个文件需要说明一下,这个和后面升级会用到:

  • update-binary 是一个二进制文件,相当于一个脚本解释器,它定义描述了updater-script中所使用的语法行为,即最终实现的操作。该文件在Android源码编译后被放置在out/target/product/<TARGET_TYPE>/system bin/updater,在做make otapackage时会将updater重命名为update-binary并放置到META-INF\com\google\android这个目录中。
    源码位置在:bootable\recovery\updater中
  • update-script 此文件是一个脚本文件,具体描述了更新过程。我们可以根据具体情况编写该脚本来适应我们的具体需求。 它的语法是在update-binary中定义的。这个脚本也是我们后续会被改动的,比如我们需要增加一个自定义的更新,我们就可以手动增加重新打包签名。

升级包写入设备分区

这里也是最重要核心的地方,设备是如何开始升级的。首先我们需要知道Android设备的几种工作模式

Android的三种工作模式

主要有三种:

  • 正常模式
  • Recovery 模式
  • Fastboot模式


由上图可以知道如何进入不同的模式:

  • 正常启动模式: 用户什么都没有操作,开机将自动进入该模式。
  • Recovery 模式: 可以有两种种方式:
    [1] 开机时按下home+power组合键
    [2] 在正常模式下通过reboot recovery命令进入
  • fastboot:快速刷机模式:开机时按下camera+home组合键

Recovery升级模式

在前面我们制作的ota升级包就是需要在该模式下完成升级操作。

正常的升级流程如下图:

这是一个从APP一路执行到底层的大概流程。在这我们只需要通过命令模拟从APP到framework的过程来验证recovery 升级。
首先需要知道APP - Framework做了什么事情;简单可以概括为:从APP接收到升级包并获取完整路径,给到framework,然后framework将进行校验是否合法,然后再对/cache/recovery目录相关历史记录做清除操作,并写入接收到的完整路径到command文件中,最后通过reboot recovery让设备重启进入升级模式。
所以我们只需要模拟这一过程就可以:

  • 首先提供上述update.zip升级包放入到/sdcard/update.zip中
  • 其次 写入升级包名到 /cache/recovery/command - 格式为: --update_package=/sdcard/update.zip
  • 其次清除/cache/recovery目录中的历史信息如: log, sqlite等
  • 最后通过reboot recovery指令让设备重启进入升级模式

这样整个升级将完成了。本节只是让同学初步认识到OTA升级的基本过程。
对于Recovery模式,是如何进行升级操作的,它的具体过程是如何?

接下来我们将进行分析Recovery服务流程细节请看下篇分析

Android OTA升级原理 - 实现流程(整理一)相关推荐

  1. android ota升级涉及的分区,Android OTA升级原理 - 实现流程(整理一)

    Android OTA实现流程分析 OTA升级概述 制作升级包 自动生成update.zip升级包 手动生成update升级包 增量包目录结构 升级包写入设备分区 Android的三种工作模式 Rec ...

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

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

  3. android ota升级服务,android 标准OTA升级流程

    标准的OTA升级流程包括一下几个步骤: 1.Android设备首先会与OTA服务器进行交互,如果有更新会推送给客户.推送的信息常常会包含OTA更新包的下载地址和一些版本信息. 2.Update程序会将 ...

  4. Android Recovery升级原理

    文章目录 Android Recovery升级原理 声明 摘要 1. Recovery相关概念 2. Android系统的启动模式 2.1 Android 各个分区介绍 2.2 Android的启动模 ...

  5. Android OTA 升级专栏文章导读

    Android OTA 升级专栏文章导读 文章目录 Android OTA 升级专栏文章导读 1. 快速入口 2. 简要介绍 1. 基础入门:<Android A/B 系统>系列 2. 核 ...

  6. Android OTA 升级之五:updater

    2011-03-15 20:14 4164人阅读 评论(7) 收藏 举报 Android OTA 升级之五:updater 作者: 宋立新 Email:zjujoe@yahoo.com 前言 可以说, ...

  7. Android OTA 升级

    原文:http://fanwei51880.blog.163.com/blog/static/32406740201172325219944/ Android OTA升级之一:编译升级包 作者: 宋立 ...

  8. 【转】Android OTA 升级之一:编译升级包

    Android OTA 升级之一:编译升级包 作者: 宋立新 Email : zjujoe@yahoo.com 前言 OTA 升级是 Android 系统提供的标准软件升级方式. 它功能强大,提供了完 ...

  9. Android OTA 升级之三:生成recovery.img

    Android OTA 升级之三:生成recovery.img 作者: 宋立新 Email:zjujoe@yahoo.com 前言 得到了ota升级包后,我们就可以用它来升级系统了.Android 手 ...

最新文章

  1. PHP开发中,让var_dump调试函数输出更美观 ^_^#
  2. phpHiveAdmin开发两个月记录
  3. Fedora 13 Alpha测试手记横空出世
  4. NopCommerce开源项目中很基础但是很实用的C# Helper方法
  5. [系统安全] 三十一.恶意代码检测(1)恶意代码攻击溯源及恶意样本分析
  6. python扫盲系列--(4)
  7. mac idea在mybatis xml文件里引入全限定类名报红解决
  8. CF1178H Stock Exchange
  9. java合并多个表格为一个_多个DataTable的合并成一个新表
  10. php 判断赋值 简写,PHP IF判断简写
  11. Balanced Numbers数位dp
  12. 正则分割 oracle,Oracle通过正则表达式分割字符串 REGEXP_SUBSTR
  13. 启发式算法、寻路算法A*算法
  14. atoi函数_linux网络编程之POSIX 消息队列 和 系列函数
  15. Lodop简短问答客户反馈篇 及排查步骤 及注册相关
  16. android 炫酷图案解锁,16个超级漂亮的手机锁屏图案,炫酷到飞起,总有一款适合你...
  17. 服务器运维 考什么证书,腾讯云服务器运维高级工程师认证(TCP)证书有效期、考试内容、费用...
  18. 魔兽按键精灵 V2.0(修正1)
  19. 你想收到中国向世界发出的第一封电子邮件吗
  20. 第一个Andriod应用

热门文章

  1. LogBack 动态修改日志级别
  2. mp3 在线编辑, 音效下载
  3. 【无为则无心Python基础】— 11、Python的注释
  4. 计算机组成原理考试试题,计算机组成原理期末考试试题1
  5. 新斗罗大陆手游服务器维护,《新斗罗大陆》新ss魂师天青龙牛天修复公告
  6. 电路结构原理_数字显示式石英电子表的结构与原理
  7. uc浏览器下载的视频怎么导出来?导出方法分享
  8. 【瑞萨RA_FSP】SCL UART 串口通信
  9. Django+python+web开发的思维导图式辅助记忆笔录
  10. 显式预测控制(Explicit MPC)