android4.0 升級中python腳本解析ota_from_target_files

最近在看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包裏指定的文件。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章