本發(fā)明屬于通信技術(shù)領(lǐng)域,尤其涉及一種基于android系統(tǒng)的OTA升級方法及系統(tǒng)、android終端。
背景技術(shù):
OTA(Over-the-Air Technology,空中下載技術(shù))是通過移動通信(GSM或CDMA)的空中接口對SIM卡數(shù)據(jù)及應(yīng)用進(jìn)行遠(yuǎn)程管理的技術(shù)。
Android系統(tǒng)提供的標(biāo)準(zhǔn)軟件升級方法通常是OTA升級,其將升級內(nèi)容以zip壓縮包的形式通過腳本實現(xiàn)升級,目前OTA升級方式大致有以下幾種:通過打patch方法對特定文件進(jìn)行替換的增量升級;將全盤數(shù)據(jù)解壓出覆蓋的全量升級;基于底層block直接寫入的block-base方法。
目前較常用的一種OTA升級方法為:通過minizip工具將zip壓縮包中的文件依次解壓到磁盤分區(qū)中,并對每個文件賦予相應(yīng)的權(quán)限,但通過minizip工具將升級內(nèi)容解壓出來之后,賦予的時間戳是一個固定的數(shù)值,例如1217592000,換算成年月日的時間就是2008年8月1日,即OTA升級之后所有文件的時間戳均變?yōu)?008年8月1日,而android系統(tǒng)在升級之后判斷應(yīng)用程序是否需要更新的方法是基于時間戳和軟件版本號來確定,只有其中一個條件滿足即可進(jìn)行更新,若按照規(guī)范每次有修改都遞增版本號,按照此方法賦予固定的時間戳不會存在問題,升級后的數(shù)據(jù)會得到及時更新,但如忘記登記版本號或者同一個版本的軟件使用了不同的簽名,而升級的時間戳一樣,這種情況下軟件不能得到真正的更新,導(dǎo)致系統(tǒng)可能無法啟動,進(jìn)而給用戶帶來不便,降低用戶體驗。
技術(shù)實現(xiàn)要素:
本發(fā)明實施例提供了一種基于android系統(tǒng)的OTA升級方法及系統(tǒng)、、android終端,旨在解決現(xiàn)有技術(shù)中更新效率低給用戶帶來不便的問題。
本發(fā)明實施例是這樣實現(xiàn)的,一種基于android系統(tǒng)的OTA升級方法,包括:
獲取到升級包,所述升級包攜帶時間戳;
對所述升級包進(jìn)行簽名校驗;
當(dāng)校驗合格時,對所述升級包進(jìn)行解析,對解析后的每一升級腳本賦予所述時間戳,完成升級。
優(yōu)選地,獲取到升級包具體包括:
獲取所述升級包;
將所獲取的升級包以記錄形式存儲在恢復(fù)系統(tǒng)中。
優(yōu)選地,所述獲取到升級包之后、對所述升級包進(jìn)行簽名校驗之前還包括:
讀取所述升級包的路徑;
掛載所述升級包的路徑。
優(yōu)選地,對所述升級包進(jìn)行簽名校驗具體為:
判斷所述升級包的簽名是否與預(yù)設(shè)簽名一致;
當(dāng)簽名一致時,校驗合格;
當(dāng)簽名不一致時,校驗不合格,停止進(jìn)程。
優(yōu)選地,當(dāng)校驗合格時,對所述升級包進(jìn)行解析,對解析后的每一升級腳本賦予所述時間戳,完成升級具體包括:
從所述升級包中獲取二進(jìn)制更新程序;
獲取所述升級包的時間戳;
基于所述二進(jìn)制更新程序及所述升級包的路徑創(chuàng)建對應(yīng)的更新進(jìn)程;
所述更新進(jìn)程對所述升級包進(jìn)行解析,對解析后的每一升級腳本賦予所述時間戳;
升級完成,向所述恢復(fù)系統(tǒng)反饋完成信息。
優(yōu)選地,所述更新進(jìn)程對所述升級包進(jìn)行解析,對解析后的每一升級腳本賦予所述時間戳具體包括:
所述更新進(jìn)程對所述升級包進(jìn)行解壓,獲得解壓后的一條以上升級腳本;
在執(zhí)行每一條所述升級腳本的預(yù)設(shè)語句時設(shè)置所述時間戳;
確認(rèn)當(dāng)前任一升級腳本已被賦予所述時間戳,退出進(jìn)程。
本發(fā)明還提供一種基于android系統(tǒng)的OTA升級系統(tǒng),包括:
獲取模塊,用于獲取到升級包,所述升級包攜帶時間戳;
校驗?zāi)K,用于對所述升級包進(jìn)行簽名校驗;
升級模塊,用于當(dāng)校驗合格時,對所述升級包進(jìn)行解析,對解析后的每一升級腳本賦予所述時間戳,完成升級。
優(yōu)選地,所述OTA升級系統(tǒng)還包括:
路徑讀取模塊,用于讀取所述升級包的路徑;
掛載模塊,用于掛載所述升級包的路徑。
優(yōu)選地,所述升級模塊具體包括:
程序獲取單元,用于從所述升級包中獲取二進(jìn)制更新程序;
時間戳獲取單元,用于獲取所述升級包的時間戳;
創(chuàng)建單元,用于基于所述二進(jìn)制更新程序及所述升級包的路徑創(chuàng)建對應(yīng)的更新進(jìn)程;
賦予單元,用于對所述升級包進(jìn)行解析,對解析后的每一升級腳本賦予所述時間戳;
反饋單元,用于在升級完成時,向所述恢復(fù)系統(tǒng)反饋完成信息。
本發(fā)明還提供一種android終端,包括OTA升級系統(tǒng),所述OTA升級系統(tǒng)包括:
獲取模塊,用于獲取到升級包,所述升級包攜帶時間戳;
校驗?zāi)K,用于對所述升級包進(jìn)行簽名校驗;
升級模塊,用于當(dāng)校驗合格時,對所述升級包進(jìn)行解析,對解析后的每一升級腳本賦予所述時間戳,完成升級。
在本發(fā)明實施例中,升級過程中,對升級包進(jìn)行解析,對解析后的每一升級腳本賦予時間戳,保證每次升級之后的文件的時間戳與編譯時的時間戳一致,提供升級效率,給用于帶來便利,提供用戶體驗。
附圖說明
圖1是本發(fā)明第一實施例提供的一種基于android系統(tǒng)的OTA升級方法的流程圖;
圖2是本發(fā)明第一實施例提供的一種基于android系統(tǒng)的OTA升級方法的步驟S3的具體流程圖;
圖3是本發(fā)明第二實施例提供的一種基于android系統(tǒng)的OTA升級系統(tǒng)的結(jié)構(gòu)圖;
圖4是本發(fā)明的第二實施例提供的一種基于android系統(tǒng)的OTA升級系統(tǒng)的升級模塊3的具體結(jié)構(gòu)圖。
具體實施方式
為了使本發(fā)明的目的、技術(shù)方案及優(yōu)點(diǎn)更加清楚明白,以下結(jié)合附圖及實施例,對本發(fā)明進(jìn)行進(jìn)一步詳細(xì)說明。應(yīng)當(dāng)理解,此處所描述的具體實施例僅僅用以解釋本發(fā)明,并不用于限定本發(fā)明。
本發(fā)明實施例中,一種基于android系統(tǒng)的OTA升級方法,包括:獲取到升級包,所述升級包攜帶時間戳;對所述升級包進(jìn)行簽名校驗;當(dāng)校驗合格時,對所述升級包進(jìn)行解析,對解析后的每一升級腳本賦予所述時間戳,完成升級。
為了說明本發(fā)明所述的技術(shù)方案,下面通過具體實施例來進(jìn)行說明。
實施例一:
圖1示出了本發(fā)明第一實施例提供的一種基于android系統(tǒng)的OTA升級方法的流程圖,包括:
步驟S1、獲取到升級包;
其中,該步驟S1包括:獲取升級包,并將該升級包以記錄形式存儲在恢復(fù)系統(tǒng)(recovery)中,該升級包攜帶時間戳。
具體地,android系統(tǒng)中的升級應(yīng)用獲取到升級包后進(jìn)入recovery,以文件記錄的方式存儲在/cache/recovery/command文件里。
步驟S2、對升級包進(jìn)行簽名校驗;
具體地,需要對獲取的升級包進(jìn)行簽名校驗,判斷升級包的簽名與預(yù)設(shè)簽名是否一致,當(dāng)不一致時確認(rèn)為校驗失敗,退出升級,結(jié)束進(jìn)程,當(dāng)一致時確認(rèn)校驗合格,轉(zhuǎn)到步驟S3;
步驟S3,對升級包進(jìn)行解析,對解析后的每一升級腳本賦予時間戳,完成升級。
在本發(fā)明的一個優(yōu)選方案中,所述步驟S1之后,步驟S2之前還可包括:
步驟S4、讀取升級包的路徑;
步驟S5、掛載升級包的路徑;
具體的,對存儲升級包的存放區(qū)或者外設(shè)進(jìn)行掛載操作。
優(yōu)選地,如圖2所示,為本發(fā)明第一實施例提供的一種基于android系統(tǒng)的OTA升級方法的步驟S3的具體流程圖,上述步驟S3具體包括:
步驟S31、從升級包中獲取二進(jìn)制更新程序;
具體地,從升級包中抽取二進(jìn)制更新程序(update-binary);
步驟S32、獲取升級包的時間戳;
步驟S33、基于二進(jìn)制更新程序及升級包的路徑創(chuàng)建對應(yīng)的更新進(jìn)程;
具體地,通過fork方法創(chuàng)建更新進(jìn)程,通過該更新進(jìn)程將該二進(jìn)制更新程序運(yùn)行起來,并將升級包的路徑作為fork的一個參數(shù)傳遞到所述更新進(jìn)程中,使得恢復(fù)系統(tǒng)監(jiān)聽該更新程序,并于該更新程序進(jìn)行交互,即在恢復(fù)系統(tǒng)下讓該二進(jìn)制更新程序運(yùn)行起來。
步驟S34、更新進(jìn)程對升級包進(jìn)行解析,對解析后的每一升級腳本賦予時間戳;
具體地,對升級包進(jìn)行解壓,獲得解壓后的升級腳本,該升級腳本至少包括一條以上,解壓之后執(zhí)行每一條升級腳本,在執(zhí)行每一條升級腳本時,運(yùn)行到預(yù)設(shè)語句(package_extract_dir)時,設(shè)置上述時間戳,執(zhí)行每一條腳本時都重復(fù)上述步驟,直到每一條升級腳本都被賦予時間戳后,退出進(jìn)程。進(jìn)一步地,更新進(jìn)程會將升級包的升級腳本都解壓出來,一條一條地解析,并執(zhí)行對應(yīng)的動作,在執(zhí)行到腳本語句“package_extract_dir”時,將獲取的時間戳傳遞給minizip,minizip在運(yùn)行該腳本語句時,會將時間戳賦予解壓出來的文件。待所有的升級腳本都執(zhí)行完后,更新進(jìn)程完成升級任務(wù),將資源釋放退出,轉(zhuǎn)到步驟S35。
步驟S35、升級完成,向恢復(fù)系統(tǒng)反饋完成信息;
當(dāng)升級完成后,向恢復(fù)系統(tǒng)反饋完成消息(即升級完成消息),恢復(fù)系統(tǒng)會重啟,進(jìn)入android系統(tǒng),此時每一個文件都被賦予時間戳,實現(xiàn)文件升級。
本實施例中,升級過程中,對升級包進(jìn)行解析,對解析后的每一升級腳本賦予時間戳,保證每次升級之后的文件的時間戳與編譯時的時間戳一致,提供升級效率,給用于帶來便利,提供用戶體驗。
實施例二:
圖3示出了本發(fā)明第二實施例提供的一種基于android系統(tǒng)的OTA升級系統(tǒng)的結(jié)構(gòu)圖,包括:獲取模塊1、與所述獲取模塊1連接的校驗?zāi)K2、與校驗?zāi)K2連接的升級模塊3,其中:
獲取模塊1,用于獲取到升級包,所述升級包攜帶時間戳;
其中,該獲取模塊1包括獲取單元及與其連接的存儲單元:
獲取單元,用于獲取升級包;
存儲單元,用于將所獲取的升級包以記錄形式存儲在恢復(fù)系統(tǒng)中,該升級包攜帶對應(yīng)的時間戳。
具體地,獲取到升級包后進(jìn)入recovery,以文件記錄的方式存儲在/cache/recovery/command文件里。
校驗?zāi)K2,用于對所述升級包進(jìn)行簽名校驗;
具體地,該校驗?zāi)K2需要對獲取的升級包進(jìn)行簽名校驗,判斷升級包的簽名與預(yù)設(shè)簽名是否一致,當(dāng)不一致時確認(rèn)為校驗失敗,退出升級,結(jié)束進(jìn)程,當(dāng)一致時確認(rèn)校驗合格,向升級模塊3反饋。
升級模塊3,用于當(dāng)校驗合格時,對所述升級包進(jìn)行解析,對解析后的每一升級腳本賦予所述時間戳,完成升級。
具體地,對升級包進(jìn)行解析,對解析后的每一升級腳本賦予時間戳,完成升級。
在本發(fā)明的一個優(yōu)選方案中,該OTA升級系統(tǒng)還可包括:與獲取模塊1連接的路徑讀取模塊4、與路徑讀取模塊4連接的掛載模塊5,其中:
路徑讀取模塊4,用于讀取升級包的路徑;
掛載模塊5,用于掛載升級包的路徑。
具體的,對存儲升級包的存放區(qū)或者外設(shè)進(jìn)行掛載操作。
如圖4所示,為本發(fā)明的第二實施例提供的一種基于android系統(tǒng)的文件的OTA升級系統(tǒng)的升級模塊3的具體結(jié)構(gòu)圖,該升級模塊3具體包括:程序獲取單元31、與程序獲取單元31連接的時間戳獲取單元32、與時間戳獲取單元32連接的創(chuàng)建單元33、與創(chuàng)建單元連接的賦予單元34、與賦予單元連接的反饋單元35;
程序獲取單元31,用于從所述升級包中獲取二進(jìn)制更新程序;
具體地,從升級包中抽取二進(jìn)制更新程序(update-binary);
時間戳獲取單元32,用于獲取所述升級包的時間戳;
創(chuàng)建單元33,用于基于所述二進(jìn)制更新程序及所述升級包的路徑創(chuàng)建對應(yīng)的更新進(jìn)程;
具體地,通過fork方法創(chuàng)建更新進(jìn)程,通過該更新進(jìn)程將該二進(jìn)制更新程序運(yùn)行起來,并將升級包的路徑作為fork的一個參數(shù)傳遞到所述更新進(jìn)程中,使得恢復(fù)系統(tǒng)監(jiān)聽該更新程序,并于該更新程序進(jìn)行交互,即在恢復(fù)系統(tǒng)下讓該二進(jìn)制更新程序運(yùn)行起來。
賦予單元34,用于對所述升級包進(jìn)行解析,對解析后的每一升級腳本賦予所述時間戳;
具體地,賦予單元34即為更新進(jìn)程,對升級包進(jìn)行解壓,獲得解壓后的升級腳本,該升級腳本至少包括一條以上;解壓之后執(zhí)行每一條升級腳本,在執(zhí)行每一條升級腳本時,運(yùn)行到預(yù)設(shè)語句(package_extract_dir)時,設(shè)置上述時間戳,執(zhí)行每一條腳本時都重復(fù)上述步驟,直到每一條升級腳本都被賦予時間戳后,退出進(jìn)程。進(jìn)一步地,更新進(jìn)程會將升級包的升級腳本都解壓出來,一條一條地解析,并執(zhí)行對應(yīng)的動作,在執(zhí)行到腳本語句“package_extract_dir”時,將獲取的時間戳傳遞給minizip,minizip在運(yùn)行該腳本語句時,會將時間戳賦予解壓出來的文件。待所有的升級腳本都執(zhí)行完后,更新進(jìn)程完成升級任務(wù),將資源釋放退出,并反饋給反饋單元35。
反饋單元35,用于在升級完成時,向所述恢復(fù)系統(tǒng)反饋完成信息。
當(dāng)升級完成后,向恢復(fù)系統(tǒng)反饋完成消息(即升級完成消息),恢復(fù)系統(tǒng)會重啟,進(jìn)入android系統(tǒng),此時每一個文件都被賦予時間戳,實現(xiàn)文件升級。
本實施例中,在升級過程中,對升級包進(jìn)行解析,對解析后的每一升級腳本賦予時間戳,保證每次升級之后的文件的時間戳與編譯時的時間戳一致,提供升級效率,給用于帶來便利,提供用戶體驗。
本發(fā)明還提供一種android終端,該android終端可為任何android移動終端,例如android手機(jī)、android電視等,此處對此不作限制,該android終端具有現(xiàn)有的android終端的基本功能及結(jié)構(gòu),該android終端還包括上述實施例所述的OTA升級系統(tǒng),該OTA升級系統(tǒng)的具體結(jié)構(gòu)及工作原理與上述實施例的描述基本一致,具體可參照上述實施例,此處不再贅述。
本發(fā)明中,升級過程中,對升級包進(jìn)行解析,對解析后的每一升級腳本賦予時間戳,保證每次升級之后的文件的時間戳與編譯時的時間戳一致,提供升級效率,給用于帶來便利,提供用戶體驗。
本領(lǐng)域普通技術(shù)人員可以意識到,結(jié)合本文中所公開的實施例描述的各示例的單元及算法步驟,能夠以電子硬件、或者計算機(jī)軟件和電子硬件的結(jié)合來實現(xiàn)。這些功能究竟以硬件還是軟件方式來執(zhí)行,取決于技術(shù)方案的特定應(yīng)用和設(shè)計約束條件。
專業(yè)技術(shù)人員可以對每個特定的應(yīng)用來使用不同方法來實現(xiàn)所描述的功能,但是這種實現(xiàn)不應(yīng)認(rèn)為超出本發(fā)明的范圍。以上所述,僅為本發(fā)明的具體實施方式,但本發(fā)明的保護(hù)范圍并不局限于此,任何熟悉本技術(shù)領(lǐng)域的技術(shù)人員在本發(fā)明揭露的技術(shù)范圍內(nèi),可輕易想到變化或替換,都應(yīng)涵蓋在本發(fā)明的保護(hù)范圍之內(nèi)。因此,本發(fā)明的保護(hù)范圍應(yīng)所述以權(quán)利要求的保護(hù)范圍為準(zhǔn)。