預(yù)先設(shè) 置了第一接口函數(shù),用于指示終端設(shè)備需要獲取的屬性參數(shù)類型,從而終端設(shè)備在解析該 鏡像文件升級(jí)包的過(guò)程中,調(diào)用預(yù)設(shè)的第一接口函數(shù)獲取對(duì)應(yīng)的終端設(shè)備屬性信息。由于 不同的分區(qū)要求的屬性參數(shù)類型不同,因此,所獲取的終端設(shè)備屬性信息也不同,舉例說(shuō)明 如下:
[0031]針對(duì)logo分區(qū)的第一接口函數(shù)需要獲取的屬性參數(shù)類型是版本信息,因此,在調(diào) 用第一接口函數(shù)的過(guò)程中,從操作系統(tǒng)的屬性信息中獲取終端設(shè)備的版本信息;或者,針對(duì) system分區(qū)的第一接口函數(shù)需要獲取的屬性參數(shù)類型是區(qū)域信息,因此,在調(diào)用第一接口 函數(shù)的過(guò)程中,從操作系統(tǒng)中獲取終端設(shè)備的區(qū)域信息;或者,針對(duì)modem分區(qū)的第一接口 函數(shù)需要獲取的屬性參數(shù)類型是運(yùn)營(yíng)商信息,因此,在調(diào)用第一接口函數(shù)的過(guò)程中,從客戶 識(shí)別模塊中獲取終端設(shè)備的運(yùn)營(yíng)商信息。
[0032]步驟103,調(diào)用預(yù)設(shè)的第二接口函數(shù)匹配與所述屬性信息對(duì)應(yīng)的分支函數(shù),其中, 所述分支函數(shù)包括:分區(qū)位置和補(bǔ)下路徑。
[0033] 鏡像文件升級(jí)包中預(yù)先設(shè)置了第二接口函數(shù),用于匹配與獲取的終端設(shè)備屬性信 息對(duì)應(yīng)的分支函數(shù),不同的第二接口函數(shù)對(duì)應(yīng)不同的匹配過(guò)程,舉例說(shuō)明如下:
[0034]若預(yù)設(shè)的分支函數(shù)的數(shù)量為兩個(gè)A和B,則第二接口函數(shù)為判斷功能接口函數(shù),從 而通過(guò)判斷功能接口函數(shù)匹配與所述屬性信息對(duì)應(yīng)的分支函數(shù)是否與A匹配,如果與A匹 配,則確定分支函數(shù)為A,如果與A不匹配,則確定分支函數(shù)為B。
[0035]若所述分支函數(shù)的數(shù)量大于兩個(gè),則第二接口函數(shù)為查詢功能接口函數(shù),通過(guò)查 詢功能接口函數(shù)一一匹配,從而確定與所述屬性信息對(duì)應(yīng)的分支函數(shù)。
[0036]其中,所述分支函數(shù)包括:分區(qū)位置和補(bǔ)下路徑,分區(qū)位置用于指示對(duì)哪個(gè)分區(qū)進(jìn) 行鏡像文件升級(jí)操作,補(bǔ)下路徑用于指示如何獲取進(jìn)行鏡像文件升級(jí)的補(bǔ)下文件,從而根 據(jù)分區(qū)位置和補(bǔ)下路徑對(duì)終端設(shè)備的分區(qū)進(jìn)行鏡像文件升級(jí)處理。
[0037]在另一個(gè)實(shí)施例中,為了進(jìn)一步地提高處理可靠性,所述分支函數(shù)還包括:與原鏡 像文件對(duì)應(yīng)的容量大小和MD5碼、W及與目標(biāo)鏡像文件對(duì)應(yīng)的容量大小和MD5碼,其中,MD5 碼是用于校驗(yàn)文件完整性的唯一標(biāo)識(shí)碼,是通過(guò)對(duì)文件內(nèi)容進(jìn)行哈希算法生成的,當(dāng)文件 內(nèi)容發(fā)生變化時(shí),對(duì)應(yīng)的MD5碼也發(fā)生變化。通過(guò)與原鏡像文件對(duì)應(yīng)的容量大小和MD5碼、W 及與目標(biāo)鏡像文件對(duì)應(yīng)的容量大小和MD5碼可W校驗(yàn)升級(jí)是否出現(xiàn)錯(cuò)誤,提高了處理的可 靠性。
[0038]本申請(qǐng)實(shí)施例的鏡像文件升級(jí)處理方法,首先獲取終端設(shè)備的分區(qū)鏡像文件升級(jí) 包;在解析所述鏡像文件升級(jí)包的過(guò)程中,調(diào)用預(yù)設(shè)的第一接口函數(shù)獲取終端設(shè)備的屬性 信息;調(diào)用預(yù)設(shè)的第二接口函數(shù)匹配與所述屬性信息對(duì)應(yīng)的分支函數(shù),其中,所述分支函數(shù) 包括:分區(qū)位置和補(bǔ)下路徑。由此,實(shí)現(xiàn)了終端設(shè)備根據(jù)應(yīng)用需要對(duì)不同分區(qū)的鏡像文件進(jìn) 行自適應(yīng)升級(jí)處理,提高了處理效率和準(zhǔn)確性,節(jié)約了開發(fā)成本。
[0039]圖2是本申請(qǐng)另一個(gè)實(shí)施例的鏡像文件升級(jí)處理方法的流程圖。
[0040] 如圖2所示,該鏡像文件升級(jí)處理方法具體包括W下步驟:
[0041] 步驟201,通過(guò)移動(dòng)通信網(wǎng)的空中接口與升級(jí)服務(wù)設(shè)備建立連接,應(yīng)用空中下載技 術(shù)從所述升級(jí)服務(wù)設(shè)備中獲取所述分區(qū)鏡像文件升級(jí)包。
[0042] 具體地,通過(guò)移動(dòng)通信網(wǎng)的空中接口與升級(jí)服務(wù)設(shè)備建立連接,其中,移動(dòng)通信網(wǎng) 可W包括GSM或CDMA,空中接口可W采用WAP、GPRS、CDMA1X及短消息技術(shù)。
[0043]與升級(jí)服務(wù)設(shè)備建立連接后,應(yīng)用空中下載技術(shù)從升級(jí)服務(wù)設(shè)備中獲取分區(qū)鏡像 文件升級(jí)包。分區(qū)鏡像文件升級(jí)包是預(yù)先開發(fā)的兼容了各個(gè)分區(qū)鏡像文件升級(jí)應(yīng)用場(chǎng)景的 分區(qū)鏡像文件升級(jí)包,所有待進(jìn)行分區(qū)鏡像文件升級(jí)的終端設(shè)備都獲取該鏡像文件升級(jí) 包。
[0044]步驟202,在解析所述鏡像文件升級(jí)包的過(guò)程中,調(diào)用預(yù)設(shè)的第一接口函數(shù)獲取終 端設(shè)備的屬性信息。
[0045] 步驟203,調(diào)用預(yù)設(shè)的第二接口函數(shù)匹配與所述屬性信息對(duì)應(yīng)的分支函數(shù),其中, 所述分支函數(shù)包括:分區(qū)位置和補(bǔ)下路徑。
[0046] 本實(shí)施例中的步驟202和步驟203的具體實(shí)施過(guò)程參見圖1所示實(shí)施例中的步驟 102和步驟103,此處不再寶述。
[0047]步驟204,根據(jù)所述補(bǔ)下路徑獲取與所述屬性信息對(duì)應(yīng)的補(bǔ)下文件,將所述補(bǔ)下文 件寫入所述分區(qū)位置進(jìn)行升級(jí)操作。
[0048] 具體地,根據(jù)匹配的分支函數(shù)中的補(bǔ)下路徑獲取與所述屬性信息對(duì)應(yīng)的補(bǔ)下文 件,并根據(jù)分區(qū)位置將該補(bǔ)下文件寫入對(duì)應(yīng)的分區(qū),從而對(duì)該分區(qū)的鏡像文件進(jìn)行升級(jí)操 作。
[0049]為了更加清楚的描述鏡像文件升級(jí)包生成過(guò)程,舉例說(shuō)明:制作升級(jí)包升級(jí)腳本 時(shí)增加命令語(yǔ)句,假如只有巧巾分支函數(shù)的情況,增加ifelse的功能接口IfElse化;將命令 ifelse與功能接口IfElse化關(guān)聯(lián),功能接口會(huì)編譯成一個(gè)解析程序(update-binary),當(dāng)解 析程序在解析升級(jí)腳本進(jìn)行升級(jí)時(shí)遇到命令ifelse時(shí),其正在執(zhí)行是功能接口IfEls沁η。 制作系統(tǒng)升級(jí)包(OTA),包括升級(jí)腳本,解析程序,補(bǔ)下文件等,其結(jié)構(gòu)見升級(jí)腳本update-script格式示例如下:
[(K)加]
[0051]其中,常用命令對(duì)應(yīng)操作示例包括:掛載分區(qū)mount、格式化分區(qū)format、設(shè)置進(jìn)度 條百分比show_p;rogress、解壓縮文件夾到指定目錄package_extract_di;r、解壓縮文件到 指定路徑package_extract_file、設(shè)置文件的權(quán)限(類似于chmod)set_pe;rm、獲取系統(tǒng)屬性 邑etprop、打補(bǔ)了apply-patch。
[0052] 將系統(tǒng)升級(jí)包拷入手機(jī),運(yùn)行安裝命令,即可進(jìn)入恢復(fù)模式通過(guò)解析程序解析升 級(jí)腳本即可完成不同區(qū)域升級(jí)不同鏡像的目的。為了說(shuō)明終端設(shè)備對(duì)升級(jí)包解析過(guò)程,W modem分區(qū)舉例說(shuō)明如下:
[0053] ifelse(邑etprop("persist.sys.oppo.re邑ion")= ="MX",
[0054] (apply_patch("EMMC:/dev/block/platform/msm_sdcc.1/by-name/modem: 58459648:b81e2f93c04848550213f92161fbcdabe7490ff0:58492416: 6f501494ab87aafl6d3549c2f06a00e92297448e",
[0055] 6f501494ab87aaf16d3549c2f06a00e92297448e,58492416,
[0056] b81e2f93c04848550213f92161fbcdabe7490ff0,
[0057] package_extract_file("patch/N0N-HL0S_MX.bin.p"));),
[005引假如判斷為MX區(qū)域,執(zhí)行apply_patch分支函數(shù)完成mod