本發(fā)明涉及計(jì)算機(jī)技術(shù)領(lǐng)域,特別是涉及一種軟件更新方法和系統(tǒng)。
背景技術(shù):
當(dāng)軟件需要進(jìn)行更新時(shí),在傳統(tǒng)方式中,一般是需要安裝軟件的終端,例如手機(jī)、平板電腦、手提電腦等從服務(wù)器上下載完整的最新的安裝包,下載完成后再進(jìn)行安裝。但是隨著軟件的升級(jí)更新,完整的最新的安裝包會(huì)越來(lái)越大,在進(jìn)行下載時(shí)往往需要占據(jù)較大的帶寬并消耗大量的流量,下載的時(shí)間也越來(lái)越長(zhǎng)。
技術(shù)實(shí)現(xiàn)要素:
基于此,有必要提供一種軟件更新方法,能夠有效減少安裝包下載時(shí)占據(jù)的帶寬及消耗的流量,縮短下載時(shí)間。
此外,還有必要提供一種軟件更新系統(tǒng),能夠有效減少安裝包下載時(shí)占據(jù)的帶寬及消耗的流量,縮短下載時(shí)間。
一種軟件更新方法,包括以下步驟:
接收由客戶(hù)端發(fā)送的軟件的標(biāo)識(shí)信息;
根據(jù)所述標(biāo)識(shí)信息判斷所述軟件是否需要更新;
若所述軟件需要更新,則獲取與所述標(biāo)識(shí)信息匹配的舊包及新包,并分別生成與所述舊包對(duì)應(yīng)的第一映射及與所述新包對(duì)應(yīng)的第二映射;
比較所述第一映射和所述第二映射,得到保持不變文件列表、增加文件列表及更新文件列表;
根據(jù)所述增加文件列表將增加的文件寫(xiě)入升級(jí)包中;
根據(jù)所述更新文件列表生成各個(gè)更新的文件的差分文件,將所述差分文件寫(xiě)入所述升級(jí)包中;
根據(jù)所述保持不變文件列表、增加文件列表及更新文件列表生成對(duì)應(yīng)的保 持不變的文件信息、增加的文件信息及更新的文件信息;
將所述保持不變的文件信息、增加的文件信息及更新的文件信息寫(xiě)入所述升級(jí)包中;
將所述升級(jí)包發(fā)送給所述客戶(hù)端。
在其中一個(gè)實(shí)施例中,所述標(biāo)識(shí)信息包括標(biāo)識(shí)符和版本號(hào),所述獲取與所述標(biāo)識(shí)信息匹配的舊包及新包,并分別生成與所述舊包對(duì)應(yīng)的第一映射及與所述新包對(duì)應(yīng)的第二映射的步驟,具體包括:
獲取與所述標(biāo)識(shí)符及版本號(hào)匹配的舊包;
讀取所述舊包中各個(gè)文件的文件名及對(duì)應(yīng)的摘要信息;
根據(jù)所述舊包中各個(gè)文件的文件名及對(duì)應(yīng)的摘要信息生成第一映射;
獲取與所述標(biāo)識(shí)符匹配的新包;
讀取所述新包中各個(gè)文件的文件名及對(duì)應(yīng)的摘要信息;
根據(jù)所述新包中各個(gè)文件的文件名及對(duì)應(yīng)的摘要信息生成第二映射。
在其中一個(gè)實(shí)施例中,在所述將所述升級(jí)包發(fā)送給所述客戶(hù)端的步驟之前,還包括:
獲取所述新包的簽名文件;
將所述簽名文件寫(xiě)入所述升級(jí)包。
一種軟件更新方法,包括以下步驟:
獲取軟件的標(biāo)識(shí)信息,并根據(jù)所述標(biāo)識(shí)信息向服務(wù)端發(fā)送更新請(qǐng)求;
若所述軟件需要更新,則下載升級(jí)包,并生成安裝包;
根據(jù)所述升級(jí)包中的保持不變的文件信息從與所述標(biāo)識(shí)信息匹配的舊包中獲取對(duì)應(yīng)的保持不變的文件,并將所述保持不變的文件寫(xiě)入所述安裝包中;
根據(jù)所述升級(jí)包中的增加的文件信息從所述升級(jí)包中獲取增加的文件,并將所述增加的文件寫(xiě)入所述安裝包中;
根據(jù)所述升級(jí)包中的更新的文件信息從所述升級(jí)包中獲取各個(gè)更新的文件的差分文件,將所述差分文件與所述舊包中各個(gè)對(duì)應(yīng)的文件合并,并將合并后的文件寫(xiě)入所述安裝包中;
調(diào)用預(yù)設(shè)接口安裝所述安裝包,完成所述軟件的更新。
在其中一個(gè)實(shí)施例中,在所述調(diào)用預(yù)設(shè)接口完成所述軟件的更新的步驟之前,還包括:
獲取所述升級(jí)包中的簽名文件,并將所述簽名文件寫(xiě)入所述安裝包中;
讀取所述舊包的渠道號(hào),將所述渠道號(hào)寫(xiě)入所述安裝包中,生成對(duì)應(yīng)的渠道更新包。
一種軟件更新系統(tǒng),包括:
接收模塊,用于接收由客戶(hù)端發(fā)送的軟件的標(biāo)識(shí)信息;
判斷模塊,用于根據(jù)所述標(biāo)識(shí)信息判斷所述軟件是否需要更新;
生成映射模塊,用于若所述軟件需要更新,則獲取與所述標(biāo)識(shí)信息匹配的舊包及新包,并分別生成與所述舊包對(duì)應(yīng)的第一映射及與所述新包對(duì)應(yīng)的第二映射;
比較模塊,用于比較所述第一映射和所述第二映射,得到保持不變文件列表、增加文件列表及更新文件列表;
寫(xiě)入模塊,用于根據(jù)所述增加文件列表將增加的文件寫(xiě)入升級(jí)包中;
所述寫(xiě)入模塊還用于根據(jù)所述更新文件列表生成各個(gè)更新的文件的差分文件,將所述差分文件寫(xiě)入所述升級(jí)包中;
生成文件信息模塊,用于根據(jù)所述保持不變文件列表、增加文件列表及更新文件列表生成對(duì)應(yīng)的保持不變的文件信息、增加的文件信息及更新的文件信息;
所述寫(xiě)入模塊還用于將所述保持不變的文件信息、增加的文件信息及更新的文件信息寫(xiě)入所述升級(jí)包中;
發(fā)送模塊,用于將所述升級(jí)包發(fā)送給所述客戶(hù)端。
在其中一個(gè)實(shí)施例中,所述標(biāo)識(shí)信息包括標(biāo)識(shí)符和版本號(hào),所述生成映射模塊包括:
獲取單元,用于獲取與所述標(biāo)識(shí)符及版本號(hào)匹配的舊包;
讀取單元,用于讀取所述舊包中各個(gè)文件的文件名及對(duì)應(yīng)的摘要信息;
生成單元,用于根據(jù)所述舊包中各個(gè)文件的文件名及對(duì)應(yīng)的摘要信息生成 第一映射;
所述獲取單元還用于獲取與所述標(biāo)識(shí)符匹配的新包;
所述讀取單元還用于讀取所述新包中各個(gè)文件的文件名及對(duì)應(yīng)的摘要信息;
所述生成單元還用于根據(jù)所述新包中各個(gè)文件的文件名及對(duì)應(yīng)的摘要信息生成第二映射。
在其中一個(gè)實(shí)施例中,所述軟件更新系統(tǒng)還包括:
獲取模塊,用于獲取所述新包的簽名文件;
所述寫(xiě)入模塊還用于將所述簽名文件寫(xiě)入所述升級(jí)包。
一種軟件更新系統(tǒng),包括:
發(fā)送模塊,用于獲取軟件的標(biāo)識(shí)信息,并根據(jù)所述標(biāo)識(shí)信息向服務(wù)端發(fā)送更新請(qǐng)求;
下載模塊,用于若所述軟件需要更新,則下載升級(jí)包,并生成安裝包;
寫(xiě)入模塊,用于根據(jù)所述升級(jí)包中的保持不變的文件信息從與所述標(biāo)識(shí)信息匹配的舊包中獲取對(duì)應(yīng)的保持不變的文件,并將所述保持不變的文件寫(xiě)入所述安裝包中;
所述寫(xiě)入模塊還用于根據(jù)所述升級(jí)包中的增加的文件信息從所述升級(jí)包中獲取增加的文件,并將所述增加的文件寫(xiě)入所述安裝包中;
所述寫(xiě)入模塊還用于根據(jù)所述升級(jí)包中的更新的文件信息從所述升級(jí)包中獲取各個(gè)更新的文件的差分文件,將所述差分文件與所述舊包中各個(gè)對(duì)應(yīng)的文件合并,并將合并后的文件寫(xiě)入所述安裝包中;
安裝模塊,用于調(diào)用預(yù)設(shè)接口安裝所述安裝包,完成所述軟件的更新。
在其中一個(gè)實(shí)施例中,所述寫(xiě)入模塊還用于獲取所述升級(jí)包中的簽名文件,并將所述簽名文件寫(xiě)入所述安裝包中;
讀取模塊,用于讀取所述舊包的渠道號(hào),將所述渠道號(hào)寫(xiě)入所述安裝包中,生成對(duì)應(yīng)的渠道更新包。
上述軟件更新方法和系統(tǒng),服務(wù)端通過(guò)比較軟件的舊包及新包的映射后得到不同的文件列表,在升級(jí)包中只寫(xiě)入增加的文件及更新文件的差分文件,能 夠大大減少升級(jí)包的數(shù)據(jù)量,當(dāng)客戶(hù)端在進(jìn)行下載時(shí),無(wú)需占用大量的帶寬和流量,節(jié)約資源,并有效提高了下載速度,節(jié)省時(shí)間。
此外,客戶(hù)端能夠讀取軟件的舊有的渠道號(hào)并生成對(duì)應(yīng)的渠道更新包,當(dāng)軟件擁有多渠道進(jìn)行更新時(shí),服務(wù)端只需保存各個(gè)版本號(hào)對(duì)應(yīng)的一個(gè)安裝包即可,無(wú)需針對(duì)不同的渠道生成不同的安裝包,簡(jiǎn)化了軟件的多渠道版本的更新步驟,并有效降低了服務(wù)端的維護(hù)成本。
附圖說(shuō)明
圖1為一個(gè)實(shí)施例中軟件更新方法的系統(tǒng)架構(gòu)圖;
圖2為一個(gè)實(shí)施例中軟件更新方法的流程示意圖;
圖3為一個(gè)實(shí)施例中服務(wù)端生成第一映射及第二映射的流程示意圖;
圖4為另一個(gè)實(shí)施例中軟件更新方法的流程示意圖;
圖5為一個(gè)實(shí)施例中客戶(hù)端生成渠道更新包的流程示意圖;
圖6為一個(gè)實(shí)施例中軟件更新系統(tǒng)的結(jié)構(gòu)示意圖;
圖7為一個(gè)實(shí)施例中生成映射模塊的內(nèi)部結(jié)構(gòu)示意圖;
圖8為另一個(gè)實(shí)施例中軟件更新系統(tǒng)的結(jié)構(gòu)示意圖;
圖9為又一個(gè)實(shí)施例中軟件更新系統(tǒng)的結(jié)構(gòu)示意圖。
具體實(shí)施方式
為了使本發(fā)明的目的、技術(shù)方案及優(yōu)點(diǎn)更加清楚明白,以下結(jié)合附圖及實(shí)施例,對(duì)本發(fā)明進(jìn)行進(jìn)一步詳細(xì)說(shuō)明。應(yīng)當(dāng)理解,此處所描述的具體實(shí)施例僅用以解釋本發(fā)明,并不用于限定本發(fā)明。
如圖1所示,圖1為一個(gè)實(shí)施例中軟件更新方法的系統(tǒng)架構(gòu)圖,客戶(hù)端10與服務(wù)端20實(shí)現(xiàn)雙向通信。
客戶(hù)端10獲取軟件的標(biāo)識(shí)信息,并根據(jù)該標(biāo)識(shí)信息向服務(wù)端20發(fā)送更新請(qǐng)求。服務(wù)端20接收由客戶(hù)端10發(fā)送的標(biāo)識(shí)信息,根據(jù)標(biāo)識(shí)信息判斷軟件是否需要更新。若該軟件需要更新,則服務(wù)端20獲取與標(biāo)識(shí)信息匹配的舊包與新包,并分別生成與舊包對(duì)應(yīng)的第一映射和與新包對(duì)應(yīng)的第二映射。服務(wù)端20比 較第一映射與第二映射,得到保持不變文件列表、增加文件列表及更新文件列表。服務(wù)端20根據(jù)增加文件列表將增加的文件寫(xiě)入升級(jí)包中,根據(jù)更新文件列表生成各個(gè)更新的文件的差分文件,并將差分文件寫(xiě)入升級(jí)包中,再根據(jù)保持不變文件列表、增加文件列表及更新文件列表生成對(duì)應(yīng)的保持不變的文件信息、增加的文件信息及更新的文件信息,然后將保持不變的文件信息、增加的文件信息及更新的文件信息寫(xiě)入升級(jí)包中。服務(wù)端20將升級(jí)包發(fā)送給客戶(hù)端10??蛻?hù)端10下載該升級(jí)包,并生成安裝包。客戶(hù)端10根據(jù)升級(jí)包中的保持不變的文件信息從與標(biāo)識(shí)信息匹配的舊包中獲取對(duì)應(yīng)的保持不變的文件,并將保持不變的文件寫(xiě)入安裝包中。客戶(hù)端10根據(jù)升級(jí)包中的增加的文件信息從升級(jí)包中獲取增加的文件,并將增加的文件寫(xiě)入安裝包中??蛻?hù)端10根據(jù)升級(jí)包中的更新的文件信息從升級(jí)包中獲取各個(gè)更新的文件的差分文件,將差分文件與舊包中各個(gè)對(duì)應(yīng)的文件合并,并將合并后的文件寫(xiě)入安裝包中。然后客戶(hù)端10調(diào)用預(yù)設(shè)接口安裝該安裝包,完成軟件的更新。
如圖2所示,一種軟件更新方法,包括服務(wù)端與客戶(hù)端,從服務(wù)端進(jìn)行描述,包括以下步驟:
步驟S202,接收由客戶(hù)端發(fā)送的軟件的標(biāo)識(shí)信息。
具體的,客戶(hù)端向服務(wù)端發(fā)送帶有軟件的標(biāo)識(shí)信息的更新請(qǐng)求,軟件的標(biāo)識(shí)信息包括標(biāo)識(shí)符和版本號(hào)等信息。
步驟S204,根據(jù)標(biāo)識(shí)信息判斷軟件是否需要更新,若是,則執(zhí)行步驟S208,若否,則執(zhí)行步驟S206。
具體的,服務(wù)端接收由客戶(hù)端發(fā)送的軟件的標(biāo)識(shí)信息后,可在軟件數(shù)據(jù)庫(kù)中查找與該標(biāo)識(shí)符匹配的軟件,并進(jìn)一步根據(jù)版本號(hào)判斷是否存在更新版本,若存在更新版本,則該軟件需要進(jìn)行更新,若不存在更新版本,則向客戶(hù)端返回?zé)o更新標(biāo)志。
步驟S206,向客戶(hù)端返回?zé)o更新標(biāo)志。
步驟S208,獲取與標(biāo)識(shí)信息匹配的舊包及新包,并分別生成與舊包對(duì)應(yīng)的第一映射及與新包對(duì)應(yīng)的第二映射。
具體的,若軟件需要進(jìn)行更新,則獲取與標(biāo)識(shí)信息匹配的舊包及新包,其 中,舊包指的是與標(biāo)識(shí)信息中的版本號(hào)對(duì)應(yīng)的舊的安裝包,而新包指的是該軟件的最新版本的安裝包。
在一個(gè)實(shí)施例中,如圖3所示,步驟獲取與標(biāo)識(shí)信息匹配的舊包及新包,并分別生成與舊包對(duì)應(yīng)的第一映射及與新包對(duì)應(yīng)的第二映射,具體包括以下步驟:
步驟S302,獲取與標(biāo)識(shí)符及版本號(hào)匹配的舊包。
具體的,服務(wù)端可先根據(jù)標(biāo)識(shí)符在軟件數(shù)據(jù)庫(kù)中查指到對(duì)應(yīng)的軟件,再根據(jù)版本號(hào)獲取對(duì)應(yīng)的舊包。
步驟S304,讀取舊包中各個(gè)文件的文件名及對(duì)應(yīng)的摘要信息。
具體的,服務(wù)端獲取舊包后,可將其解壓至緩存目錄中,再讀取其中META-INF目錄下的MANIFEST.MF文件,該MANIFEST.MF文件記錄有舊包中各個(gè)文件的文件名及對(duì)應(yīng)的SHA1(Secure Hash Algorithm,安全哈希算法)摘要信息。安全哈希算法主要適用于數(shù)字簽名標(biāo)準(zhǔn)(Digital Signature Standard DSS)里面定義的數(shù)字簽名算法(Digital Signature Algorithm DSA),SHA1摘要信息可以用于檢驗(yàn)數(shù)據(jù)的完整性,兩個(gè)不同的文件其產(chǎn)生的SHA1摘要信息也不同。
步驟S306,根據(jù)舊包中各個(gè)文件的文件名及對(duì)應(yīng)的摘要信息生成第一映射。
具體的,服務(wù)端讀取舊包中各個(gè)文件的文件名及對(duì)應(yīng)的摘要信息后,可生成第一映射,舊包中各個(gè)文件的文件名可作為第一映射的鍵,而與文件名對(duì)應(yīng)的SHA1摘要信息則作為第一映射的值。
步驟S308,獲取與標(biāo)識(shí)符匹配的新包。
具體的,服務(wù)端可根據(jù)標(biāo)識(shí)符在軟件數(shù)據(jù)庫(kù)中查指到對(duì)應(yīng)的軟件,并獲取該軟件最新版本的安裝包,即新包。
步驟S310,讀取新包中各個(gè)文件的文件名及對(duì)應(yīng)的摘要信息。
具體的,服務(wù)端獲取新包后,可將其解壓至緩存目錄中,再讀取其中META-INF目錄下的MANIFEST.MF文件,該MANIFEST.MF文件記錄有新包中各個(gè)文件的文件名及對(duì)應(yīng)的SHA1摘要信息。
步驟S312,根據(jù)新包中各個(gè)文件的文件名及對(duì)應(yīng)的摘要信息生成第二映射。
具體的,新包中各個(gè)文件的文件名可作為第二映射的鍵,而與文件名對(duì)應(yīng)的SHA1摘要信息則作為第二映射的值。
步驟S210,比較第一映射和第二映射,得到保持不變文件列表、增加文件列表及更新文件列表。
具體的,服務(wù)端通過(guò)比較第一映射和第二映射中的鍵和值是否相同,即能比較舊包與新包中的文件是否相同,可得到保持不變文件列表、增加文件列表及更新文件列表三個(gè)文件列表。同時(shí)存在于第一映射和第二映射中的文件名,其對(duì)應(yīng)的摘要信息也相同,則該文件即為保持不變的文件;同時(shí)存在于第一映射和第二映射中的文件名,但其對(duì)應(yīng)的摘要信息不同,則該文件即為更新的文件;不存在于第一映射只存在于第二映射中的文件名,則該文件即為增加的文件。根據(jù)比較獲得的結(jié)果,可生成三個(gè)不同的文件列表,三個(gè)文件列表中分別包含保持不變的文件的文件名、增加的文件的文件名及更新的文件的文件名等信息。
步驟S212,根據(jù)增加文件列表將增加的文件寫(xiě)入升級(jí)包中。
具體的,服務(wù)端可預(yù)先建立一個(gè)與該軟件的安裝包格式相同的空的升級(jí)包,例如該軟件的安裝包格式為apk(Android Package,安卓安裝包),即可預(yù)先建立一個(gè)空的以apk為后綴的壓縮文件作為升級(jí)包。服務(wù)端根據(jù)增加文件列表中的文件名將新包中對(duì)應(yīng)的增加的文件壓縮寫(xiě)入升級(jí)包中。在其它實(shí)施例中,也可以根據(jù)流程及時(shí)建立空的升級(jí)包。例如,在步驟S204判斷軟件需要更新時(shí)建立空的升級(jí)包,或者步驟S212中先建立空的升級(jí)包,再根據(jù)增加文件列表將增加的文件寫(xiě)入升級(jí)包中。
步驟S214,根據(jù)更新文件列表生成各個(gè)更新的文件的差分文件,將差分文件寫(xiě)入升級(jí)包中。
具體的,服務(wù)端根據(jù)更新文件列表中的文件名先獲取新包中更新的文件,同時(shí)獲取舊包中對(duì)應(yīng)的舊版文件,并利用bsdiff等二進(jìn)制差量工具,將更新的文件及舊版文件進(jìn)行二進(jìn)制對(duì)比,生成兩個(gè)文件的差分文件,然后將差分文件壓縮寫(xiě)入升級(jí)包中。在對(duì)比第一映射及第二映射的基礎(chǔ)上,通過(guò)二進(jìn)制差量工具生成每個(gè)更新的文件的差分文件,可大大減小升級(jí)包中更新文件的數(shù)據(jù)量,以 此節(jié)省客戶(hù)端下載時(shí)所需的流量,并縮短時(shí)長(zhǎng),且又可避免單獨(dú)采用增量升級(jí)時(shí)MD5(Message Digest Algorithm MD5,消息摘要算法第五版)校驗(yàn)不通過(guò)導(dǎo)致無(wú)法完成增量升級(jí)的問(wèn)題。
步驟S216,根據(jù)保持不變文件列表、增加文件列表及更新文件列表生成對(duì)應(yīng)的保持不變的文件信息、增加的文件信息及更新的文件信息。
具體的,服務(wù)端可根據(jù)保持不變文件列表、增加文件列表及更新文件列表生成對(duì)應(yīng)的保持不變的文件信息、增加的文件信息及更新的文件信息的JSON(JavaScript Object Notation,JavaScript對(duì)象表示法)字符串,保持不變的文件信息、增加的文件信息及更新的文件信息中即包含對(duì)應(yīng)的文件列表的內(nèi)容。
步驟S218,將保持不變的文件信息、增加的文件信息及更新的文件信息寫(xiě)入升級(jí)包中。
具體的,服務(wù)端可將保持不變的文件信息、增加的文件信息及更新的文件信息的JSON字符串壓縮寫(xiě)入升級(jí)包中,方便客戶(hù)端根據(jù)該文件信息進(jìn)行軟件更新。
步驟S220,將升級(jí)包發(fā)送給客戶(hù)端。
具體的,服務(wù)端將升級(jí)包發(fā)送給客戶(hù)端,使得客戶(hù)端完成軟件的更新。
上述軟件更新方法,服務(wù)端通過(guò)比較軟件的舊包及新包的映射后得到不同的文件列表,在升級(jí)包中只寫(xiě)入增加的文件及更新文件的差分文件,能夠大大減少升級(jí)包的數(shù)據(jù)量,當(dāng)客戶(hù)端在進(jìn)行下載時(shí),無(wú)需占用大量的帶寬和流量,節(jié)約資源,并有效提高了下載速度,節(jié)省時(shí)間。
在一個(gè)實(shí)施例中,上述軟件更新方法,在步驟將升級(jí)包發(fā)送給客戶(hù)端之前,還包括:獲取新包的簽名文件,將簽名文件寫(xiě)入升級(jí)包。
具體的,許多不同的安裝包中都有其獨(dú)特的簽名文件,該簽名文件中包含有包名、廠商的數(shù)字證書(shū)等信息,簽名文件中的信息可作為各個(gè)安裝包的標(biāo)識(shí)。服務(wù)端可獲取新包的簽名文件,并將簽名文件壓縮寫(xiě)入升級(jí)包中,使升級(jí)包帶有新包的標(biāo)識(shí),即可容易識(shí)別該升級(jí)包對(duì)應(yīng)的軟件及版本號(hào)。
上述軟件更新方法,服務(wù)端通過(guò)比較軟件的舊包及新包的映射后得到不同的文件列表,在升級(jí)包中只寫(xiě)入增加的文件及更新文件的差分文件,能夠大大 減少升級(jí)包的數(shù)據(jù)量,當(dāng)客戶(hù)端在進(jìn)行下載時(shí),無(wú)需占用大量的帶寬和流量,節(jié)約資源,并有效提高了下載速度,節(jié)省時(shí)間。
如圖4所示,一種軟件更新方法,包括服務(wù)端與客戶(hù)端,從客戶(hù)端進(jìn)行描述,包括以下步驟:
步驟S402,獲取軟件的標(biāo)識(shí)信息,并根據(jù)標(biāo)識(shí)信息向服務(wù)端發(fā)送更新請(qǐng)求。
具體的,客戶(hù)端可獲取軟件的標(biāo)識(shí)符、版本號(hào)等標(biāo)識(shí)信息,并向服務(wù)端發(fā)送帶有該標(biāo)識(shí)信息的更新請(qǐng)求,由服務(wù)端根據(jù)該標(biāo)識(shí)信息判斷軟件是否需要更新。當(dāng)軟件不需要進(jìn)行更新時(shí),即客戶(hù)端若接收到由服務(wù)端發(fā)送的無(wú)更新標(biāo)志,可提示軟件當(dāng)前版本即為最新版本,無(wú)需進(jìn)行更新。
步驟S404,若軟件需要更新,則下載升級(jí)包,并生成安裝包。
具體的,若軟件需要進(jìn)行更新,則客戶(hù)端從服務(wù)端下載對(duì)應(yīng)的升級(jí)包,并生成一個(gè)與升級(jí)包格式相同的空的安裝包。
步驟S406,根據(jù)升級(jí)包中的保持不變的文件信息從與標(biāo)識(shí)信息匹配的舊包中獲取對(duì)應(yīng)的保持不變的文件,并將保持不變的文件寫(xiě)入安裝包中。
具體的,客戶(hù)端下載升級(jí)包后,可從升級(jí)包中解壓出保持不變的文件信息、增加的文件信息及更新的文件信息的JSON字符串??蛻?hù)端可讀取保持不變的文件信息,并根據(jù)該保持不變的文件信息從舊包中解壓出對(duì)應(yīng)的保持不變的文件壓縮寫(xiě)入到安裝包中,其中,舊包即為客戶(hù)端當(dāng)前版本軟件對(duì)應(yīng)的安裝包。
步驟S408,根據(jù)升級(jí)包中的增加的文件信息從升級(jí)包中獲取增加的文件,并將增加的文件寫(xiě)入安裝包中。
具體的,客戶(hù)端可從升級(jí)包中讀取增加的文件信息,并根據(jù)增加的文件信息從升級(jí)包中解壓出對(duì)應(yīng)的增加的文件,再將增加的文件壓縮寫(xiě)入安裝包中。
步驟S410,根據(jù)升級(jí)包中的更新的文件信息從升級(jí)包中獲取各個(gè)更新的文件的差分文件,將差分文件與舊包中各個(gè)對(duì)應(yīng)的文件合并,并將合并后的文件寫(xiě)入安裝包中。
具體的,客戶(hù)端可從升級(jí)包中讀取更新的文件信息,再根據(jù)更新的文件信息從升級(jí)包中解壓出對(duì)應(yīng)的各個(gè)更新的文件的差分文件,并根據(jù)更新的文件信息從舊包中解壓出對(duì)應(yīng)的舊版文件??蛻?hù)端可利用bspatch等二進(jìn)制差分合并工 具將差分文件及對(duì)應(yīng)的舊版文件進(jìn)行合并,并將合并后的文件壓縮寫(xiě)入安裝包中。
步驟S412,調(diào)用預(yù)設(shè)接口安裝安裝包,完成軟件的更新。
具體的,安裝包寫(xiě)入完成后,客戶(hù)端可調(diào)用預(yù)設(shè)接口進(jìn)行安裝,完成軟件的更新。
上述軟件更新方法,服務(wù)端通過(guò)比較軟件的舊包及新包的映射后得到不同的文件列表,在升級(jí)包中只寫(xiě)入增加的文件及更新文件的差分文件,能夠大大減少升級(jí)包的數(shù)據(jù)量,當(dāng)客戶(hù)端在進(jìn)行下載時(shí),無(wú)需占用大量的帶寬和流量,節(jié)約資源,并有效提高了下載速度,節(jié)省時(shí)間。
如圖5所示,在一個(gè)實(shí)施例中,在步驟S412調(diào)用預(yù)設(shè)接口安裝安裝包,完成軟件的更新之前,還包括:
步驟S502,獲取升級(jí)包中的簽名文件,并將簽名文件寫(xiě)入安裝包中。
具體的,客戶(hù)端可從升級(jí)包中解壓出簽名文件,并將簽名文件壓縮寫(xiě)入安裝包中,簽名文件中包含有包名、廠商的數(shù)字證書(shū)等信息,簽名文件中的信息可作為安裝包的標(biāo)識(shí)。
步驟S504,讀取舊包的渠道號(hào),將渠道號(hào)寫(xiě)入安裝包中,生成對(duì)應(yīng)的渠道更新包。
具體的,當(dāng)軟件擁有多渠道更新時(shí),不同的渠道的安裝包中攜帶有不同的渠道號(hào),例如不同渠道的apk文件,其渠道號(hào)通常寫(xiě)入文件末尾的EOCD(End of central directory record)字段中??蛻?hù)端可讀取舊包的渠道號(hào),并將渠道號(hào)寫(xiě)入安裝包的特定字段中,生成對(duì)應(yīng)的渠道更新包,該特定字段需滿(mǎn)足可修改且不會(huì)影響安裝包的正確打開(kāi)及使用。例如apk文件的EOCD字段中有一個(gè)Comment字段,Comment字段通常位于文件的末尾,且其長(zhǎng)度不固定,Comment字段的內(nèi)容可任意寫(xiě)入并修改,只需同時(shí)改變對(duì)應(yīng)的長(zhǎng)度即不影響apk文件的正確打開(kāi)及使用。因此,客戶(hù)端可從軟件對(duì)應(yīng)的舊的apk文件的EOCD字段中讀取渠道號(hào),并將渠道號(hào)寫(xiě)入安裝包的EOCD字段的Comment字段中,生成對(duì)應(yīng)的渠道更新包。
上述軟件更新方法,客戶(hù)端能夠讀取軟件的舊有的渠道號(hào)并生成對(duì)應(yīng)的渠 道更新包,當(dāng)軟件擁有多渠道進(jìn)行更新時(shí),服務(wù)端只需保存各個(gè)版本號(hào)對(duì)應(yīng)的一個(gè)安裝包即可,無(wú)需針對(duì)不同的渠道生成不同的安裝包,簡(jiǎn)化了軟件的多渠道版本的更新步驟,并有效降低了服務(wù)端的維護(hù)成本。
如圖6所示,一種軟件更新系統(tǒng),包括接收模塊610、判斷模塊620、生成映射模塊630、比較模塊640、寫(xiě)入模塊650、生成文件信息模塊660和發(fā)送模塊670。
接收模塊610,用于接收由客戶(hù)端發(fā)送的軟件的標(biāo)識(shí)信息。
具體的,客戶(hù)端向服務(wù)端發(fā)送帶有軟件的標(biāo)識(shí)信息的更新請(qǐng)求,軟件的標(biāo)識(shí)信息包括標(biāo)識(shí)符和版本號(hào)等信息。
判斷模塊620,用于根據(jù)標(biāo)識(shí)信息判斷軟件是否需要更新。
具體的,服務(wù)端接收由客戶(hù)端發(fā)送的軟件的標(biāo)識(shí)信息后,可在軟件數(shù)據(jù)庫(kù)中查找與該標(biāo)識(shí)符匹配的軟件,并進(jìn)一步根據(jù)版本號(hào)判斷是否存在更新版本,若存在更新版本,則該軟件需要進(jìn)行更新,若不存在更新版本,則向客戶(hù)端返回?zé)o更新標(biāo)志。
生成映射模塊630,用于若該軟件需要更新,則獲取與標(biāo)識(shí)信息匹配的舊包及新包,并分別生成與舊包對(duì)應(yīng)的第一映射及與新包對(duì)應(yīng)的第二映射。
具體的,若軟件需要進(jìn)行更新,則獲取與標(biāo)識(shí)信息匹配的舊包及新包,其中,舊包指的是與標(biāo)識(shí)信息中的版本號(hào)對(duì)應(yīng)的舊的安裝包,而新包指的是該軟件的最新版本的安裝包。
如圖7所示,在一個(gè)實(shí)施例中,生成映射模塊630包括獲取單元632、讀取單元634和生成單元636。
獲取單元632,用于獲取與標(biāo)識(shí)符及版本號(hào)匹配的舊包。
具體的,服務(wù)端可先根據(jù)標(biāo)識(shí)符在軟件數(shù)據(jù)庫(kù)中查指到對(duì)應(yīng)的軟件,再根據(jù)版本號(hào)獲取對(duì)應(yīng)的舊包。
讀取單元634,用于讀取舊包中各個(gè)文件的文件名及對(duì)應(yīng)的摘要信息。
具體的,服務(wù)端獲取舊包后,可將其解壓至緩存目錄中,再讀取其中META-INF目錄下的MANIFEST.MF文件,該MANIFEST.MF文件記錄有舊包 中各個(gè)文件的文件名及對(duì)應(yīng)的SHA1摘要信息。安全哈希算法主要適用于數(shù)字簽名標(biāo)準(zhǔn)里面定義的數(shù)字簽名算法,SHA1摘要信息可以用于檢驗(yàn)數(shù)據(jù)的完整性,兩個(gè)不同的文件其產(chǎn)生的SHA1摘要信息也不同。
生成單元636,用于根據(jù)舊包中各個(gè)文件的文件名及對(duì)應(yīng)的摘要信息生成第一映射。
具體的,服務(wù)端讀取舊包中各個(gè)文件的文件名及對(duì)應(yīng)的摘要信息后,可生成第一映射,舊包中各個(gè)文件的文件名可作為第一映射的鍵,而與文件名對(duì)應(yīng)的SHA1摘要信息則作為第一映射的值。
獲取單元632還用于獲取與標(biāo)識(shí)符匹配的新包。
具體的,服務(wù)端可根據(jù)標(biāo)識(shí)符在軟件數(shù)據(jù)庫(kù)中查指到對(duì)應(yīng)的軟件,并獲取該軟件最新版本的安裝包,即新包。
讀取單元634還用于讀取新包中各個(gè)文件的文件名及對(duì)應(yīng)的摘要信息。
具體的,服務(wù)端獲取新包后,可將其解壓至緩存目錄中,再讀取其中META-INF目錄下的MANIFEST.MF文件,該MANIFEST.MF文件記錄有新包中各個(gè)文件的文件名及對(duì)應(yīng)的SHA1摘要信息。
生成單元636還用于根據(jù)新包中各個(gè)文件的文件名及對(duì)應(yīng)的摘要信息生成第二映射。
具體的,新包中各個(gè)文件的文件名可作為第二映射的鍵,而與文件名對(duì)應(yīng)的SHA1摘要信息則作為第二映射的值。
比較模塊640,用于比較第一映射和第二映射,得到保持不變文件列表、增加文件列表及更新文件列表。
具體的,服務(wù)端通過(guò)比較第一映射和第二映射中的鍵和值是否相同,即能比較舊包與新包中的文件是否相同,可得到保持不變文件列表、增加文件列表及更新文件列表三個(gè)文件列表。同時(shí)存在于第一映射和第二映射中的文件名,其對(duì)應(yīng)的摘要信息也相同,則該文件即為保持不變的文件;同時(shí)存在于第一映射和第二映射中的文件名,但其對(duì)應(yīng)的摘要信息不同,則該文件即為更新的文件;不存在于第一映射只存在于第二映射中的文件名,則該文件即為增加的文件。根據(jù)比較獲得的結(jié)果,可生成三個(gè)不同的文件列表,三個(gè)文件列表中分別 包含保持不變的文件的文件名、增加的文件的文件名及更新的文件的文件名等信息。
寫(xiě)入模塊650,用于根據(jù)增加文件列表將增加的文件寫(xiě)入升級(jí)包中。
具體的,服務(wù)端可預(yù)先建立一個(gè)與該軟件的安裝包格式相同的空的升級(jí)包,例如該軟件的安裝包格式為apk,即可預(yù)先建立一個(gè)空的以apk為后綴的壓縮文件作為升級(jí)包。服務(wù)端根據(jù)增加文件列表中的文件名將新包中對(duì)應(yīng)的增加的文件壓縮寫(xiě)入升級(jí)包中。在其它實(shí)施例中,也可以根據(jù)流程及時(shí)建立空的升級(jí)包。例如,在判斷出軟件需要更新時(shí)建立空的升級(jí)包,或是需要寫(xiě)入增加的文件時(shí)再建立空的升級(jí)包。
寫(xiě)入模塊650還用于根據(jù)更新文件列表生成各個(gè)更新的文件的差分文件,將差分文件寫(xiě)入升級(jí)包中。
具體的,服務(wù)端根據(jù)更新文件列表中的文件名先獲取新包中更新的文件,同時(shí)獲取舊包中對(duì)應(yīng)的舊版文件,并利用bsdiff等二進(jìn)制差量工具,將更新的文件及舊版文件進(jìn)行二進(jìn)制對(duì)比,生成兩個(gè)文件的差分文件,然后將差分文件壓縮寫(xiě)入升級(jí)包中。在對(duì)比第一映射及第二映射的基礎(chǔ)上,通過(guò)二進(jìn)制差量工具生成每個(gè)更新的文件的差分文件,可大大減小升級(jí)包中更新文件的數(shù)據(jù)量,以此節(jié)省客戶(hù)端下載時(shí)所需的流量,并縮短時(shí)長(zhǎng),且又可避免單獨(dú)采用增量升級(jí)時(shí)MD5校驗(yàn)不通過(guò)導(dǎo)致無(wú)法完成增量升級(jí)的問(wèn)題。
生成文件信息模塊660,用于根據(jù)保持不變文件列表、增加文件列表及更新文件列表生成對(duì)應(yīng)的保持不變的文件信息、增加的文件信息及更新的文件信息。
具體的,服務(wù)端可根據(jù)保持不變文件列表、增加文件列表及更新文件列表生成對(duì)應(yīng)的保持不變的文件信息、增加的文件信息及更新的文件信息的JSON字符串,保持不變的文件信息、增加的文件信息及更新的文件信息中即包含對(duì)應(yīng)的文件列表的內(nèi)容。
寫(xiě)入模塊650還用于將保持不變的文件信息、增加的文件信息及更新的文件信息寫(xiě)入升級(jí)包中。
具體的,服務(wù)端可將保持不變的文件信息、增加的文件信息及更新的文件信息的JSON字符串壓縮寫(xiě)入升級(jí)包中,方便客戶(hù)端根據(jù)該文件信息進(jìn)行軟件更 新。
發(fā)送模塊670,用于將升級(jí)包發(fā)送給客戶(hù)端。
具體的,服務(wù)端將升級(jí)包發(fā)送給客戶(hù)端,使得客戶(hù)端完成軟件的更新。
上述軟件更新系統(tǒng),服務(wù)端通過(guò)比較軟件的舊包及新包的映射后得到不同的文件列表,在升級(jí)包中只寫(xiě)入增加的文件及更新文件的差分文件,能夠大大減少升級(jí)包的數(shù)據(jù)量,當(dāng)客戶(hù)端在進(jìn)行下載時(shí),無(wú)需占用大量的帶寬和流量,節(jié)約資源,并有效提高了下載速度,節(jié)省時(shí)間。
在一個(gè)實(shí)施例中,上述軟件更新系統(tǒng),除了包括接收模塊610、判斷模塊620、生成映射模塊630、比較模塊640、寫(xiě)入模塊650、生成文件信息模塊660和發(fā)送模塊670,還包括獲取模塊。
獲取模塊,用于獲取新包的簽名文件。
寫(xiě)入模塊650還用于將該簽名文件寫(xiě)入升級(jí)包。
具體的,許多不同的安裝包中都有其獨(dú)特的簽名文件,該簽名文件中包含有包名、廠商的數(shù)字證書(shū)等信息,簽名文件中的信息可作為各個(gè)安裝包的標(biāo)識(shí)。服務(wù)端可獲取新包的簽名文件,并將簽名文件壓縮寫(xiě)入升級(jí)包中,使升級(jí)包帶有新包的標(biāo)識(shí),即可容易識(shí)別該升級(jí)包對(duì)應(yīng)的軟件及版本號(hào)。
上述軟件更新系統(tǒng),服務(wù)端通過(guò)比較軟件的舊包及新包的映射后得到不同的文件列表,在升級(jí)包中只寫(xiě)入增加的文件及更新文件的差分文件,能夠大大減少升級(jí)包的數(shù)據(jù)量,當(dāng)客戶(hù)端在進(jìn)行下載時(shí),無(wú)需占用大量的帶寬和流量,節(jié)約資源,并有效提高了下載速度,節(jié)省時(shí)間。
如圖8所示,在另一個(gè)實(shí)施例中,一種軟件更新系統(tǒng),包括發(fā)送模塊810、下載模塊820、寫(xiě)入模塊830和安裝模塊840。
發(fā)送模塊810,用于獲取軟件的標(biāo)識(shí)信息,并根據(jù)標(biāo)識(shí)信息向服務(wù)端發(fā)送更新請(qǐng)求。
具體的,客戶(hù)端可獲取軟件的標(biāo)識(shí)符、版本號(hào)等標(biāo)識(shí)信息,并向服務(wù)端發(fā)送帶有該標(biāo)識(shí)信息的更新請(qǐng)求,由服務(wù)端根據(jù)該標(biāo)識(shí)信息判斷軟件是否需要更新。當(dāng)軟件不需要進(jìn)行更新時(shí),即客戶(hù)端若接收到由服務(wù)端發(fā)送的無(wú)更新標(biāo)志,可提示軟件當(dāng)前版本即為最新版本,無(wú)需進(jìn)行更新。
下載模塊820,用于若軟件需要更新,則下載升級(jí)包,并生成安裝包。
具體的,若軟件需要進(jìn)行更新,則客戶(hù)端從服務(wù)端下載對(duì)應(yīng)的升級(jí)包,并生成一個(gè)與升級(jí)包格式相同的空的安裝包。
寫(xiě)入模塊830,用于根據(jù)升級(jí)包中的保持不變的文件信息從與標(biāo)識(shí)信息匹配的舊包中獲取對(duì)應(yīng)的保持不變的文件,并將保持不變的文件寫(xiě)入安裝包中。
具體的,客戶(hù)端下載升級(jí)包后,可從升級(jí)包中解壓出保持不變的文件信息、增加的文件信息及更新的文件信息的JSON字符串。客戶(hù)端可讀取保持不變的文件信息,并根據(jù)該保持不變的文件信息從舊包中解壓出對(duì)應(yīng)的保持不變的文件壓縮寫(xiě)入到安裝包中,其中,舊包即為客戶(hù)端當(dāng)前版本軟件對(duì)應(yīng)的安裝包。
寫(xiě)入模塊830還用于根據(jù)升級(jí)包中的增加的文件信息從升級(jí)包中獲取增加的文件,并將增加的文件寫(xiě)入安裝包中。
具體的,客戶(hù)端可從升級(jí)包中讀取增加的文件信息,并根據(jù)增加的文件信息從升級(jí)包中解壓出對(duì)應(yīng)的增加的文件,再將增加的文件壓縮寫(xiě)入安裝包中。
寫(xiě)入模塊830還用于根據(jù)升級(jí)包中的更新的文件信息從升級(jí)包中獲取各個(gè)更新的文件的差分文件,將差分文件與舊包中各個(gè)對(duì)應(yīng)的文件合并,并將合并后的文件寫(xiě)入安裝包中。
具體的,客戶(hù)端可從升級(jí)包中讀取更新的文件信息,再根據(jù)更新的文件信息從升級(jí)包中解壓出對(duì)應(yīng)的各個(gè)更新的文件的差分文件,并根據(jù)更新的文件信息從舊包中解壓出對(duì)應(yīng)的舊版文件??蛻?hù)端可利用bspatch等二進(jìn)制差分合并工具將差分文件及對(duì)應(yīng)的舊版文件進(jìn)行合并,并將合并后的文件壓縮寫(xiě)入安裝包中。
安裝模塊840,用于調(diào)用預(yù)設(shè)接口安裝安裝包,完成軟件的更新。
具體的,安裝包寫(xiě)入完成后,客戶(hù)端可調(diào)用預(yù)設(shè)接口進(jìn)行安裝,完成軟件的更新。
上述軟件更新系統(tǒng),服務(wù)端通過(guò)比較軟件的舊包及新包的映射后得到不同的文件列表,在升級(jí)包中只寫(xiě)入增加的文件及更新文件的差分文件,能夠大大減少升級(jí)包的數(shù)據(jù)量,當(dāng)客戶(hù)端在進(jìn)行下載時(shí),無(wú)需占用大量的帶寬和流量,節(jié)約資源,并有效提高了下載速度,節(jié)省時(shí)間。
如圖9所示,在一個(gè)實(shí)施例中,上述軟件更新系統(tǒng),除了包括發(fā)送模塊810、下載模塊820、寫(xiě)入模塊830和安裝模塊840,還包括讀取模塊850。
寫(xiě)入模塊830還用于獲取升級(jí)包中的簽名文件,并將簽名文件寫(xiě)入安裝包中。
具體的,客戶(hù)端可從升級(jí)包中解壓出簽名文件,并將簽名文件壓縮寫(xiě)入安裝包中,簽名文件中包含有包名、廠商的數(shù)字證書(shū)等信息,簽名文件中的信息可作為安裝包的標(biāo)識(shí)。
讀取模塊850,用于讀取舊包的渠道號(hào),將渠道號(hào)寫(xiě)入安裝包中,生成對(duì)應(yīng)的渠道更新包。
具體的,當(dāng)軟件擁有多渠道更新時(shí),不同的渠道的安裝包中攜帶有不同的渠道號(hào),例如不同渠道的apk文件,其渠道號(hào)通常寫(xiě)入文件末尾的EOCD字段中。客戶(hù)端可讀取舊包的渠道號(hào),并將渠道號(hào)寫(xiě)入安裝包的特定字段中,生成對(duì)應(yīng)的渠道更新包,該特定字段需滿(mǎn)足可修改且不會(huì)影響安裝包的正確打開(kāi)及使用。例如apk文件的EOCD字段中有一個(gè)Comment字段,Comment字段通常位于文件的末尾,且其長(zhǎng)度不固定,Comment字段的內(nèi)容可任意寫(xiě)入并修改,只需同時(shí)改變對(duì)應(yīng)的長(zhǎng)度即不影響apk文件的正確打開(kāi)及使用。因此,客戶(hù)端可從軟件對(duì)應(yīng)的舊的apk文件的EOCD字段中讀取渠道號(hào),并將渠道號(hào)寫(xiě)入安裝包的EOCD字段的Comment字段中,生成對(duì)應(yīng)的渠道更新包。
上述軟件更新系統(tǒng),客戶(hù)端能夠讀取軟件的舊有的渠道號(hào)并生成對(duì)應(yīng)的渠道更新包,當(dāng)軟件擁有多渠道進(jìn)行更新時(shí),服務(wù)端只需保存各個(gè)版本號(hào)對(duì)應(yīng)的一個(gè)安裝包即可,無(wú)需針對(duì)不同的渠道生成不同的安裝包,簡(jiǎn)化了軟件的多渠道版本的更新步驟,并有效降低了服務(wù)端的維護(hù)成本。
以上所述實(shí)施例的各技術(shù)特征可以進(jìn)行任意的組合,為使描述簡(jiǎn)潔,未對(duì)上述實(shí)施例中的各個(gè)技術(shù)特征所有可能的組合都進(jìn)行描述,然而,只要這些技術(shù)特征的組合不存在矛盾,都應(yīng)當(dāng)認(rèn)為是本說(shuō)明書(shū)記載的范圍。
以上所述實(shí)施例僅表達(dá)了本發(fā)明的幾種實(shí)施方式,其描述較為具體和詳細(xì),但并不能因此而理解為對(duì)發(fā)明專(zhuān)利范圍的限制。應(yīng)當(dāng)指出的是,對(duì)于本領(lǐng)域的 普通技術(shù)人員來(lái)說(shuō),在不脫離本發(fā)明構(gòu)思的前提下,還可以做出若干變形和改進(jìn),這些都屬于本發(fā)明的保護(hù)范圍。因此,本發(fā)明專(zhuān)利的保護(hù)范圍應(yīng)以所附權(quán)利要求為準(zhǔn)。