当前位置:首页 » 网页前端 » ota脚本
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

ota脚本

发布时间: 2022-06-28 01:03:16

‘壹’ 第三方rec刷入后可以ota升级吗

1、首先声明 官方OTA升级包是可以用第三方REC刷入的!并且不会双清! 2、官方OTA升级包下载之后放在哪? 就在手机存储跟 目录下 的 .OTA文件夹中。用第三方REC升级的时候 注意把.OTA文件夹中的.zip升级包取出,不然用官方rec升级失败后 .ota中的文件会自动删除。 3、OTA升级可不可以跨版本? 可以的,官方OTA升级会自动把所有 升级包都下载到.ota下 然后一个一个刷入。例如你的版本是0530,那你升级到0630 就会下载两个升级包一个0624(内核号8545)的一个0630(内核号8704)的。你把相应的刷机包取出来 用第三方REC按先后顺序即可升级! 4、OTA升级为什么会失败? OTA 升级失败主要原因是 你改过系统文件,比如刷了非该版本的基带,刷了GMS(google服务框架)包,都可能造成OTA升级失败! OTA升级包 在更新之前 会校验系统原始文件之类的,发现和升级包脚本文件签名不一样的时候 会报错提示校验失败(你用第三方rec刷 OTA升级包的时候报错会显示详细信息,那个文件校验失败) 5、如何解决OTA升级系统文件校验失败? 两种方案: 1 、把相关系统文件还原成该ROM原始版本 2、修改OTA升级包中的 脚本文件,把相关校验内容删除!具体操作方法 如下: 打开zip升级包,进入META-INF\com\google\android目录下 修改updater-script文件 并替换,例如下图: 你用第三方REC刷OTA升级包的时候如果报错,你就到这个脚本里面找相应的语句然后干掉即可! 6. 所谓root之后OTA升级会失败,会出错等等 我觉得不见得,ota升级说白了只不过是向系统分区内写文件,替换系统文件之类的操作,而root操作也是向系统分区中写几个文件而已,一个是BIN目录 下的SU,另外一个是一个apk程序,一般叫做授权管理(superuser或supersu),而root失败往往是因为bin目录下的su文件跟 linux内核对不上 导致root失败。 ota升级之前会去bin目录下找su,来确定本机是否root过,root过就弹出一个吓人的警告,我觉得这只不过是官方免责的手段罢了!

‘贰’ 酒店如何通过OTA更好地营销

酒店哥来跟您聊聊,酒店OTA运营应该怎么做营销


酒店要通过OTA做营销,一般都可分为5个部分。在回答问题之前,我们先来明确三点:

1、 营销的目的是引流。

2、 营销的本质就是传播。

3、 理想的营销是让流量带来更多的流量。

这三点分别可以用来回答:我们为什么要做营销?营销到底是什么?什么才算是一个好的营销活动?


1、 确立营销目标——要做什么样的营销

在确立一项工作之前,我们都得先确立一个目标。换而言之,我们的营销要达到一个什么样的效果。

目标的确立不仅可以为我们的前期策划立一个标杆,在后期做活动复盘的时候,也会有一个对比的标杆,实际效果与预期相比是达到了还是差多少,对比之后可以看到这次活动的不足之处或者值得其他项目借鉴的经验总结。


2、 营销的节点选择——营销如何借势

考量时间节点的维度,一来是为营销活动找噱头,也就是借势。二来,节点日推出营销活动获取的点击量可能会多一些,整体活动效果可能会好一点。

比如今年的国庆节,又恰逢建国70周年,那么紧跟这个节点,无论是营销的氛围还是用户的参与度,这个节点都是一个不容错过的营销选择。此外,还有9月初的开学季、携程推出的99酒店节、以及携程20周年庆等等节点,都可以成为营销活动推广的选择。


3、 营销的客户群体——营销面向的是谁

当活动的目标、节点(借势点)确定好了之后,对营销的目标客群也要有一个把控。如何去把控呢?

明确了我们的营销目标是做传播引流,那么接下来就要考虑我们去哪里引流?目标客群是哪类人?他们的消费偏好是什么……

这里可能有一个误区,很多人在做营销时可能都会忽略。我们做OTA运营,使用的平台是携程、去哪儿、飞猪、同程艺龙等等,要知道不同的平台的用户群体是不一样的,不同的平台的规则也是不一样的,如果我们只制定一个营销策划,然后把这个营销活动铺到各个平台上,那么可能在某个平台上取得的效果好,其他平台的效果可能不太理想。

如何去改变呢?

首先你得明确不同平台的运营规则。

接着你得对不同平台的受众做一个分析,对平台用户进行用户画像,了解这类用户的消费偏好。

最后再根据不同平台的不同用户的行为偏好制定一个特定的营销方案。

如果能做到这三步,也就做到了我们所谓的精准营销,做到了精准营销,精准引流还会远吗?


4、 营销的类型——营销选择的方式是什么

营销的本质是传播,那么既然是传播,传播的类型有很多,能让我们传播出去的吸引人的内容有很多。

对于酒店人来说,做OTA运营的营销,常见的方式就是促销、打折、优惠活动等等。大家在选择营销的方式的时候可以多样化一些,不必太单一。例如:

不同的房型给出不同的价格优惠

不同的价格带给出不一样的优惠方式(打折优惠、连住优惠、早鸟价等等)

不同的平台制定不同的促销方式

……


5、 营销的复盘——营销的效果怎么样?如何改进

营销活动推出去之后,不管效果是否达到预期,都要尽快对营销活动做一个活动的复盘和评估。

营销的活动是否达到预期?

如果没有,问题出在了哪一个环节?

如果达到了,那么超出预期的部分是怎么做到的?

整个过程中有没有哪一个环节需要改进或加强?

……

以上,就是要做一个营销的整体思路。不仅仅是我们做OTA平台的营销,我们在做线下的营销推广也需要从这5个方面去考量,当然,这5个方面只是一个参考的考量维度,对于不同类型不同品类的酒店,考量的维度会有所不同。

总体来说,前期的分析和目标确定,中期的活动策划和执行,后期的复盘和整体评估,都是一个完整的营销活动不可或缺的。



三句话了解酒店哥

  • OTA代运营标杆服务商,搞定酒店线上生意

  • 深耕酒店营销运营行业7年,服务超过100家门店,培训超过5000酒店人,拥有大量优秀案例

  • 酒店哥服务项目线上业绩至少翻倍,更有线上业绩十倍增长项目

‘叁’ Space☆Dandy的动画制作

原创太空喜剧《Space☆Dandy》的导演渡边信一郎之前曾执导过《太空牛仔》等太空、科幻题材作品。在2013年8月10日美国Otakon的Q&A提问环节上,导演渡边信一郎透露动画将由BONES制作,并在2014年1月开播 ,会上还公布了部分动画主创人员名单;一周后,动画官网开通,主制作和剧情简介得到披露 ;8月底,正式PV、主题曲公开 ;10月,公开详细声优 。而随后官方更是公布了包括20名音乐制作的,总数多达86人的,堪称豪华的主创阵容 ,而且最重要的是,本作的幕后阵容不仅人数众多,而且大部分都是大家非常熟悉的实力派强将。新公布的3名负责脚本创作的作者分别是《尸体的帝国》的作者、新锐科幻小说作家圆城塔,创作了多部日剧的脚本家森迅史,还有《反叛的鲁鲁修》的脚本家大河内一楼。这3名不同风格的脚本家将与上野喜美子、佐藤大、信本敬子共同创作脚本。在本作的制作阵容中,我们可以看到大河原邦男、大友克洋、谷口悟朗、千羽由利子、中田荣治、宫武一贵、汤浅政明等动画界具有代表性的制作人员 ,以及山本沙代、宫地昌幸等才华横溢的新锐,活跃在《福音战士新剧场版》中的林明美等优秀的制作人员也将参与到本作的制作中,田岛昭宇、寺田克也这两名在海外知名度也很高的漫画家也将参与制作本作。
可以说这样的制作阵容在TV动画中是前所未有的,加之这部动画采用的是前后联系不大“单元剧”的模式(部分集数间存在伏笔,但单独来看不影响理解剧情),使得这部动画更像是一个平台,各路人马各显神通,在一话之中不受干涉地尽情发挥自己的想象力与创造力。
接下来在12月,官方公开了第二段欧美向PV ;12月底,冒头10分钟 释出;2014年1月,前13集客串声优(Guest)名单 披露。
而到了2014年3月,第一季完结之后,官方推特也宣布第二季将在7月开播 ,2014年6月,第二季PV公开 。 总监督:渡边信一郎
监督:夏目真悟
脚本:上野贵美子、佐藤大、信本敬子、円城塔、森迅史、大河内一楼
角色设计:伊藤嘉之
宇宙船设计:ロマン・トマ
美术监督::河野羚
色彩设计::小针裕子
摄影监督: 武井良幸
主题歌:冈村靖幸
动画制作:Bones

‘肆’ 新手如何制作ota分差包

在make android系统后,会生成系统的img文件。
make otapackage 会生成sd卡用的全部系统升级包,有260M多。要生成增量升级包。需要按以下步骤。

mkdir ~ /OTA

source build/envsetup.sh; choosecom 1 1 7 eng

make;make otapackage

先将编译生成的
out/target/proct/msm8660_surf/obj/PACKAGING/target_files_intermediates/msm8660_surf-target_files-eng.xxxx.zip
拷贝并且更名放到目录 ~ /OTA/msm8660_surf-target_files-eng.A.zip

在代码中产生一些更新

第二次 make;make otapackage

第二次编译生成的out/target/proct/msm8660_surf/obj/PACKAGING/target_files_intermediates/msm8660_surf-target_files-eng.xxxx.zip 拷贝并且更名放到目录 /OTA/msm8660_surf-target_files-eng.tangzm_B.zip

-在src根目录下执行 ./build/tools/releasetools/ota_from_target_files -i 包 > 包 > <<span style="font-family: 'DejaVu Sans';">差分包名 >。这里必须在src根目录下执行,因为 ota_from_target_files.py这个脚本里面写定了相对路径的引用文件。
如: ./build/tools/releasetools/ota_from_target_files -v -t MMC -i
~ /OTA/msm8660_surf-target_files-eng.A.zip
~ /OTA/msm8660_surf-target_files-eng.B.zip
~ /OTA/update.zip
~ /OTA/update.zip 就是升级用的差分包。
注意:-t MMC 是指使用文件格式为ext4,默认为mtd,即yaffs2。因为我们这个系统使用了ext4文件系统的支持。具体的内容可以看分区表文件src/
具体的参数含义为 -v显示具体命令,-i 为产生增量包。

‘伍’ 如何去掉android ota升级包时间戳

Android的OTA升级包中,里面有一个升级脚本,该脚本会检测recovey镜像的编译时间和OTA包的编译时间,如果recovey比OTA包的时间要新的话,升级便会失败。如果是这样的话,就得重新编译OTA包了。
为了提供开发速度,可找到build/tools/releasetools/ota_from_target_files这个脚本,屏蔽一下这个函数 script.AssertOlderBuild(ts, ts_text),
这样编译生成的OTA中便不会检测时间戳了。

‘陆’ 如何对安卓系统的平板电脑进行强刷,Root后OTA升级变砖,怎么刷回去呢

E708 Q1刷机必备 强刷教程(有一定的危险性,不推荐,最后一道防线)这个方法用在板友们没有开启USB调试或者改系统文件变砖,链接电脑没反应的情况,救砖处理,不到万不得已不要尝试,确保你的平板有超过30%的电量。打开官方刷机工具会发现电脑不认平板没关系,这个时候把平板和电脑的连接线断开。首先确保你的刷机软件更新到v1.0.7版本。然后进入一件刷机,浏览到官方刷机包,点击升级,然后会出现没有设备之类的话,一直确定,无视。这步就需要注意了1.按关机键10秒以上,确保关机;2.先按下home键不松手,死都不松手;3.然后用USB数据线连接电脑和平板;4.短按电源键知道刷机工具开始有反应;5.松开电源键和home键,点是开始刷机等进度条跑完就刷机成功了。第一次开机时间会长一点。

‘柒’ 雷霆战机脚本不用root软件下载

Android手机Root失败的原因 如今在Android平台最方便的ROOT 方式是“一键ROOT”,用户可以通过开发 者提供的ROOT工具简单快捷的实现 ROOT,包括腾讯手 机关机、360手机助 手、卓大师、刷机精灵,卓大师,甜椒以及移动叔叔 ROOT工具箱等第三方刷机工具,都可以非常简单 的实现一些机型的ROOT操作,当然也 有很多用户使用这些工 具后仍然ROOT 不成功,除了“工具不支持该型号”之 外,以下整理了五点常见的ROOT 失败原因,供用户参考。 1、Root系统版本及型号匹配
失败原因,供用户参考。 1、Root系统版本及型号匹配 很多Root工具对于手机的型号以 及系统版本有特定的要求,在未满足 要求的情况下刷机失败的几率相当 大。刷带Recovery的内核是低版本固 定手机型号Root的一个途径,如果通 过“一键Root工具”刷机失败,
Android手机Root失败的原因 如今在Android平台最方便的ROOT 方式是“一键ROOT”,用户可以通过开发 者提供的ROOT工具简单快捷的实现 ROOT,包括腾讯手 机关机、360手机助 手、卓大师、刷机精灵,卓大师,甜椒以及移动叔叔 ROOT工具箱等第三方刷机工具,都可以非常简单 的实现一些机型的ROOT操作,当然也 有很多用户使用这些工 具后仍然ROOT 不成功,除了“工具不支持该型号”之 外,以下整理了五点常见的ROOT 失败原因,供用户参考。 1、Root系统版本及型号匹配
失败原因,供用户参考。 1、Root系统版本及型号匹配 很多Root工具对于手机的型号以 及系统版本有特定的要求,在未满足 要求的情况下刷机失败的几率相当 大。刷带Recovery的内核是低版本固 定手机型号Root的一个途径,如果通 过“一键Root工具”刷机失败,
不妨找找 教程试试刷Recovery。 2、Recovery卡刷ROOT包 大多数的Android设备支持OTA或 者ICS升级,用户可以把厂商推送的 OTA以及ICS拷贝到SD卡中进行系统升 级操作,这些手机大多也支持将固定 的Root文件包通过刷机刷入手机系统当中,比如华为荣耀系列的部分机 型。 3、Recovery模式菜单 很多“一键Root工具”需要用户在手 机Recovery模式下开始刷机操作,如 果在网上找到一篇Root教程反复尝试 仍然失败的话,不妨在 Root开始之前 进入Recovery模式进行尝试(开机时按 住音量减少键+电源键调出),最典型 的例子是联想S720以及其他S系列机 型。 4、安装手机驱动 很多“一键Root”工具需要用户保持与手机的连接状态,通过豌豆荚、91 手机助手等工具预先在手机中装入手 机版豌豆荚以及91手机助手等工具,
是简单的安装手机驱动的方式。 5、PC系统 很多PC端的Root工具需要通过 Windows XP模式进行刷机操作,而Win7 或者Win 8的用户需要在使用类似工具 的时候设置“管理员模式”以及“XP兼容 模式”。 以上是Root Android设备的一些重 要注意事项,在Root设备的时候如果 每每不成功,不妨安装以上五个内容进行尝试。最后提醒Root用户,刷机 需谨慎,刷前要备份。
希望对你有所帮助!

‘捌’ 小米手机怎么刷机

小米手机刷机的步骤如下:

1、打开电脑,然后把系统下载到xiaomimi Forum官方网站上的电脑上:

‘玖’ 我想写一个shell脚本,可以把终端输入的结果写入到某个文件。

read-p"请输入版本号:"ver
myStr="BUILD_NUMBER=$ver"
echo"$myStr"
sed-i'/^makefullota/s/.*/makefullota'"$myStr"'/'makezip.sh

‘拾’ 如何打包安卓手机Zip升级包如何签名不换Recovery,用官方Recovery

通过分析update.zip包在具体Android系统升级的过程,来理解Android系统中Recovery模式服务的工作原理。
我们先从update.zip包的制作开始,然后是Android系统的启动模式分析,Recovery工作原理,如何从我们上层开始选择system update到重启到Recovery服务,以及在Recovery服务中具体怎样处理update.zip包升级的,我们的安装脚本updater-script怎样被解析并执行的等一系列问题。分析过程中所用的Android源码是gingerbread0919(tcc88xx开发板标配的),测试开发板是tcc88xx。
一、 update.zip包的目录结构
|----boot.img
|----system/
|----recovery/
`|----recovery-from-boot.p
`|----etc/
`|----install-recovery.sh
|---META-INF/
`|CERT.RSA
`|CERT.SF
`|MANIFEST.MF
`|----com/
`|----google/
`|----android/
`|----update-binary
`|----updater-script
`|----android/
`|----metadata
二、 update.zip包目录结构详解
以上是我们用命令make otapackage 制作的update.zip包的标准目录结构。
1、boot.img是更新boot分区所需要的文件。这个boot.img主要包括kernel+ramdisk。
2、system/目录的内容在升级后会放在系统的system分区。主要用来更新系统的一些应用或则应用会用到的一些库等等。可以将Android源码编译out/target/proct/tcc8800/system/中的所有文件拷贝到这个目录来代替。
3、recovery/目录中的recovery-from-boot.p是boot.img和recovery.img的补丁(patch),主要用来更新recovery分区,其中etc/目录下的install-recovery.sh是更新脚本。
4、update-binary是一个二进制文件,相当于一个脚本解释器,能够识别updater-script中描述的操作。该文件在Android源码编译后out/target/proct/tcc8800/system bin/updater生成,可将updater重命名为update-binary得到。
该文件在具体的更新包中的名字由源码中bootable/recovery/install.c中的宏ASSUMED_UPDATE_BINARY_NAME的值而定。
5、updater-script:此文件是一个脚本文件,具体描述了更新过程。我们可以根据具体情况编写该脚本来适应我们的具体需求。该文件的命名由源码中bootable/recovery/updater/updater.c文件中的宏SCRIPT_NAME的值而定。
6、 metadata文件是描述设备信息及环境变量的元数据。主要包括一些编译选项,签名公钥,时间戳以及设备型号等。
7、我们还可以在包中添加userdata目录,来更新系统中的用户数据部分。这部分内容在更新后会存放在系统的/data目录下。
8、update.zip包的签名:update.zip更新包在制作完成后需要对其签名,否则在升级时会出现认证失败的错误提示。而且签名要使用和目标板一致的加密公钥。加密公钥及加密需要的三个文件在Android源码编译后生成的具体路径为:
out/host/linux-x86/framework/signapk.jar
build/target/proct/security/testkey.x509.pem
build/target/proct/security/testkey.pk8 。
我们用命令make otapackage制作生成的update.zip包是已签过名的,如果自己做update.zip包时必须手动对其签名。
具体的加密方法:$ java –jar gingerbread/out/host/linux/framework/signapk.jar –w gingerbread/build/target/proct/security/testkey.x509.pem gingerbread/build/target/proct/security/testkey.pk8 update.zip update_signed.zip
以上命令在update.zip包所在的路径下执行,其中signapk.jar testkey.x509.pem以及testkey.pk8文件的引用使用绝对路径。update.zip 是我们已经打好的包,update_signed.zip包是命令执行完生成的已经签过名的包。
9、MANIFEST.MF:这个manifest文件定义了与包的组成结构相关的数据。类似Android应用的mainfest.xml文件。
10、CERT.RSA:与签名文件相关联的签名程序块文件,它存储了用于签名JAR文件的公共签名。
11、CERT.SF:这是JAR文件的签名文件,其中前缀CERT代表签名者。
另外,在具体升级时,对update.zip包检查时大致会分三步:①检验SF文件与RSA文件是否匹配。②检验MANIFEST.MF与签名文件中的digest是否一致。③检验包中的文件与MANIFEST中所描述的是否一致。
三、 Android升级包update.zip的生成过程分析
1) 对于update.zip包的制作有两种方式,即手动制作和命令生成。
第一种手动制作:即按照update.zip的目录结构手动创建我们需要的目录。然后将对应的文件拷贝到相应的目录下,比如我们向系统中新加一个应用程序。可以将新增的应用拷贝到我们新建的update/system/app/下(system目录是事先拷贝编译源码后生成的system目录),打包并签名后,拷贝到SD卡就可以使用了。这种方式在实际的tcc8800开发板中未测试成功。签名部分未通过,可能与具体的开发板相关。
第二种制作方式:命令制作。Android源码系统中为我们提供了制作update.zip刷机包的命令,即make otapackage。该命令在编译源码完成后并在源码根目录下执行。 具体操作方式:在源码根目录下执行
①$ . build/envsetup.sh。
②$ lunch 然后选择你需要的配置(如17)。
③$ make otapackage。
在编译完源码后最好再执行一遍上面的①、②步防止执行③时出现未找到对应规则的错误提示。命令执行完成后生成的升级包所在位置在out/target/proct/full_tcc8800_evm_target_files-eng.mumu.20120309.111059.zip将这个包重新命名为update.zip,并拷贝到SD卡中即可使用。
这种方式(即完全升级)在tcc8800开发板中已测试成功。
2) 使用make otapackage命令生成update.zip的过程分析。
在源码根目录下执行make otapackage命令生成update.zip包主要分为两步,第一步是根据Makefile执行编译生成一个update原包(zip格式)。第二步是运行一个python脚本,并以上一步准备的zip包作为输入,最终生成我们需要的升级包。下面进一步分析这两个过程。
第一步:编译Makefile。对应的Makefile文件所在位置:build/core/Makefile。从该文件的884行(tcc8800,gingerbread0919)开始会生成一个zip包,这个包最后会用来制作OTA package 或者filesystem image。先将这部分的对应的Makefile贴出来如下:

[python] view plainprint?
# -----------------------------------------------------------------
# A zip of the directories that map to the target filesystem.
# This zip can be used to create an OTA package or filesystem image
# as a post-build step.
#
根据上面的Makefile可以分析这个包的生成过程:
首先创建一个root_zip根目录,并依次在此目录下创建所需要的如下其他目录
①创建RECOVERY目录,并填充该目录的内容,包括kernel的镜像和recovery根文件系统的镜像。此目录最终用于生成recovery.img。
②创建并填充BOOT目录。包含kernel和cmdline以及pagesize大小等,该目录最终用来生成boot.img。
③向SYSTEM目录填充system image。
④向DATA填充data image。
⑤用于生成OTA package包所需要的额外的内容。主要包括一些bin命令。
⑥创建META目录并向该目录下添加一些文本文件,如apkcerts.txt(描述apk文件用到的认证证书),misc_info.txt(描述Flash内存的块大小以及boot、recovery、system、userdata等分区的大小信息)。
⑦使用保留连接选项压缩我们在上面获得的root_zip目录。
⑧使用fs_config(build/tools/fs_config)配置上面的zip包内所有的系统文件(system/下各目录、文件)的权限属主等信息。fs_config包含了一个头文件#include“private/android_filesystem_config.h”。在这个头文件中以硬编码的方式设定了system目录下各文件的权限、属主。执行完配置后会将配置后的信息以文本方式输出 到META/filesystem_config.txt中。并再一次zip压缩成我们最终需要的原始包。
第二步:上面的zip包只是一个编译过程中生成的原始包。这个原始zip包在实际的编译过程中有两个作用,一是用来生成OTA update升级包,二是用来生成系统镜像。在编译过程中若生成OTA update升级包时会调用(具体位置在Makefile的1037行到1058行)一个名为ota_from_target_files的python脚本,位置在/build/tools/releasetools/ota_from_target_files。这个脚本的作用是以第一步生成的zip原始包作为输入,最终生成可用的OTA升级zip包。
二 下面我们分析ota_from_target_files这个python脚本是怎样生成最终zip包的。先讲这个脚本的代码贴出来如下:
[python] view plainprint?
import sys
if sys.hexversion < 0x02040000:
print >> sys.stderr, "Python 2.4 or newer is required."
sys.exit(1)
主函数main是python的入口函数,我们从main函数开始看,大概看一下main函数(脚本最后)里的流程就能知道脚本的执行过程了。
① 在main函数的开头,首先将用户设定的option选项存入OPTIONS变量中,它是一个python中的类。紧接着判断有没有额外的脚本,如果有就读入到OPTIONS变量中。
② 解压缩输入的zip包,即我们在上文生成的原始zip包。然后判断是否用到device-specific extensions(设备扩展)如果用到,随即读入到OPTIONS变量中。
③ 判断是否签名,然后判断是否有新内容的增量源,有的话就解压该增量源包放入一个临时变量中(source_zip)。自此,所有的准备工作已完毕,随即会调用该 脚本中最主要的函数WriteFullOTAPackage(input_zip,output_zip)
④ WriteFullOTAPackage函数的处理过程是先获得脚本的生成器。默认格式是edify。然后获得metadata元数据,此数据来至于Android的一些环境变量。然后获得设备配置参数比如api函数的版本。然后判断是否忽略时间戳。
⑤ WriteFullOTAPackage函数做完准备工作后就开始生成升级用的脚本文件(updater-script)了。生成脚本文件后将上一步获得的metadata元数据写入到输出包out_zip。
⑥至此一个完整的update.zip升级包就生成了。生成位置在:out/target/proct/tcc8800/full_tcc8800_evm-ota-eng.mumu.20120315.155326.zip。将升级包拷贝到SD卡中就可以用来升级了。
四、 Android OTA增量包update.zip的生成
在上面的过程中生成的update.zip升级包是全部系统的升级包。大小有80M多。这对手机用户来说,用来升级的流量是很大的。而且在实际升级中,我们只希望能够升级我们改变的那部分内容。这就需要使用增量包来升级。生成增量包的过程也需要上文中提到的ota_from_target_files.py的参与。
下面是制作update.zip增量包的过程。
① 在源码根目录下依次执行下列命令
$ . build/envsetup.sh
$ lunch 选择17
$ make
$ make otapackage
执行上面的命令后会在out/target/proct/tcc8800/下生成我们第一个系统升级包。我们先将其命名为A.zip
② 在源码中修改我们需要改变的部分,比如修改内核配置,增加新的驱动等等。修改后再一次执行上面的命令。就会生成第二个我们修改后生成的update.zip升级包。将 其命名为B.zip。
③ 在上文中我们看了ota_from_target_files.py脚本的使用帮助,其中选项-i就是用来生成差分增量包的。使用方法是以上面的A.zip 和B.zip包作为输入,以update.zip包作 为输出。生成的update.zip就是我们最后需要的增量包。
具体使用方式是:将上述两个包拷贝到源码根目录下,然后执行下面的命令。
$ ./build/tools/releasetools/ota_from_target_files -i A.zip B.zip update.zip。
在执行上述命令时会出现未找到recovery_api_version的错误。原因是在执行上面的脚本时如果使用选项i则会调用WriteIncrementalOTAPackage会从A包和B包中的META目录下搜索misc_info.txt来读取recovery_api_version的值。但是在执行make otapackage命令时生成的update.zip包中没有这个目录更没有这个文档。
此时我们就需要使用执行make otapackage生成的原始的zip包。这个包的位置在out/target/proct/tcc8800/obj/PACKAGING/target_files_intermediates/目录下,它是在用命令make otapackage之后的中间生产物,是最原始的升级包。我们将两次编译的生成的包分别重命名为A.zip和B.zip,并拷贝到SD卡根目录下重复执行上面的命令:
$ ./build/tools/releasetools/ota_form_target_files -i A.zip B.zip update.zip。
在上述命令即将执行完毕时,在device/telechips/common/releasetools.py会调用IncrementalOTA_InstallEnd,在这个函数中读取包中的RADIO/bootloader.img。
而包中是没有这个目录和bootloader.img的。所以执行失败,未能生成对应的update.zip。可能与我们未修改bootloader(升级firmware)有关。此问题在下一篇博客已经解决。
制作增量包失败的原因,以及解决方案。

Android系统Recovery工作原理之使用update.zip升级过程分析(二)---update.zip差分包问题的解决
在上一篇末尾提到的生成差分包时出现的问题,现已解决,由于最近比较忙,相隔的时间也比较长,所以单列一个篇幅提示大家。这个问题居然是源码中的问题,可能你已经制作成功了,不过我的这个问题确实是源码中的一个问题,不知道是不是一个bug,下文会具体分析!
一、生成OTA增量包失败的解决方案
在上一篇中末尾使用ota_from_target_files脚本制作update.zip增量包时失败,我们先将出现的错误贴出来。
在执行这个脚本的最后读取input_zip中RADIO/bootloader.img时出现错误,显示DeviceSpecifiParams这个对象中没有input_zip属性。
我们先从脚本中出现错误的调用函数中开始查找。出现错误的调用地方是在函WriteIncrementalOTAPackage(443行)中的device_specific.IncrementalOTA_InstallEnd(),其位于WriteIncrementalOTAPackage()中的末尾。进一步跟踪源码发现,这是一个回调函数,他的具体执行方法位于源码中/device/telechips/common/releasetools.py脚本中的IncrementalOTA_InstallEnd()函数。下面就分析这个函数的作用。
releasetools.py脚本中的两个函数FullOTA_InstallEnd()和IncrementalOTA_InstallEnd()的作用都是从输入包中读取RADIO/下的bootloader.img文件写到输出包中,同时生成安装bootloader.img时执行脚本的那部分命令。只不过一个是直接将输入包中的bootloader.img镜像写到输出包中,一个是先比较target_zip和source_zip中的bootloader.img是否不同(使用选项-i生成差分包时),然后将新的镜像写入输出包中。下面先将这个函数(位于/device/telechips/common/releasetools.py)的具体实现贴出来:
我们的实际情况是,在用命令make otapackage时生成的包中是没有这个RADIO目录下的bootloader.img镜像文件(因为这部分更新已被屏蔽掉了)。但是这个函数中对于从包中未读取到bootloader.img文件的情况是有错误处理的,即返回。所以我们要从 出现的实际错误中寻找问题的原由。
真正出现错误的地方是:
target_bootloader=info.input_zip.read(“RADIO/bootloader.img”)。
出现错误的原因是:AttributeError:‘DeviceSpecificParams’object has no attribute ‘input_zip’,提示我们DeviceSpecificParams对象没有input_zip这个属性。
二、updater-script脚本执行流程分析:
先看一下在测试过程中用命令make otapackage生成的升级脚本如下:
[python] view plainprint?
assert(!less_than_int(1331176658, getprop("ro.build.date.utc")));
assert(getprop("ro.proct.device") == "tcc8800" ||
下面分析下这个脚本的执行过程:
①比较时间戳:如果升级包较旧则终止脚本的执行。
②匹配设备信息:如果和当前的设备信息不一致,则停止脚本的执行。
③显示进度条:如果以上两步匹配则开始显示升级进度条。
④格式化system分区并挂载。
⑤提取包中的recovery以及system目录下的内容到系统的/system下。
⑥为/system/bin/下的命令文件建立符号连接。
⑦设置/system/下目录以及文件的属性。
⑧将包中的boot.img提取到/tmp/boot.img。
⑨将/tmp/boot.img镜像文件写入到boot分区。
⑩完成后卸载/system。
三、总结
以上的九篇着重分析了Android系统中Recovery模式中的一种,即我们做好的update.zip包在系统更新时所走过的流程。其核心部分就是Recovery服务的工作原理。其他两种FACTORY RESET、ENCRYPTED FILE SYSTEM ENABLE/DISABLE与OTA INSTALL是相通的。重点是要理解Recovery服务的工作原理。另外详细分析其升级过程,对于我们在实际升级时,可以根据我们的需要做出相应的修改。