转自:http://www.xuebuyuan.com/631753.html

这篇文章页不错,参考:http://lhc180.blog.51cto.com/316940/757378

这篇文章页写得很好:http://blog.csdn.net/mu0206mu/article/details/7399822

AndroidOTA简介

OTA全称over the air ,OTA升级是Android系统提供的标准软件升级方式。

它功能强大,提供了完全升级、增量升级模式,可以通过SD卡升级,也可以通过

网络升级。

这里,首先介绍SD卡升级,网络升级原理和SD卡大致一样.下面我们将介绍这一过程.

在升级前,我们要准备升级包,所有编译好的包都命名为update.zip

,不管是增量升级还

是完全升级.

1.生成完全升级包.

./mk prj new

./mk prj otapackage

编译完成之后,将在\out\target\product\prj\目录下生成prj-ota-eng.root.zip,这个

zip将是我们升级用的包,我们要把他改名为update.zip ,然后copy到SD卡的根目录下.

在运行上面指令的过程中,同时会在

out\target\product\prj\obj\PACKAGING\target_files_intermediates\

目录下生成prj-target_files-eng.root.zip这个文件非常重要,我们将他保存为old.zip

它是我们做增量包的基础文件.

2.生成增量包.

当,我们更新新的代码.同样运行./mk prj otapackage产生代码更改后的完全升级包.

这时同样会在out\target\product\prj\obj\PACKAGING\target_files_intermediates\目录下生成

prj-target_files-eng.root.zip我们把它重命名为new.zip,接下来我们完成生成增量包的最后一步.

运行./build/tools/releasetools/ota_from_target_files-iold.zip new.zip diff.zip ,产生new.zip

到old.zip的增量包diff.zip ,同样我们要把它命名为update.zip ,可以copy到SD卡的更目录下,做增量

式升级使用.

(备注:如果升级有特殊的要求,比如格式化data分区,更新uboot等分区,需要修改ota_from_target_files.py这个脚本)

上面的内容介绍了如何准备update.zip升级文件.接下来介绍升级过程.先说一下正常开机过程,

按power键开机,uboot在运行完之后,将把boot分区的内容boot.img文件加载到内存,然后跳转到boot中

linux内核的开始位置,运行linux内核代码,在内核的最后执行正常启动时的init.rc

文件,挂载system分区

到/system目录下,挂载data分区到/data目录下.启动虚拟机等相关的一下服务.

要升级,开机的时候,需要按住power和下vol键,这样uboot在运行完之后将加载recovery分区

的recovery.img文件到内存.现在我们看一下,recovery.img

这个镜像里面有什么内容.详细的内容我们

可以查看build/core/makefile文件,在这个文件里面我们查找 Recovery image ,从这里开始的内容,主要

是打包recovery.img的内容.关于recovery.img的具体内容,说的简单点,就是linux内核和将\out\target\

product\prj\recovery目录打包成ramdisk的一个镜像的集合.对比正常开机的boot.img镜像,区别为boot.img

里面的ramdisk镜像是out\target\product\prj\root打包来的.其内核文件是同一个文件. recovery.img

镜像里面的ramdisk文件系统包含的用于数据升级相关的bin文件,比如gzip,recovery等重要的程序.

在机器加载recovery.img ,执行完内核后,运行recovery模式下的init.rc该文件在bootable\recovery\etc\

目录下,我们拿它和正常开机的init.rc文件相比.发现recovery模式的init.rc仅仅新建了几个目录,包括sdcard,

用于SD卡的挂载点.启动了2个service,一个ueventd,一个recovery的主菜单程序recovery(该文件是bootable\recovery\recovery.c编程而成),内容非常简单.在recovery的主界面,选择更新程序后,recovery将会

解压update.zip文件,执行其中的\META-INF\com\google\android\updater-script ,recovery会对脚本进行解析.

下面是这个脚本的部分摘录.

show_progress(0.500000, 0);

format("yaffs2", "MTD", "system");

mount("yaffs2", "MTD", "system", "/system");

package_extract_dir("recovery", "/system");

package_extract_dir("system", "/system");

symlink("toolbox", "/system/bin/cat", "/system/bin/chmod",

"/system/bin/chown", "/system/bin/cmp", "/system/bin/date",

.......

"/system/bin/wipe");

set_perm_recursive(0, 0, 0755, 0644, "/system");

........

show_progress(0.200000, 10);

assert(package_extract_file("boot.img", "/tmp/boot.img"),

write_raw_image("/tmp/boot.img", "boot"),

delete("/tmp/boot.img"));

show_progress(0.100000, 0);

unmount("/system");

(以上脚本为系统自动生成)

从脚本可以看到,首先格式化system区分,然后把updata.zip里面的system目录的内容解压到system

分区.接着修改system分区下文件的权限.最后将boot.img镜像写回到boot分区.

从以上的介绍,可以看到android的功能非常强大,在recovery模式下,linux已经已经完全跑

了起来.除了apk,jar不能运行之外,你可以做任何你想做的事情.上面的例子中,更新了system分区

和boot分区,如果需要还可以更新uboot分区,logo分区,格式化data分区等等.

关于OTA的网络实现,实际上是检查网络上的更新,或者网络通知更新.把更新包(update.zip)

下载到本地,在用户的选择下,重启机器自动进入recovery模式,执行上面的过程.

android ota升级服务,android OTA 升级包含增量升级相关推荐

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

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

  2. android四大组件 服务,Android四大组件之Service

    Service Service(服务)是一个可以在后台执行长时间运行操作而不使用用户界面的应用组件.服务可由其他应用组件启动,而且即使用户切换到其他应用,服务仍将在后台继续运行. 此外,组件可以绑定到 ...

  3. android打开位置服务,Android - 位置定位(Location)服务(Service)类的基本操作

    位置定位(Location)服务(Service)类的基本操作 本文地址: http://blog.csdn.net/caroline_wendy 定位服务(Location Service),能够确 ...

  4. Android 进程 缓存服务,Android获取应用程序大小和缓存的实例代码

    info package com.qin.appsize; import android.content.Intent; import android.graphics.drawable.Drawab ...

  5. android无法实例化服务,Android:无法实例化类:没有空的构造函数

    请看下面,我得到一个无法实例化类:当试图运行我的"HomeFragmentListExpand"类时,LogCat中没有空的构造函数错误,即使我清楚地有一个空的构造函数那里.And ...

  6. android中暂停服务,Android暂停服务,线程,Asynctask?使用postdelayed的处理程序呢?...

    我有后台服务(Service→Thread→Timer→Asynctask). Timer每5秒执行一次Asynctask.如果Asynctask返回true,则发送通知.Android暂停服务,线程 ...

  7. android 基于位置服务,Android 基于位置服务的基本知识

    1.在android平台使用位置服务需要使用位置管理器,获得方法如下: String locationService =Context.LOCATION_SERVICE; LocationManage ...

  8. android开机优化服务,Android开机速度优化简单回顾

    Android的开机速度,基本上没人说快的,通常移植完系统后,马上要看的事情就是优化开机时间,以下是简单回忆以下以前做优化的那些事. 开机时间都花在哪? 优化开机时间,通常做的首先是那有有没有BUG, ...

  9. android 快速启动服务,Android应用快速启动设计

    Android启动过程 Anroid应用启动在应用层主要分为如下几个阶段:Application初始化,Activity初始化,Service初始化,视图Tranversal 从快速启动的角度来看,应 ...

  10. android下载图片服务,Android中的背景图片下载需要帮助吗?

    Sameer Z... 16 使用像我从服务器下载文件并放入SD卡的服务下载它的最佳方式也使用通知.它是相当长的代码,但我认为完美的一个,如果不明白任何事情,那么请去android开发者博客的服务. ...

最新文章

  1. Windows CE 6.0正式发布 源代码100%开放
  2. 网络推广外包——网络推广外包专员浅析移动端网站建设要点
  3. 亚马逊评价抓取插件_亚马逊运营必备插件
  4. mysql 事务日志备份_事务日志备份与恢复 5
  5. 打印机乱码不停打印_关于东芝复合机连接打印,图文教你如何轻松连接至电脑...
  6. Linux Top使用说明
  7. 遗传算法MATLAB工具箱的下载与安装
  8. linux c 静态连接,Linux cmake 静态链接boost
  9. Linux系统剪贴板getContents()非常之慢
  10. WebView·开车指南
  11. 根据excel生成mysql数据库,根据excel生成数据库脚本
  12. 快速地将SolidWorks模型导入Adams
  13. 【SpringBoot整合缓存】-----jetcache以及j2cache篇
  14. 解决MySQL登录1045错误
  15. mac 删除磁盘图标_如何在Mac上更改硬盘图标
  16. 深圳礼品展上新“缤纷食品馆” 解锁员工福利新场景
  17. 以TFP401A为核心的DVI接口应用系统
  18. 波卡平行链生态一览|Polkadot Decoded 回顾
  19. 头条php,基于PHP的免费新闻头条接口查询
  20. Python学习十:网络编程

热门文章

  1. 图片合成雾的方法概述
  2. 暮光之城电影自制礼物大事记
  3. 纯CSS3实现文字背景图滚动动画
  4. 关于react组件报错“A component is changing an uncontrolled input of type text to be controlled”
  5. excel打开表 正在计算机,事实:在Excel中打开表格时响应缓慢的解决方案技术
  6. 电容击穿之后是开路还是短路?
  7. Kalman滤波器参数分析
  8. 中国人民大学计算机系孙辉,张静(中国人民大学信息学院计算机系讲师)_百度百科...
  9. 身为码农,为12306说两句公道话:
  10. 移动APP云测试平台测评分析