android4.0 升级中python脚本解析ota_from_target_files<一>

来源:互联网 发布:百度seo邓煌生 编辑:程序博客网 时间:2024/06/06 18:39

最近在看android中recovery模块,废话少说,直接介绍升级中重要的python脚本ota_from_target_files

即使你没有接触过python脚本也没关系,里面的语句通俗易懂。

ota_from_target_files中第一行#!/usr/bin/python是固定格式,相当于c的#inlcude<>,python中import XXX,XXX相当于c标准库中的函数,里面已经实现好了一些方法,可以直接用

脚本都有一个__name__和__main__属性,用来指定从这个函数开始运行。ota_from_target_files也不例外


831行中的common方法是在跟ota_from_target_files同级目录的common.py来实现的,在脚本开始的时候有调import common。832行开始跳转到main函数


main刚开始是定义了一个模块来解析参数,736-758


760-771调用common的ParseOptionsl来解析函数参数,其中getopt.getopt这个函数需要注意下,该函数会返回函数返回值有两个,第一个是存储指令和指令后面参数的类似二维数组的东西,第二个返回值为参数中出去指令和指令参数的字符串。args为第二个参数。长度为2 ,其中args【0】为升级需要的一些文件镜像等组成的zip包,args【1】为重新打包后形成的zip包的存放路径。


777行是判断是否需要别的脚本,兼容以前的版本,4.0是没有的。781行的两个变量是调用UnzipTemp函数返回的俩个值,input_tmp是解压完升级包后存放升级包的路径,。该路径是不可见的,没有fd。input_zip=zipfile.ZipFile(filename, "r"),该变量存储了升级zip包里的所以文件。

784行调用LoadInfoDict来解析上次的input_zip,把zip包里的文件逐个解析出来,放到一个大的数组里,用info_dict来存储起来。该数组主要是存放文件的名字。需要注意的是recovery.fstab也是在这时候被存放的info_dict里面的。

790行看是否会用到其他的工具。get(“a”,b)函数是在字符串里面寻找a,如果有则返回相应信息,如果没有返回b,有点像哈希表。

795是生成个临时目录,该目录也是不可见的。用该目录创建个可写的zipfile压缩文件。然后调用wirtefullotapackage函数来吧input_zip加上些别的内容写道output_zip目录

这就是我们最后需要的升级包,

802是加密需要的信息。


819写完文件后,关闭。821把形成的zip包存放到args[1]指定的路径。完成


这是main函数的主流程,其中大部分代码都不需要我们来改,看懂就可以,其中还有很多的细节问题。比如recover.fstab的路径,通过getopt来获取参数,zipfile函数通过read()方法来返回zip包里指定的文件。

原创粉丝点击