android dex分包差分包是什么

Android/Linux开发(11)
原文地址:
作者禁止转载的,怕以后找不到了没办法只有转载了。
在make android系统后,会生成系统的img文件。
make otapackage 会生成sd卡用的全部系统升级包,有260M多。要生成增量升级包。需要按以下步骤。
mkdir ~/OTA&
source build/envsetup. choosecom 1 1 7 eng
make otapackage
先将编译生成的
out/target/product/msm8660_surf/obj/PACKAGING/target_files_intermediates/msm8660_surf-target_files-eng.xxxx.zip
拷贝并且更名放到目录~/OTA/msm8660_surf-target_files-eng.A.zip
在代码中产生一些更新
make otapackage
第二次编译生成的out/target/product/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 &A包& &B包& &差分包名&。这里必须在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 recovery 下使用 updater-script 自制升级包
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:69282次
排名:千里之外
原创:18篇
评论:23条
(1)(1)(1)(1)(1)(1)(1)(4)(4)(1)(4)(1)(1)(3)android ota(12)
http://blog.csdn.net/mu0206mu/article/details/7464551
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这个属性。
& & & & &在用ota_from_target_files脚本制作差分包时使用了选项-i,并且只有这种情况有三个参数,即target_zip 、source_zip、 out_zip。而出现错误的地方是target_bootloader=info.input_zip_read(“RADIO/bootloader.img”),它使用的是input_zip,我们要怀疑这个地方是不是使用错了,而应该使用info.target_zip.read()。下面可以证实一下我们的猜测。
& & & & &从ota_from_target_files脚本中WriteFullOTAPackage()和WriteIncrementalOTAPackage这两个函数(分别用来生成全包和差分包)可以发现,在他们的开始部分都对device_specific进行了赋值。其中WriteFullOTAPackage()对应的参数是input_zip和out_zip,而WriteIncrementalOTAPackage对应的是target_zip,source_zip,out_zip,我们可以看一下在WriteIncrementalOTAPackage函数中这部分的具体实现:
& & & & & & & & &&
& & &&& & & 从上图可以发现,在WriteIncrementalOTAPackage函数对DeviceSpecificParams对象进行初始化时确实使用的是target_zip而不是input_zip。而在releasetools.py脚本中使用的却是info.input_zip.read(),所以才会出现DeviceSpecificParams对象没有input_zip这个属性。由此我们找到了问题的所在(这是不是源码中的一个Bug?)。
& & & & 将releasetools.py脚本IncrementalOTA_InstallEnd(info)函数中的 target_bootloader=info.input_zip.
read(“RADIO/bootloader.img”)为:target_bootloader=info.target_zip.read(“RADIO/bootloader.img”),然后重新执行上面提到的制作差分包命令。就生成了我们需要的差分包update.zip。
二、&&&&&&&&&&差分包update.zip的更新测试& & &
& & & & & & & &&在上面制作差分包脚本命令中,生成差分包的原理是,参照第一个参数(target_zip),将第二个参数(source_zip)中不同的部分输出到第三个参数(output_zip)中。其中target_zip与source_zip的先后顺序不同,产生的差分包也将不同。
& & & & & 在实际的测试过程中,我们的增量包要删除之前添加的一个应用(在使用update.zip全包升级时增加的),其他的部分如内核都没有改动,所以生成的差分包很简单,只有META-INF这个文件夹。主要的不同都体现在updater-script脚本中,其中的#----start make changes& here----之后的部分就是做出改变的部分,最主要的脚本命令是:&delete(“/system/app/CheckUpdateAll.apk”
, “/system/recovery.img”);在具体更新时它将删除CheckUpdateAll.apk这个应用。
& & & & & 为了大家参考,还是把这个差分包的升级脚本贴出来,:
&&&&&&&& 在做更新测试时,我们要以target_zip系统为依据,也就是更新之前的开发板系统是用target_zip包升级后的系统。否则会更新就会失败,因为在更新时会从系统对应的目录下读取设备以及时间戳等信息(updater-script脚本一开始的部分),进行匹配正确后才进行下一步的安装。
&&&&&&&& 所有准备都完成后,将我们制作的差分包放到SD卡中,在Settings--&About Phone--&System Update--&Installed From SDCARD执行更新。最后更新完成并重启后,我们会发现之前的CheckUpdateAll.apk被成功删掉了,大功告成!
& & & &&至此终于将update.zip包以及其对应的差分包制作成功了,下面的文章开始具体分析制作的update.zip包在实际的更新中所走的过程!
取消时间戳检测.方便新老版本互刷(降级)需要修改
~/build/tools/releasetools/ota_from_target_files
修改: OPTIONS.omit_prereq = True
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:600912次
积分:7779
积分:7779
排名:第1695名
原创:52篇
转载:789篇
译文:10篇
评论:94条
(1)(7)(4)(2)(3)(5)(1)(4)(3)(6)(7)(2)(5)(5)(5)(2)(5)(2)(4)(8)(2)(11)(6)(9)(11)(14)(17)(35)(82)(13)(9)(56)(44)(71)(55)(142)(118)(16)(22)(35)Android OTA升级原理和流程分析(二)---update.zip差分包问题的解决
Android OTA升级原理和流程分析(二)---update.zip差分包问题的解决
[摘要:Android OTA进级道理战流程剖析(一)--update.zip包的制造 转载自:http://blog.chinaunix.net/uid--id-3533849.html 正在上一篇末端提到的天生好分包时涌现的题目,现已办理,因为比来比拟闲,相]
OTA升级原理和流程分析(一)--update.zip包的制作
转载自:http://blog.chinaunix.net/uid--id-3533849.html
& & & &在上一篇末尾提到的生成差分包时出现的问题,现已解决,由于最近比较忙,相隔的时间也比较长,所以单列一个篇幅提示大家。这个问题居然是源码中的问题,可能你已经制作成功了,不过我的这个问题确实是源码中的一个问题,不知道是不是一个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这个属性。
& & & & &在用ota_from_target_files脚本制作差分包时使用了选项-i,并且只有这种情况有三个参数,即target_zip 、source_zip、 out_zip。而出现错误的地方是target_bootloader=info.input_zip_read(“RADIO/bootloader.img”),它使用的是input_zip,我们要怀疑这个地方是不是使用错了,而应该使用info.target_zip.read()。下面可以证实一下我们的猜测。
& & & & &从ota_from_target_files脚本中WriteFullOTAPackage()和WriteIncrementalOTAPackage这两个函数(分别用来生成全包和差分包)可以发现,在他们的开始部分都对device_specific进行了赋值。其中WriteFullOTAPackage()对应的参数是input_zip和out_zip,而WriteIncrementalOTAPackage对应的是target_zip,source_zip,out_zip,我们可以看一下在WriteIncrementalOTAPackage函数中这部分的具体实现:
& & & & & & & & &&
& & &&& & & 从上图可以发现,在WriteIncrementalOTAPackage函数对DeviceSpecificParams对象进行初始化时确实使用的是target_zip而不是input_zip。而在releasetools.py脚本中使用的却是info.input_zip.read(),所以才会出现DeviceSpecificParams对象没有input_zip这个属性。由此我们找到了问题的所在(这是不是源码中的一个Bug?)。
& & & & 将releasetools.py脚本IncrementalOTA_InstallEnd(info)函数中的 target_bootloader=info.input_zip.
read(“RADIO/bootloader.img”)为:target_bootloader=info.target_zip.read(“RADIO/bootloader.img”),然后重新执行上面提到的制作差分包命令。就生成了我们需要的差分包update.zip。
二、&&&&&&&&&&差分包update.zip的更新测试& & &
& & & & & & & &&在上面制作差分包脚本命令中,生成差分包的原理是,参照第一个参数(target_zip),将第二个参数(source_zip)中不同的部分输出到第三个参数(output_zip)中。其中target_zip与source_zip的先后顺序不同,产生的差分包也将不同。
& & & & & 在实际的测试过程中,我们的增量包要删除之前添加的一个应用(在使用update.zip全包升级时增加的),其他的部分如内核都没有改动,所以生成的差分包很简单,只有META-INF这个文件夹。主要的不同都体现在updater-script脚本中,其中的#----start make changes& here----之后的部分就是做出改变的部分,最主要的脚本命令是:&delete(“/system/app/CheckUpdateAll.apk”
, “/system/recovery.img”);在具体更新时它将删除CheckUpdateAll.apk这个应用。
& & & & & 为了大家参考,还是把这个差分包的升级脚本贴出来,其对应的完全升级的脚本在第九篇已贴出:
[plain]&view
&&&&&&&& 在做更新测试时,我们要以target_zip系统为依据,也就是更新之前的开发板系统是用target_zip包升级后的系统。否则会更新就会失败,因为在更新时会从系统对应的目录下读取设备以及时间戳等信息(updater-script脚本一开始的部分),进行匹配正确后才进行下一步的安装。
&&&&&&&& 所有准备都完成后,将我们制作的差分包放到SD卡中,在Settings--&About Phone--&System Update--&Installed From SDCARD执行更新。最后更新完成并重启后,我们会发现之前的CheckUpdateAll.apk被成功删掉了,大功告成!
& & & &&至此终于将update.zip包以及其对应的差分包制作成功了,下面的文章开始具体分析制作的update.zip包在实际的更新中所走的过程!
感谢关注 Ithao123精品文库频道,是专门为互联网人打造的学习交流平台,全面满足互联网人工作与学习需求,更多互联网资讯尽在 IThao123!
Laravel是一套简洁、优雅的PHP Web开发框架(PHP Web Framework)。它可以让你从面条一样杂乱的代码中解脱出来;它可以帮你构建一个完美的网络APP,而且每行代码都可以简洁、富于表达力。
Hadoop是一个由Apache基金会所开发的分布式系统基础架构。
用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力进行高速运算和存储。
Hadoop实现了一个分布式文件系统(Hadoop Distributed File System),简称HDFS。HDFS有高容错性的特点,并且设计用来部署在低廉的(low-cost)硬件上;而且它提供高吞吐量(high throughput)来访问应用程序的数据,适合那些有着超大数据集(large data set)的应用程序。HDFS放宽了(relax)POSIX的要求,可以以流的形式访问(streaming access)文件系统中的数据。
Hadoop的框架最核心的设计就是:HDFS和MapReduce。HDFS为海量的数据提供了存储,则MapReduce为海量的数据提供了计算。
产品设计是互联网产品经理的核心能力,一个好的产品经理一定在产品设计方面有扎实的功底,本专题将从互联网产品设计的几个方面谈谈产品设计
随着国内互联网的发展,产品经理岗位需求大幅增加,在国内,从事产品工作的大部分岗位为产品经理,其实现实中,很多从事产品工作的岗位是不能称为产品经理,主要原因是对产品经理的职责不明确,那产品经理的职责有哪些,本专题将详细介绍产品经理的主要职责
IThao123周刊android差分包能手动卡刷吗_百度知道
android差分包能手动卡刷吗
您的回答被采纳后将获得:
系统奖励20(财富值+经验值)+难题奖励30(财富值+经验值)
我有更好的答案
第一次卡刷 我刷错了可以的,根据百度教程进行卡刷,第二次成功了,自己最好把教程全部记下来,一步一步做,我之前用软件安装谷歌框架安装不上去,迫于无奈下载了一个谷歌卡刷包
其他类似问题
为您推荐:
android的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁原帖地址&/blog/1344607稍作修改,因为直接用会有些错误根目录下两个命令:1、make&——会生成系统的img文件,system.img,boot.img,userdata.img,recovery.img2、make&otapackage——会生成sd卡用的全部系统升级包,如msm8660_surf-target_files-eng.xxxx.zip要生成差分升级包,需要先作出两个全升级包,然后根据这两个升级包做出差分升级包1、制作全系统升级包source目录下:.&build/envsetup.sh(.后有空格)choosecom&1&1&7&engmakemake&otapackage(或m otapackage)2、在用户名下建立一个目录,这个随意,在哪里建都行mkdir&~/OTA&3、将编译生成的out/target/product/msm8660_surf/obj/PACKAGING/target_files_intermediates/msm8660_surf-target_files-eng.xxxx.zip&拷贝并且更名放到目录~/OTA/msm8660_surf-target_files-eng.A.zip4、在代码中做一些修改,5、第二次make&otapackage6、第二次编译生成的out/target/product/msm8660_surf/obj/PACKAGING/target_files_intermediates/msm8660_surf-target_files-eng.xxxx.zip&拷贝并且更名放到目录/OTA/msm8660_surf-target_files-eng.tangzm_B.zip7、在src根目录下执行制作差分包的命令,必须在src根目录下执行,因为ota_from_target_files.py这个脚本里面写定了相对路径的引用文件。./build/tools/releasetools/ota_from_target_files&-x&pagesize=xxxx -k&xxxx&-d&MMC&-i&&A包&&&B包&& &差分包名&。如:&./build/tools/releasetools/ota_from_target_files&-x&pagesize=4096&-k&~/project/build/target/product/security/testkey&-d&mmc&-v&-i&~/OTA/msm8660_surf-target_files-eng.tangzm_B.zip&~/OTA/msm8660_surf-target_files-eng.tangzm_B.zip&~/OTA/update.zip~/OTA/update.zip&&就是升级用的差分包。注:在源码根目录下采用步骤7中命令格式( ./build/tools/releasetools/ota_from_target_files&-x&pagesize=xxxx -k&xxxx&-d&MMC&-i&&A包&&&B包&& &差分包名&。)不好用,因为我的是厂家自定义编译脚本,需要用到外部.py文件,所以修改了build/core/Makefile文件,该文件中默认好像执行./build/tools/releasetools/ota_from_target_files生成FullOtaPackage,我在调用位置采用步骤7命令格式保存修改,编译,根据log显示看到能够进行A、B包的差分比较。-x&pagesize=4096&是设置pagesize的大小,因为执行程序的过程中需要这个参数,否则会报错keyerror。&&&&&&&&&&&&&&&&&&&&&&还有一种情况不加-x,编译时出现keyerror错误,可能是引用外部key-value时,key不存在导致(如:keyerror:'/recovery'),我编译时折腾了一天,原因是编译脚本是厂家自定义,里面包含android系统既存编译命令m
otapackage,在自定义的脚本中键值对为(recovery,recovery),而在调用build/tools/releasetools/ota_from_target_files中函数时传的参数为&/recovery&。-k&是在签名的时候会用到的信息,不过貌似不加也可以成功,因为后面会执行java命令进行签名-d&mmc&是指使用文件格式为ext4,默认为mtd,即yaffs2。因为我们这个系统使用了ext4文件系统的支持-v&显示具体命令-i&A.zip&B.zip&Update.zip&为产生增量包,后面跟着源文件和差分包的路径名称不明确的话&,可以直接打开ota_from_target_files&里面有各个命令的说明。这个脚本被build/core/Makefile调用,因为Makefile中有引用外部变量所以不用特别设置,但是直接执行这个脚本则要设置import相关信息,好像很麻烦,还是用build/core/Makefile调用来的方便。
以上就介绍了Android差分包的制作,包括了方面的内容,希望对Android开发有兴趣的朋友有所帮助。
本文网址链接:/article/detail_117670.html
上一篇: 下一篇:

我要回帖

更多关于 android os是什么 的文章

 

随机推荐