About Android OTA system update

来源:互联网 发布:湖南软件检测 编辑:程序博客网 时间:2024/06/05 22:57

       OTA升级是Android系统提供的标准软件升级方式。它功能强大,可以无损失升级系统,主要通过网络[例如WIFI、3G]自动下载OTA升级包、自动升级,但是也支持通过下载OTA升级包到SD卡升级。

一、服务器

OTA升级搭建OTA服务器是比较基本的,我们需要把更新软件放到服务器供用户下载更新,但是做一个完整的OTA服务器却非常复杂,因为这要涉及到下载遵循的标准,软件的管理,下载的计费,安全认证等问题。

二、差异包

   差异包的生成也是OTA升级的一个重要步骤,编译过系统之后,执行下面的命令:

 $make otapackage

即可获得:out/target/product/{product_name}/ {product_name}-ota-eng.{uid}.zip

将该文件改名为update.zip放到T卡根目录, 即可开始recovery模式下的 OTA 升级。创建需要的OTA update image(包括全部更新及部分更新)的工具Releasetools ,具体路径build/tools/releasetools/用以与build system配合,生成对应的full/incremental的update.zip包,对应的编译脚本在build/core/main.mk及Makefile, 搜索target-files-package关键字build/tools/releasetools
├── check_target_files_signatures -- 用来检查cert和update包之间的关系
├── common.py -- 各种工具类,参数处理/META文件处理/image生成/signcertification/patch file 操作等等
├── edify_generator.py -- 用来生成edify脚本, 关于edify,参照bootable/recovery/edify/下的readme及tjworld,主要是给manufacturer提供一个简单的shell语言  来进行必要的recovery操作. 后面会单独写篇文章单独描述一下edify的使用方法
├── img_from_target_files -- 由生成target zip file的制作被fastboot update命令所使用的xxx.img文件
├── ota_from_target_files -- 生成经过各种签名的TFP更新包
└── sign_target_files_apks -- 用来对apk或者生成测zip更新包进行签名。

此工具都不提供boot.img和update image之间的交互操作, 所以在制作update image时,要手动确保你制作的update image能够被安装在预先已经有boot image的device上。

re-sign apks是为了apk的security, 用各个oem厂商的签名替代Test的签名.签名是使用openssl生成的带public exponent3 的 2048-bit RSA keys.

Related filesystem partition谈到Update,不得不提到android的分区情况(参见各个OEM的配置)。
    boot, 包含以下文件:metadata, kernel image,ramdisk, optional 2nd-stage bootloader image, 由mkbooting(system/core/mkbooting)生成system, 系统程序及apk等等。
    data, 用户数据, 会被factory reset clear
    recovery, 为了恢复misc, 包含Bootloader Control Block (BCB), recovery console通过它与bootloader交互cache, 用来支持update的temp分区,及被特定apk作为temp来使。

还有一个重要的文件recovery.fstab, 用来为recovery console及releasetools提供能够加载的文件系统及对应的mount node。
三、升级过程

下载后一定要放在SD根目录,即/sdcard/update.zip。

update.xml文件放在服务器上,当客户端请求的参数正确时,返回相应的信息。

update.xml的内容,根据需要可以添加;Md5需要校验下载后包的完整性。updatepath为实际的下载地址

至少需要如下字段:

<ver>android3.2</ver>

<md5>xxx</md5>

<updatepath>http://xxxx/update.zip</updatepath>