本發(fā)明涉及互聯(lián)網(wǎng)技術(shù)領(lǐng)域,特別是涉及一種安卓軟件升級(jí)的方法及系統(tǒng)。
背景技術(shù):
隨著互聯(lián)網(wǎng)行業(yè)的不斷發(fā)展,終端設(shè)備,尤其是移動(dòng)終端設(shè)備的應(yīng)用程序越來(lái)越多,版本不斷更新,用戶需要不斷進(jìn)行相應(yīng)的應(yīng)用軟件升級(jí)才能保證軟件的安全性和穩(wěn)定性。現(xiàn)有技術(shù)中,主要采用增量升級(jí)的方式實(shí)現(xiàn)客戶端上應(yīng)用程序的升級(jí)。
在安卓(Android)系統(tǒng)中,增量升級(jí)的原理是通過(guò)將用戶客戶端已安裝的應(yīng)用程序的APK(Android Package Kit,安卓系統(tǒng)的安裝包)與當(dāng)前服務(wù)端該應(yīng)用程序最新版本的APK做差分,得到差分包,即更新的部分。然后客戶端通過(guò)網(wǎng)絡(luò)僅請(qǐng)求下載該差分包,并將該差分包與當(dāng)前客戶端已安裝的APK進(jìn)行組合,即得到一個(gè)新版本的APK。一般來(lái)說(shuō),差分包較服務(wù)端上最新APK的大小要小很多,而差分升級(jí),客戶端僅下載差分包即可,而不需要將服務(wù)端上整個(gè)最新APK下載下來(lái),因此可以很大程度上減少用戶流量的損失。
但現(xiàn)有技術(shù)中,差分包的獲取及差分包與APK的合并,主要采用基于bsdiff/bspatch的二進(jìn)制差分合并解決方案實(shí)現(xiàn),而該方案必須依賴于APK整體本身的MD5(Message Digest Algorithm5,摘要算法第5版)完全匹配,即需要對(duì)軟件包整體進(jìn)行MD5值強(qiáng)校驗(yàn),如果安裝后或者升級(jí)期間APK因某些原因存在有解壓和再壓縮的過(guò)程,雖然此時(shí)APK中的實(shí)際內(nèi)容沒(méi)有變化,但是重新壓縮后的APK整體的MD5值卻發(fā)生變化,這就會(huì)導(dǎo)致了bspatch在合并的過(guò)程中失敗,最終導(dǎo)致升級(jí)失敗。此外,對(duì)于文件改變比較小的升級(jí),比如更換logo,采用上述技術(shù)方案,生成的二進(jìn)制差分升級(jí)包體積還是會(huì)比較大,影響用戶體驗(yàn),且會(huì)增加服務(wù)器的負(fù)荷。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明旨在至少解決現(xiàn)有技術(shù)中存在的技術(shù)問(wèn)題之一。為此,本發(fā)明的一個(gè)目的在于提出一種無(wú)需對(duì)軟件包整體進(jìn)行MD5強(qiáng)校驗(yàn)的安卓軟件升級(jí)的方法。
根據(jù)本發(fā)明實(shí)施例的安卓軟件升級(jí)的方法,包括:
服務(wù)端根據(jù)新版本軟件包和舊版本軟件包的MANIFEST.MF文件中文件條目的SHA1哈希值的差異生成差分升級(jí)包及配置文件,所述配置文件為所述差分升級(jí)包的索引信息;
客戶端從所述服務(wù)端下載所述差分升級(jí)包和配置文件,根據(jù)所述配置文件對(duì)所述差分升級(jí)包和所述客戶端已安裝的所述舊版本軟件包進(jìn)行組合,以生成所述新版本軟件包;
所述客戶端安裝所述新版本軟件包。
根據(jù)本發(fā)明實(shí)施例的安卓軟件升級(jí)的方法,由于差分升級(jí)包的差異推送來(lái)自舊版本軟件包和新版本軟件包中MANIFEST.MF文件中文件條目的SHA1哈希值的不同,即升級(jí)過(guò)程中是對(duì)APK的MF文件中文件條目的SHA1哈希值進(jìn)行驗(yàn)證,無(wú)需對(duì)軟件包整體本身的MD5值進(jìn)行強(qiáng)校驗(yàn),驗(yàn)證更精準(zhǔn),即使APK在升級(jí)的過(guò)程中存在有解壓和再壓縮的過(guò)程,此時(shí)APK中的實(shí)際內(nèi)容沒(méi)有變化,APK的MF文件中文件條目的SHA1哈希值也未發(fā)生變化,因此不會(huì)導(dǎo)致差分升級(jí)包與舊版本軟件包的合并失敗,且從文件角度生成差分升級(jí)包,對(duì)于文件改變比較小的升級(jí),比如更換logo,生成的差分升級(jí)包的體積會(huì)更小,提升用戶體驗(yàn),減少服務(wù)器的負(fù)荷??梢岳斫獾?,還可以根據(jù)更新內(nèi)容的大小進(jìn)行選擇性差分升級(jí),如對(duì)改變較大的文件進(jìn)行傳統(tǒng)的二進(jìn)制差分得到二進(jìn)制差分包,而對(duì)于改動(dòng)較小的文件,進(jìn)行本發(fā)明提出的基于文件角度生成差分升級(jí)包,從而最大限度的減小差分升級(jí)包的大小。
另外,根據(jù)本發(fā)明上述實(shí)施例的安卓軟件升級(jí)的方法,還可以具有如下附加的技術(shù)特征:
進(jìn)一步地,在本發(fā)明的一個(gè)實(shí)施例中,所述客戶端從所述服務(wù)端下載所述差分升級(jí)包和配置文件,根據(jù)所述配置文件對(duì)所述差分升級(jí)包和所述客戶端已安裝的所述舊版本軟件包進(jìn)行組合,以生成所述新版本軟件包的步驟包括:
所述客戶端從所述服務(wù)端下載所述差分升級(jí)包和配置文件,同時(shí)緩存所述客戶端中已安裝的所述舊版本軟件包,獲得所述舊版本軟件包的副本;
所述客戶端根據(jù)所述配置文件對(duì)所述差分升級(jí)包和所述舊版本軟件包的副本進(jìn)行組合,以生成所述新版本軟件包。
進(jìn)一步地,在本發(fā)明的一個(gè)實(shí)施例中,所述配置文件包括要?jiǎng)h除的文件信息、要增加的文件信息和要更新的文件信息,
所述客戶端根據(jù)所述配置文件對(duì)所述差分升級(jí)包和所述舊版本軟件包的副本進(jìn)行組合的步驟包括:
所述客戶端根據(jù)所述要?jiǎng)h除的文件信息,刪除所述舊版本軟件包的副本中需要?jiǎng)h除的文件條目;
所述客戶端根據(jù)所述要增加的文件信息從所述差分升級(jí)包獲取要增加的文件條目,并將所述要增加的文件條目壓縮進(jìn)所述舊版本軟件包的副本中;
所述客戶端根據(jù)所述要更新的文件信息從所述差分升級(jí)包獲取要更新的文件條目,并將所述要更新的文件條目與所述舊版本軟件包的副本中的對(duì)應(yīng)條目進(jìn)行合并。
進(jìn)一步地,在本發(fā)明的一個(gè)實(shí)施例中,所述配置文件還包括所述新版本軟件包的META-INF簽名信息,所述客戶端根據(jù)所述配置文件對(duì)所述差分升級(jí)包和所述舊版本軟件包的副本進(jìn)行組合的步驟還包括:
所述客戶端根據(jù)所述新版本軟件包的META-INF簽名信息,從所述差分升級(jí)包中獲取所述新版本軟件包的META-INF目錄下的簽名相關(guān)文件;
所述客戶端將所述新版本軟件包的META-INF目錄下的簽名相關(guān)文件壓縮進(jìn)所述舊版本軟件包的副本中。
進(jìn)一步地,在本發(fā)明的一個(gè)實(shí)施例中,所述客戶端從所述服務(wù)端下載所述差分升級(jí)包和配置文件的步驟包括:
所述客戶端啟動(dòng)已安裝的所述舊版本軟件包,并向所述服務(wù)端發(fā)起檢測(cè)更新的請(qǐng)求,所述請(qǐng)求攜帶所述舊版本軟件包的描述信息;
所述服務(wù)端檢測(cè)是否存在差分升級(jí)包和配置文件;
若所述服務(wù)端存在差分升級(jí)包和配置文件,則所述客戶端從所述服務(wù)端下載所述差分升級(jí)包和配置文件。
本發(fā)明的另一個(gè)目的在于提出一種無(wú)需對(duì)軟件包整體進(jìn)行MD5強(qiáng)校驗(yàn)的安卓軟件升級(jí)的系統(tǒng)。
根據(jù)本發(fā)明實(shí)施例的安卓軟件升級(jí)的系統(tǒng),包括服務(wù)端和客戶端,
所述服務(wù)端包括:
補(bǔ)丁生成模塊,用于根據(jù)新版本軟件包和舊版本軟件包的MANIFEST.MF文件中文件條目的SHA1哈希值的差異生成差分升級(jí)包及配置文件,所述配置文件為所述差分升級(jí)包的索引信息;
所述客戶端包括:
下載模塊,用于從所述服務(wù)端下載所述差分升級(jí)包和配置文件;
組合模塊,用于根據(jù)所述配置文件對(duì)所述差分升級(jí)包和所述客戶端已安裝的所述舊版本軟件包進(jìn)行組合,以生成所述新版本軟件包;
安裝模塊,用于安裝所述新版本軟件包。
另外,根據(jù)本發(fā)明上述實(shí)施例的安卓軟件升級(jí)的系統(tǒng),還可以具有如下附加的技術(shù)特征:
進(jìn)一步地,在本發(fā)明的一個(gè)實(shí)施例中,所述客戶端還包括:
緩存模塊,用于緩存所述客戶端中已安裝的所述舊版本軟件包;
所述組合模塊還用于根據(jù)所述配置文件對(duì)所述差分升級(jí)包和所述緩存模塊緩存的所述舊版本軟件包的副本進(jìn)行組合,以生成所述新版本軟件包。
進(jìn)一步地,在本發(fā)明的一個(gè)實(shí)施例中,所述配置文件包括要?jiǎng)h除的文件信息、要增加的文件信息和要更新的文件信息,
所述客戶端還包括刪除子模塊、增加子模塊和更新子模塊;
所述刪除子模塊用于根據(jù)所述要?jiǎng)h除的文件信息,刪除所述緩存模塊緩存的所述舊版本軟件包的副本中需要?jiǎng)h除的文件條目;
所述增加子模塊用于根據(jù)所述要增加的文件信息從所述差分升級(jí)包獲取要增加的文件條目,并將所述要增加的文件條目壓縮進(jìn)所述緩存模塊緩存的所述舊版本軟件包的副本中;
所述更新子模塊用于根據(jù)所述要更新的文件信息從將所述差分升級(jí)包獲取要更新的文件條目,并將所述要更新的文件條目與所述緩存模塊緩存的所述舊版本軟件包的副本中的對(duì)應(yīng)條目進(jìn)行合并。
進(jìn)一步地,在本發(fā)明的一個(gè)實(shí)施例中,所述配置文件還包括所述新版本軟件包的META-INF簽名信息,所述客戶端還包括簽名信息壓縮子模塊,所述簽名信息壓縮子模塊用于根據(jù)所述新版本軟件包的META-INF簽名信息,從所述差分升級(jí)包獲取所述新版本軟件包的META-INF目錄下的簽名相關(guān)文件,并將所述新版本軟件包的META-INF目錄下的簽名相關(guān)文件壓縮進(jìn)所述緩存模塊緩存的所述舊版本軟件包的副本中。
進(jìn)一步地,在本發(fā)明的一個(gè)實(shí)施例中,所述客戶端還包括啟動(dòng)模塊和更新請(qǐng)求模塊,所述啟動(dòng)模塊用于啟動(dòng)所述客戶端已安裝的所述舊版本軟件包,所述更新請(qǐng)求模塊用于向所述服務(wù)端發(fā)起檢測(cè)更新的請(qǐng)求,所述請(qǐng)求攜帶所述舊版本軟件包的描述信息;
所述服務(wù)端還包括檢測(cè)模塊,所述檢測(cè)模塊用于檢測(cè)所述服務(wù)端是否存在差分升級(jí)包和配置文件,所述下載模塊用于在所述檢測(cè)模塊檢測(cè)到所述服務(wù)端存在差分升級(jí)包和配置文件時(shí),對(duì)所述差分升級(jí)包和配置文件進(jìn)行下載。
本發(fā)明的附加方面和優(yōu)點(diǎn)將在下面的描述中部分給出,部分將從下面的描述中變得明顯,或通過(guò)本發(fā)明的實(shí)踐了解到。
附圖說(shuō)明
本發(fā)明的上述和/或附加的方面和優(yōu)點(diǎn)從結(jié)合下面附圖對(duì)實(shí)施例的描述中將變得明顯和容易理解,其中:
圖1是根據(jù)本發(fā)明一實(shí)施例的安卓軟件升級(jí)的方法的流程圖;
圖2是根據(jù)本發(fā)明另一實(shí)施例的安卓軟件升級(jí)的方法的流程圖;
圖3是根據(jù)本發(fā)明另一實(shí)施例的安卓軟件升級(jí)的系統(tǒng)的結(jié)構(gòu)示意圖。
具體實(shí)施方式
為使本發(fā)明實(shí)施例的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚,下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例?;诒景l(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒(méi)有做出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。
本發(fā)明以安卓系統(tǒng)的終端設(shè)備作為實(shí)施例的環(huán)境對(duì)本發(fā)明進(jìn)行詳細(xì)描述,請(qǐng)參閱圖1,本發(fā)明一實(shí)施例提出的安卓軟件升級(jí)的方法,至少包括以下步驟:
S101,服務(wù)端根據(jù)新版本軟件包和舊版本軟件包的MANIFEST.MF文件中文件條目的SHA1哈希值的差異生成差分升級(jí)包及配置文件,所述配置文件為所述差分升級(jí)包的索引信息;
其中,該服務(wù)端為服務(wù)器,具體可以為云端服務(wù)器。軟件包(即APK文件)中的MANIFEST.MF文件(簡(jiǎn)稱MF文件),具體為META-INF(Meta-Information,元信息)目錄下的MANIFEST.MF文件,MF文件代表了整個(gè)APK的文件指紋,其和加密數(shù)據(jù)一道構(gòu)建了APK的完整簽名,以保證軟件的有效性。服務(wù)端根據(jù)舊版本軟件包和新版本軟件包的MF文件中列舉出軟件包中文件條目的SHA1(具體為base64-encoded SHA1)哈希值的差異生成差分升級(jí)包,具體可以對(duì)比新舊軟件包的每個(gè)文件條目,從而實(shí)現(xiàn)從文件角度產(chǎn)生差分升級(jí)包。由于差分升級(jí)包的差異信息來(lái)自舊版本軟件包和新版本軟件包的MF文件中文件條目的SHA1哈希值的不同,即升級(jí)過(guò)程中是對(duì)APK的MF文件中文件條目的SHA1哈希值進(jìn)行驗(yàn)證,無(wú)需對(duì)軟件包整體本身的MD5值進(jìn)行強(qiáng)校驗(yàn)。即使APK在升級(jí)的過(guò)程中存在有解壓和再壓縮的過(guò)程,此時(shí)APK中的實(shí)際內(nèi)容沒(méi)有變化,因此APK的MF文件中文件條目的SHA1哈希值也未發(fā)生變化,在后續(xù)的合并過(guò)程中,也不會(huì)導(dǎo)致合并失敗。此外,該配置文件與所述差分升級(jí)包對(duì)應(yīng),具體表現(xiàn)為所述配置文件是所述差分升級(jí)包的索引信息,用于提示客戶端進(jìn)行相應(yīng)的升級(jí),具體可以為update.xml文件。該配置文件和該差分升級(jí)包以patch的文件形式存儲(chǔ)在服務(wù)端中,即該patch中包含該差分升級(jí)包和該配置文件。
S102,客戶端從所述服務(wù)端下載所述差分升級(jí)包和配置文件,根據(jù)所述配置文件對(duì)所述差分升級(jí)包和所述客戶端已安裝的所述舊版本軟件包進(jìn)行組合,以生成所述新版本軟件包;
具體實(shí)現(xiàn)中,所述客戶端可以為智能手機(jī)、智能電視、平板電腦或者智能可穿戴設(shè)備等,該客戶端可以通過(guò)啟動(dòng)移動(dòng)數(shù)據(jù)(如3G或4G)或者無(wú)線網(wǎng)絡(luò)通信技術(shù)(如wifi)連接到所述服務(wù)端,且該客戶端已經(jīng)預(yù)先安裝了舊版本軟件包??蛻舳藦乃龇?wù)端下載所述patch,再對(duì)該patch進(jìn)行解壓,以獲得所述差分升級(jí)包和配置文件??蛻舳丝梢圆捎煤铣晒ぞ?,如bspatch或KDiff3,對(duì)所述差分升級(jí)包與舊版本軟件包中進(jìn)行合并,從而得到所述新版本軟件包。
S103,所述客戶端安裝所述新版本軟件包。
具體實(shí)現(xiàn)中,通過(guò)調(diào)用客戶端的系統(tǒng)API,進(jìn)行更新覆蓋安裝。
此外,可以理解的,當(dāng)一個(gè)軟件有多個(gè)舊版本和一個(gè)新版本時(shí),例如,一個(gè)軟件具有A1,A2,A3共三個(gè)版本時(shí),其中A3為最新版本,A1和A2相對(duì)于A3均為舊版本。服務(wù)器會(huì)對(duì)A1與A3之間的MF文件中文件條目的SHA1哈希值進(jìn)行對(duì)比,得到A1與A3之間的差異生成差分升級(jí)包及配置文件,同樣的方法得到A2和A3之間的差分升級(jí)包及配置文件,而客戶端已經(jīng)安裝了特定的舊版本軟件包,例如,客戶端已經(jīng)安裝了A2版本的軟件,此時(shí),客戶端可以根據(jù)A2版本的版本號(hào)或其它能夠證明版本號(hào)的軟件信息去服務(wù)器下載相應(yīng)的差分升級(jí)包及配置文件,即下載A2和A3之間的差分升級(jí)包及配置文件。
根據(jù)本發(fā)明實(shí)施例的安卓軟件升級(jí)的方法,由于差分升級(jí)包的差異信息來(lái)自舊版本軟件包和新版本軟件包的MF文件中文件條目的SHA1哈希值的不同,即升級(jí)過(guò)程中是對(duì)APK的MF文件中文件條目的SHA1哈希值進(jìn)行驗(yàn)證,驗(yàn)證更精準(zhǔn),即使APK在升級(jí)的過(guò)程中存在有解壓和再壓縮的過(guò)程,此時(shí)APK中的實(shí)際內(nèi)容沒(méi)有變化,APK的MF文件中文件條目的SHA1哈希值也未發(fā)生變化,因此不會(huì)導(dǎo)致差分升級(jí)包與舊版本軟件包的合并失敗,且從文件角度生成差分升級(jí)包,對(duì)于文件改變比較小的升級(jí),比如更換logo,生成的差分升級(jí)包的體積會(huì)更小,提升用戶體驗(yàn),減少服務(wù)器的負(fù)荷??梢岳斫獾?,還可以根據(jù)更新內(nèi)容的大小進(jìn)行選擇性差分升級(jí),如對(duì)改變較大的文件進(jìn)行傳統(tǒng)的二進(jìn)制差分得到二進(jìn)制差分包,而對(duì)于改動(dòng)較小的文件,進(jìn)行本發(fā)明提出的基于文件角度生成差分升級(jí)包,從而最大限度的減小差分升級(jí)包的大小。
請(qǐng)參閱圖2,本發(fā)明另一實(shí)施例提出的安卓軟件升級(jí)的方法,至少包括以下步驟:
S201,服務(wù)端根據(jù)新版本軟件包和舊版本軟件包的MANIFEST.MF文件中文件條目的SHA1哈希值的差異生成差分升級(jí)包及配置文件,所述配置文件為所述差分升級(jí)包的索引信息;
其中,其中,該服務(wù)端為服務(wù)器,具體可以為云端服務(wù)器。軟件包(即APK文件)中的MANIFEST.MF文件(簡(jiǎn)稱MF文件),具體為META-INF(Meta-Information,元信息)目錄下的MANIFEST.MF文件,MF文件代表了整個(gè)APK的文件指紋,其和加密數(shù)據(jù)一道構(gòu)建了APK的完整簽名,以保證軟件的有效性。服務(wù)端根據(jù)舊版本軟件包和新版本軟件包的MF文件中列舉出軟件包中文件條目的SHA1(具體為base64-encoded SHA1)哈希值的差異生成差分升級(jí)包,具體可以對(duì)比新舊軟件包的每個(gè)文件條目,從而實(shí)現(xiàn)從文件角度產(chǎn)生差分升級(jí)包。由于差分升級(jí)包的差異信息來(lái)自舊版本軟件包和新版本軟件包的MF文件中文件條目的SHA1哈希值的不同,即升級(jí)過(guò)程中是對(duì)APK的MF文件中文件條目的SHA1哈希值進(jìn)行驗(yàn)證,而非軟件包整體的MD5驗(yàn)證。即使APK在升級(jí)的過(guò)程中存在有解壓和再壓縮的過(guò)程,此時(shí)APK中的實(shí)際內(nèi)容沒(méi)有變化,因此APK的MF文件中文件條目的SHA1哈希值也未發(fā)生變化,在后續(xù)的合并過(guò)程中,也不會(huì)導(dǎo)致合并失敗。此外,該配置文件與所述差分升級(jí)包對(duì)應(yīng),具體表現(xiàn)為所述配置文件是所述差分升級(jí)包的索引信息,用于提示客戶端進(jìn)行相應(yīng)的升級(jí),具體可以為update.xml文件,所述配置文件包括刪除的文件信息、要增加的文件信息、要更新的文件信息和所述新版本軟件包的META-INF簽名信息。該配置文件和該差分升級(jí)包以patch的文件形式存儲(chǔ)在服務(wù)端中,即該patch中包含該差分升級(jí)包和該配置文件。
S202,所述客戶端啟動(dòng)已安裝的所述舊版本軟件包,并向所述服務(wù)端發(fā)起檢測(cè)更新的請(qǐng)求,所述請(qǐng)求攜帶所述舊版本軟件包的描述信息;
其中,所述客戶端可以為智能手機(jī)、智能電視、平板電腦或者智能可穿戴設(shè)備等,該客戶端可以通過(guò)啟動(dòng)移動(dòng)數(shù)據(jù)(如3G或4G)或者無(wú)線網(wǎng)絡(luò)通信技術(shù)(如wifi)連接到所述服務(wù)端,且該客戶端已經(jīng)預(yù)先安裝了舊版本軟件包。所述客戶端并向服務(wù)端發(fā)起檢測(cè)更新的請(qǐng)求指該舊版本軟件包通過(guò)網(wǎng)絡(luò)向所述服務(wù)端發(fā)起軟件更新請(qǐng)求,所述請(qǐng)求攜帶所述舊版本軟件包的描述信息,包括產(chǎn)品Model ID、APK包名、APK版本號(hào)等。
S203,所述服務(wù)端檢測(cè)是否存在差分升級(jí)包和配置文件;
S204,若所述服務(wù)端存在差分升級(jí)包和配置文件,則所述客戶端從所述服務(wù)端下載所述差分升級(jí)包和配置文件,同時(shí)緩存所述客戶端中已安裝的所述舊版本軟件包,獲得所述舊版本軟件包的副本;
其中,所述客戶端從所述服務(wù)端下載所述patch,再對(duì)該patch進(jìn)行解壓,以獲得所述差分升級(jí)包和配置文件??蛻舳司彺嫠隹蛻舳酥幸寻惭b的舊版本軟件包是指客戶端在緩存目錄中緩存當(dāng)前已安裝的APK,以獲得所述舊版本軟件包的副本。此外,可以理解的,若服務(wù)端不存在差分升級(jí)包及配置文件,則表明軟件包無(wú)更新,不再進(jìn)行后續(xù)流程。
S205,所述客戶端根據(jù)所述配置文件對(duì)所述差分升級(jí)包和所述舊版本軟件包的副本進(jìn)行組合,以生成所述新版本軟件包;
其中,上述步驟具體包括:
所述客戶端根據(jù)所述要?jiǎng)h除的文件信息,刪除所述舊版本軟件包的副本中需要?jiǎng)h除的文件條目;
所述客戶端根據(jù)所述要增加的文件信息從所述差分升級(jí)包獲取要增加的文件條目,并將所述要增加的文件條目壓縮進(jìn)所述舊版本軟件包的副本中;
所述客戶端根據(jù)所述要更新的文件信息從所述差分升級(jí)包獲取要更新的文件條目,并將所述要更新的文件條目與所述舊版本軟件包的副本中的對(duì)應(yīng)條目進(jìn)行合并;
其中,客戶端可以采用合成工具,如bspatch或KDiff3,對(duì)所述要更新的文件條目與所述舊版本軟件包的副本中的對(duì)應(yīng)條目進(jìn)行合并。
所述客戶端根據(jù)所述新版本軟件包的META-INF簽名信息,從所述差分升級(jí)包中獲取所述新版本軟件包的META-INF目錄下的簽名相關(guān)文件,并將所述新版本軟件包的META-INF目錄下的簽名相關(guān)文件壓縮進(jìn)所述舊版本軟件包的副本中;
其中,META-INF簽名信息為最新版本的軟件包的META-INF簽名信息,在升級(jí)過(guò)程中,只需將該最新版本的軟件包的META-INF簽名信息存入舊版本軟件包中即可,從而簡(jiǎn)化升級(jí)過(guò)程。
S206,所述客戶端安裝所述新版本軟件包;
具體實(shí)現(xiàn)中,通過(guò)調(diào)用客戶端的系統(tǒng)API,進(jìn)行更新覆蓋安裝。
本實(shí)施例提出的安卓軟件升級(jí)的方法在上一實(shí)施例的基礎(chǔ)上,對(duì)升級(jí)文件進(jìn)行細(xì)化,對(duì)需要?jiǎng)h除的內(nèi)容,根據(jù)配置文件在緩存的舊版本軟件包中之間進(jìn)行刪除,對(duì)需要增加的內(nèi)容,根據(jù)配置文件從差分升級(jí)包提取后之間加入在緩存的舊版本軟件包中,對(duì)于需要更新的內(nèi)容,除了采用采用bspatch工具合并外,還可以通過(guò)設(shè)定更新內(nèi)容預(yù)設(shè)值,在需要更新的內(nèi)容小于該更新內(nèi)容預(yù)設(shè)值時(shí),之間通過(guò)替換的方式進(jìn)行更新,從而進(jìn)一步減少差分升級(jí)包的體積,簡(jiǎn)化升級(jí)過(guò)程。值得注意的是,以上所有升級(jí)內(nèi)容都是基于本發(fā)明提出的根據(jù)舊版本軟件包和新版本軟件包中MF文件中文件條目的SHA1哈希值的不同生產(chǎn)差分升級(jí)包,即從文件角度生成差分升級(jí)包。
可以理解的,在實(shí)際應(yīng)用中,本發(fā)明上述實(shí)施例提供的方法還可以作為現(xiàn)有技術(shù)(二進(jìn)制差分升級(jí))的一個(gè)補(bǔ)充,在APK整體的MD5值未發(fā)生變化時(shí),可以選擇只采用現(xiàn)有技術(shù)進(jìn)行升級(jí),在APK整體的MD5值發(fā)生變化時(shí),采用本發(fā)明上述實(shí)施例提供的方法。
此外,本領(lǐng)域技術(shù)人員可以理解,本發(fā)明所提供的上述實(shí)施例提供的安卓軟件升級(jí)的方法還可以結(jié)合OTA(Over-the-Air Technology,即空中下載技術(shù)),對(duì)/system/app以及預(yù)裝/data/app下的APK進(jìn)行差分升級(jí)。
請(qǐng)參閱圖3,基于同一發(fā)明構(gòu)思,本發(fā)明一實(shí)施例提出的安卓軟件升級(jí)的系統(tǒng),包括服務(wù)端和客戶端,
其中,所述服務(wù)端包括:
補(bǔ)丁生成模塊,用于根據(jù)新版本軟件包和舊版本軟件包的MANIFEST.MF文件中文件條目的SHA1哈希值的差異生成差分升級(jí)包及配置文件,所述配置文件為所述差分升級(jí)包的索引信息;
所述客戶端包括:
下載模塊,用于從所述服務(wù)端下載所述差分升級(jí)包和配置文件,
組合模塊,用于根據(jù)所述配置文件對(duì)所述差分升級(jí)包和所述客戶端已安裝的所述舊版本軟件包進(jìn)行組合,以生成所述新版本軟件包;
安裝模塊,用于安裝所述新版本軟件包。
本實(shí)施例中,所述客戶端還包括:
緩存模塊,用于緩存所述客戶端中已安裝的所述舊版本軟件包,獲得所述舊版本軟件包的副本;
所述組合模塊還用于根據(jù)所述配置文件對(duì)所述差分升級(jí)包和所述緩存模塊緩存的所述舊版本軟件包的副本進(jìn)行組合,以生成所述新版本軟件包。
本實(shí)施例中,所述配置文件包括要?jiǎng)h除的文件信息、要增加的文件信息和要更新的文件信息,
所述組合模塊包括刪除子模塊、增加子模塊和更新子模塊;
所述刪除子模塊用于根據(jù)所述要?jiǎng)h除的文件信息,刪除所述緩存模塊緩存的所述舊版本軟件包的副本中需要?jiǎng)h除的文件條目;
所述增加子模塊用于根據(jù)所述要增加的文件信息從所述差分升級(jí)包獲取要增加的文件條目,并將所述要增加的文件條目壓縮進(jìn)所述緩存模塊緩存的所述舊版本軟件包的副本中;
所述更新子模塊用于根據(jù)所述要更新的文件信息從將所述差分升級(jí)包獲取要更新的文件條目,并將所述要更新的文件條目與所述緩存模塊緩存的所述舊版本軟件包的副本中的對(duì)應(yīng)條目進(jìn)行合并。
本實(shí)施例中,所述配置文件還包括所述新版本軟件包的META-INF簽名信息,所述組合模塊還包括簽名信息壓縮子模塊,所述簽名信息壓縮子模塊用于根據(jù)所述新版本軟件包的META-INF簽名信息,從所述差分升級(jí)包獲取所述新版本軟件包的META-INF目錄下的簽名相關(guān)文件,并將所述新版本軟件包的META-INF目錄下的簽名相關(guān)文件壓縮進(jìn)所述緩存模塊緩存的所述舊版本軟件包的副本中。
本實(shí)施例中,所述客戶端還包括啟動(dòng)模塊和更新請(qǐng)求模塊,所述啟動(dòng)模塊用于啟動(dòng)所述客戶端已安裝的所述舊版本軟件包,所述更新請(qǐng)求模塊用于向所述服務(wù)端發(fā)起檢測(cè)更新的請(qǐng)求,所述請(qǐng)求攜帶所述舊版本軟件包的描述信息;
所述服務(wù)端還包括檢測(cè)模塊,所述檢測(cè)模塊用于檢測(cè)所述服務(wù)端是否存在差分升級(jí)包和配置文件,所述下載模塊用于在所述檢測(cè)模塊檢測(cè)到所述服務(wù)端存在差分升級(jí)包和配置文件時(shí),對(duì)所述差分升級(jí)包和配置文件進(jìn)行下載。
在流程圖中表示或在此以其他方式描述的邏輯和/或步驟,例如,可以被認(rèn)為是用于實(shí)現(xiàn)邏輯功能的可執(zhí)行指令的定序列表,可以具體實(shí)現(xiàn)在任何計(jì)算機(jī)可讀介質(zhì)中,以供指令執(zhí)行系統(tǒng)、裝置或設(shè)備(如基于計(jì)算機(jī)的系統(tǒng)、包括處理器的系統(tǒng)或其他可以從指令執(zhí)行系統(tǒng)、裝置或設(shè)備取指令并執(zhí)行指令的系統(tǒng))使用,或結(jié)合這些指令執(zhí)行系統(tǒng)、裝置或設(shè)備而使用。就本說(shuō)明書而言,“計(jì)算機(jī)可讀介質(zhì)”可以是任何可以包含、存儲(chǔ)、通信、傳播或傳輸程序以供指令執(zhí)行系統(tǒng)、裝置或設(shè)備或結(jié)合這些指令執(zhí)行系統(tǒng)、裝置或設(shè)備而使用的裝置。
計(jì)算機(jī)可讀介質(zhì)的更具體的示例(非窮盡性列表)包括以下:具有一個(gè)或多個(gè)布線的電連接部(電子裝置),便攜式計(jì)算機(jī)盤盒(磁裝置),隨機(jī)存取存儲(chǔ)器(RAM),只讀存儲(chǔ)器(ROM),可擦除可編輯只讀存儲(chǔ)器(EPROM或閃速存儲(chǔ)器),光纖裝置,以及便攜式光盤只讀存儲(chǔ)器(CDROM)。另外,計(jì)算機(jī)可讀介質(zhì)甚至可以是可在其上打印所述程序的紙或其他合適的介質(zhì),因?yàn)榭梢岳缤ㄟ^(guò)對(duì)紙或其他介質(zhì)進(jìn)行光學(xué)掃描,接著進(jìn)行編輯、解譯或必要時(shí)以其他合適方式進(jìn)行處理來(lái)以電子方式獲得所述程序,然后將其存儲(chǔ)在計(jì)算機(jī)存儲(chǔ)器中。
應(yīng)當(dāng)理解,本發(fā)明的各部分可以用硬件、軟件、固件或它們的組合來(lái)實(shí)現(xiàn)。在上述實(shí)施方式中,多個(gè)步驟或方法可以用存儲(chǔ)在存儲(chǔ)器中且由合適的指令執(zhí)行系統(tǒng)執(zhí)行的軟件或固件來(lái)實(shí)現(xiàn)。例如,如果用硬件來(lái)實(shí)現(xiàn),和在另一實(shí)施方式中一樣,可用本領(lǐng)域公知的下列技術(shù)中的任一項(xiàng)或他們的組合來(lái)實(shí)現(xiàn):具有用于對(duì)數(shù)據(jù)信號(hào)實(shí)現(xiàn)邏輯功能的邏輯門電路的離散邏輯電路,具有合適的組合邏輯門電路的專用集成電路,可編程門陣列(PGA),現(xiàn)場(chǎng)可編程門陣列(FPGA)等。
在本說(shuō)明書的描述中,參考術(shù)語(yǔ)“一個(gè)實(shí)施例”、“一些實(shí)施例”、“示例”、“具體示例”、或“一些示例”等的描述意指結(jié)合該實(shí)施例或示例描述的具體特征、結(jié)構(gòu)、材料或者特點(diǎn)包含于本發(fā)明的至少一個(gè)實(shí)施例或示例中。在本說(shuō)明書中,對(duì)上述術(shù)語(yǔ)的示意性表述不一定指的是相同的實(shí)施例或示例。而且,描述的具體特征、結(jié)構(gòu)、材料或者特點(diǎn)可以在任何的一個(gè)或多個(gè)實(shí)施例或示例中以合適的方式結(jié)合。
盡管已經(jīng)示出和描述了本發(fā)明的實(shí)施例,本領(lǐng)域的普通技術(shù)人員可以理解:在不脫離本發(fā)明的原理和宗旨的情況下可以對(duì)這些實(shí)施例進(jìn)行多種變化、修改、替換和變型,本發(fā)明的范圍由權(quán)利要求及其等同物限定。