Android OTA升级原理 - 实现流程(整理一)
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升级原理 - 实现流程(整理一)相关推荐
- android ota升级涉及的分区,Android OTA升级原理 - 实现流程(整理一)
Android OTA实现流程分析 OTA升级概述 制作升级包 自动生成update.zip升级包 手动生成update升级包 增量包目录结构 升级包写入设备分区 Android的三种工作模式 Rec ...
- Android OTA升级原理和流程分析(五)---update.zip包从上层进入Recovery服务
转载自:http://blog.chinaunix.net/uid-22028566-id-3533854.html 文章开头我们就提到update.zip包来源有两种: 一个是OTA在线下载(一般下 ...
- android ota升级服务,android 标准OTA升级流程
标准的OTA升级流程包括一下几个步骤: 1.Android设备首先会与OTA服务器进行交互,如果有更新会推送给客户.推送的信息常常会包含OTA更新包的下载地址和一些版本信息. 2.Update程序会将 ...
- Android Recovery升级原理
文章目录 Android Recovery升级原理 声明 摘要 1. Recovery相关概念 2. Android系统的启动模式 2.1 Android 各个分区介绍 2.2 Android的启动模 ...
- Android OTA 升级专栏文章导读
Android OTA 升级专栏文章导读 文章目录 Android OTA 升级专栏文章导读 1. 快速入口 2. 简要介绍 1. 基础入门:<Android A/B 系统>系列 2. 核 ...
- Android OTA 升级之五:updater
2011-03-15 20:14 4164人阅读 评论(7) 收藏 举报 Android OTA 升级之五:updater 作者: 宋立新 Email:zjujoe@yahoo.com 前言 可以说, ...
- Android OTA 升级
原文:http://fanwei51880.blog.163.com/blog/static/32406740201172325219944/ Android OTA升级之一:编译升级包 作者: 宋立 ...
- 【转】Android OTA 升级之一:编译升级包
Android OTA 升级之一:编译升级包 作者: 宋立新 Email : zjujoe@yahoo.com 前言 OTA 升级是 Android 系统提供的标准软件升级方式. 它功能强大,提供了完 ...
- Android OTA 升级之三:生成recovery.img
Android OTA 升级之三:生成recovery.img 作者: 宋立新 Email:zjujoe@yahoo.com 前言 得到了ota升级包后,我们就可以用它来升级系统了.Android 手 ...
最新文章
- PHP开发中,让var_dump调试函数输出更美观 ^_^#
- phpHiveAdmin开发两个月记录
- Fedora 13 Alpha测试手记横空出世
- NopCommerce开源项目中很基础但是很实用的C# Helper方法
- [系统安全] 三十一.恶意代码检测(1)恶意代码攻击溯源及恶意样本分析
- python扫盲系列--(4)
- mac idea在mybatis xml文件里引入全限定类名报红解决
- CF1178H Stock Exchange
- java合并多个表格为一个_多个DataTable的合并成一个新表
- php 判断赋值 简写,PHP IF判断简写
- Balanced Numbers数位dp
- 正则分割 oracle,Oracle通过正则表达式分割字符串 REGEXP_SUBSTR
- 启发式算法、寻路算法A*算法
- atoi函数_linux网络编程之POSIX 消息队列 和 系列函数
- Lodop简短问答客户反馈篇 及排查步骤 及注册相关
- android 炫酷图案解锁,16个超级漂亮的手机锁屏图案,炫酷到飞起,总有一款适合你...
- 服务器运维 考什么证书,腾讯云服务器运维高级工程师认证(TCP)证书有效期、考试内容、费用...
- 魔兽按键精灵 V2.0(修正1)
- 你想收到中国向世界发出的第一封电子邮件吗
- 第一个Andriod应用