本發(fā)明涉及應(yīng)用程序技術(shù)領(lǐng)域,更具體地,涉及一種應(yīng)用程序的升級方法、設(shè)備及手機(jī)。
背景技術(shù):
應(yīng)用程序是基于某種應(yīng)用目的而被開發(fā)的,可被安裝于如電腦、手機(jī)等電子設(shè)備上,運行于電子設(shè)備的操作系統(tǒng)(例如windows、ios或者Android系統(tǒng)等)執(zhí)行對應(yīng)的應(yīng)用任務(wù)的計算機(jī)程序(或軟件)。隨著計算機(jī)技術(shù)和移動互聯(lián)網(wǎng)技術(shù)的飛速發(fā)展,越來越多的應(yīng)用程序越來越多地開發(fā)出來提供給用戶以滿足用戶日益增長的應(yīng)用需求,特別是隨著Android智能設(shè)備的普及,通過網(wǎng)絡(luò)發(fā)布的新開發(fā)的Android應(yīng)用程序成幾何級增長。
而由于用戶需求的多樣化及多變化、用戶運行應(yīng)用程序的設(shè)備的多樣性,使得應(yīng)用程序的開發(fā)越來越趨于復(fù)雜化以及迅速化,而為了修復(fù)bug、增加新的應(yīng)用需求等等,應(yīng)用程序通常需要通過版本升級來實現(xiàn),對應(yīng)的應(yīng)用程序的版本升級也變得越來越頻繁。
傳統(tǒng)的應(yīng)用程序的升級方法通常是將新版本的應(yīng)用程序發(fā)布在服務(wù)器上并生成版本升級提示以提醒用戶,讓用戶自行確認(rèn)是否升級以及操作升級(自行從服務(wù)器下載后安裝新版本的應(yīng)用程序),若用戶選擇不升級繼續(xù)使用舊版本應(yīng)用程序,可能會存在程序缺陷不能及時修復(fù)而帶來的安全隱患,若用戶選擇升級又會涉及較多的用戶交互操作,此外若新版本的應(yīng)用程序的安裝包較大,還會存在消耗流量帶來的升級速度慢或者用戶費用較高的問題,影響用戶體驗。
因此,也有一些提供應(yīng)用程序發(fā)布、下載的第三方平臺(例如應(yīng)用市場)提供自動下載升級應(yīng)用程序的服務(wù),但是由于安全性等因素的考慮,第三方平臺通常會對應(yīng)用程序有較長的審核周期,這就可能存在一段時間內(nèi)無法提供用戶新的應(yīng)用需求或者修改舊應(yīng)用程序存在的缺陷,影響用戶體驗。
為此,目前出現(xiàn)了一些應(yīng)用程序的插件升級方法,主要分為下述幾類:
1、基于修改指針的替換類的升級方法,例如以Android應(yīng)用程序為例,使用dalvik_replaceMethod,獲取升級中要待替換安裝包中的類后通過JNI修改C++指針使得原有指針指向替換的類,但這一方法只能應(yīng)用于針對Anroid5.0之前的版本,并且由于不是實際替換類,只是修改指針指向新的類對象,不適用于替換類為新增類的情況,以及需要刪除原有舊版本安裝包的類的情況;
2、基于插樁的升級方法,將新版本的應(yīng)用程序中修改的方法排在舊版本應(yīng)用程序中的原有方法之前,使得系統(tǒng)不再運行原有方法,但是在新版本的應(yīng)用程序中修改的是類變量或者方法時,通過此方法進(jìn)行升級會存在內(nèi)存地址錯亂的問題,導(dǎo)致升級失敗,并且新舊兩個版本的安裝包存在多處差異時,會存在升級包過大帶來的升級速度慢以及流量消耗可能帶來的費用問題;
3、基于差分包的升級方法,通過比較應(yīng)用程序新舊兩個版本的安裝包的整體(資源文件、代碼文件等)差異而生成差分包提供用戶下載升級,但是在新舊兩個版本的安裝包存在多處差異時就可能帶來差分包過大,升級過程中存在升級速度慢以及流量消耗可能帶來的費用問題。
因此,發(fā)明人認(rèn)為,有必要對上述現(xiàn)有技術(shù)中存在的問題進(jìn)行改進(jìn)。
技術(shù)實現(xiàn)要素:
本發(fā)明的一個目的是提供一種用于升級應(yīng)用程序的新技術(shù)方案。
根據(jù)本發(fā)明的第一方面,提供了一種應(yīng)用程序的升級方法,包括:
獲取新版本的目標(biāo)應(yīng)用程序的安裝包中的第一代碼文件以及舊版本的目標(biāo)應(yīng)用程序?qū)?yīng)的安裝包中的第二代碼文件,其中,所述第一代碼文件中存儲有包含若干個類的第一目標(biāo)代碼,所述第二代碼文件中存儲有包含若干個類的第二目標(biāo)代碼;
比較所述第一代碼文件與所述第二代碼文件,以確定對應(yīng)的所述第一目標(biāo)代碼與所述第二目標(biāo)代碼中存在差異的差異類;
根據(jù)所述差異類,生成補(bǔ)丁包以供下載。
可選地,所述根據(jù)所述差異類生成補(bǔ)丁包以供下載的步驟為:
根據(jù)所述差異類,對所述第二代碼文件進(jìn)行類替換得到補(bǔ)丁包。
可選地,所述目標(biāo)應(yīng)用程序為Android應(yīng)用程序,所述第一代碼文件、第二代碼文件以及補(bǔ)丁包為dex文件。
根據(jù)本發(fā)明的第二方面,提供一種應(yīng)用程序的升級方法,包括:
獲取補(bǔ)丁包,所述補(bǔ)丁包是根據(jù)本發(fā)明的第一方面任意一項所述的應(yīng)用程序的升級方法生成;
根據(jù)所述補(bǔ)丁包,對舊版本的目標(biāo)應(yīng)用程序?qū)?yīng)的安裝包中的第二代碼文件進(jìn)行類替換,以實現(xiàn)目標(biāo)應(yīng)用程序的升級。
可選地,在執(zhí)行對所述第二代碼文件進(jìn)行類替換的步驟之后,生成對應(yīng)的新版本的目標(biāo)應(yīng)用程序的安裝包以實現(xiàn)所述目標(biāo)應(yīng)用程序的升級。
根據(jù)本發(fā)明的第三方面,提供一種應(yīng)用程序的升級設(shè)備,包括:
文件獲取單元,用于獲取新版本的目標(biāo)應(yīng)用程序的安裝包中的第一代碼文件以及舊版本的目標(biāo)應(yīng)用程序?qū)?yīng)的安裝包中的第二代碼文件,其中,所述第一代碼文件中存儲有包含若干個類的第一目標(biāo)代碼,所述第二代碼文件中存儲有包含若干個類的第二目標(biāo)代碼;
文件比較單元,用于比較所述第一代碼文件與所述第二代碼文件,以確定對應(yīng)的所述第一目標(biāo)代碼與所述第二目標(biāo)代碼中存在差異的差異類;
文件生成單元,根據(jù)所述差異類,生成補(bǔ)丁包以供下載。
可選地,所述文件生成單元,用于根據(jù)所述差異類,對所述第二代碼文件進(jìn)行類替換得到補(bǔ)丁包。
根據(jù)本發(fā)明的第四方面,提供一種應(yīng)用程序的升級設(shè)備,包括:
文件獲取單元,用于獲取補(bǔ)丁包,所述補(bǔ)丁包是根據(jù)本發(fā)明的第一方面中任意一項所述的應(yīng)用程序的升級方法生成;
文件替換單元,用于根據(jù)所述補(bǔ)丁包,對舊版本的目標(biāo)應(yīng)用程序?qū)?yīng)的安裝包中的第二代碼文件進(jìn)行類替換,以實現(xiàn)目標(biāo)應(yīng)用程序的升級。
可選地,所述的應(yīng)用程序的升級設(shè)備,還包括:
安裝包生成單元,用于生成對應(yīng)的新版本的目標(biāo)應(yīng)用程序的安裝包以實現(xiàn)所述目標(biāo)應(yīng)用程序的升級。
根據(jù)本發(fā)明的第五方面,還提供一種電子設(shè)備,至少包括本發(fā)明第四方面提供的應(yīng)用程序的升級設(shè)備。
本發(fā)明的發(fā)明人發(fā)現(xiàn),在現(xiàn)有技術(shù)中,尚未存在一種升級速度較快并且升級成功率較高的應(yīng)用程序的升級方法。因此,本發(fā)明所要實現(xiàn)的技術(shù)任務(wù)或者所要解決的技術(shù)問題是本領(lǐng)域技術(shù)人員從未想到的或者沒有預(yù)期到的,故本發(fā)明是一種新的技術(shù)方案。
通過以下參照附圖對本發(fā)明的示例性實施例的詳細(xì)描述,本發(fā)明的其它特征及其優(yōu)點將會變得清楚。
附圖說明
被結(jié)合在說明書中并構(gòu)成說明書的一部分的附圖示出了本發(fā)明的實施例,并且連同其說明一起用于解釋本發(fā)明的原理。
圖1是顯示可用于實現(xiàn)本發(fā)明的實施例的實施環(huán)境的硬件配置框圖。
圖2示出了本發(fā)明的實施例的應(yīng)用程序的升級方法的流程圖。
圖3示出了本發(fā)明的實施例的又一應(yīng)用程序的升級方法的流程圖。
圖4示出了本發(fā)明的實施例的應(yīng)用程序的升級方法的例子的示意圖。
圖5示出了本發(fā)明的實施例的應(yīng)用程序的升級設(shè)備的框圖。
圖6示出了本發(fā)明的實施例的應(yīng)用程序的又一升級設(shè)備的框圖。
具體實施方式
現(xiàn)在將參照附圖來詳細(xì)描述本發(fā)明的各種示例性實施例。應(yīng)注意到:除非另外具體說明,否則在這些實施例中闡述的部件和步驟的相對布置、數(shù)字表達(dá)式和數(shù)值不限制本發(fā)明的范圍。
以下對至少一個示例性實施例的描述實際上僅僅是說明性的,決不作為對本發(fā)明及其應(yīng)用或使用的任何限制。
對于相關(guān)領(lǐng)域普通技術(shù)人員已知的技術(shù)、方法和設(shè)備可能不作詳細(xì)討論,但在適當(dāng)情況下,所述技術(shù)、方法和設(shè)備應(yīng)當(dāng)被視為說明書的一部分。
在這里示出和討論的所有例子中,任何具體值應(yīng)被解釋為僅僅是示例性的,而不是作為限制。因此,示例性實施例的其它例子可以具有不同的值。
應(yīng)注意到:相似的標(biāo)號和字母在下面的附圖中表示類似項,因此,一旦某一項在一個附圖中被定義,則在隨后的附圖中不需要對其進(jìn)行進(jìn)一步討論。
<硬件配置>
圖1是示出可以實現(xiàn)本發(fā)明的實施例的實施環(huán)境1000的硬件配置的框圖。
如圖1所示,實施環(huán)境1000包括服務(wù)器1100、客戶端1200以及網(wǎng)絡(luò)1300。
服務(wù)器1100例如可以是刀片服務(wù)器等。在一個例子中,服務(wù)器1100可以是一臺計算機(jī)。在在另一個例子中,服務(wù)器1100可以如圖1所示,包括處理器1110、存儲器1120、接口裝置1130、通信裝置1140、顯示裝置1150、輸入裝置1160。盡管服務(wù)器也可以包括揚(yáng)聲器、麥克風(fēng)等等,但是,這些部件與本發(fā)明無關(guān),故在此省略。其中,處理器1110例如可以是中央處理器CPU、微處理器MCU等。存儲器1120例如包括ROM(只讀存儲器)、RAM(隨機(jī)存取存儲器)、諸如硬盤的非易失性存儲器等。接口裝置1130例如包括USB接口、串行接口等。通信裝置1140例如能夠進(jìn)行有線或無線通信。顯示裝置1150例如是液晶顯示屏。輸入裝置1160例如可以包括觸摸屏、鍵盤等。
客戶端設(shè)備1200可以是便攜式電腦(1200-1)、臺式計算機(jī)(1200-2)、手機(jī)(1200-3)、平板電腦(1200-4)等。如圖1所示,客戶端1200可以包括處理器1210、存儲器1220、接口裝置1230、通信裝置1240、顯示裝置1250、輸入裝置1260、揚(yáng)聲器1270、麥克風(fēng)4080,等等。其中,處理器1210可以是中央處理器CPU、微處理器MCU等。存儲器1220例如包括ROM(只讀存儲器)、RAM(隨機(jī)存取存儲器)、諸如硬盤的非易失性存儲器等。接口裝置1230例如包括USB接口、耳機(jī)接口等。通信裝置1240例如能夠進(jìn)行有線或無線通信。顯示裝置1250例如是液晶顯示屏、觸摸顯示屏等。輸入裝置1260例如可以包括觸摸屏、鍵盤等。用戶可以通過揚(yáng)聲器1270和麥克風(fēng)1280輸入/輸出語音信息。
通信網(wǎng)絡(luò)1300可以是無線網(wǎng)絡(luò)也可以網(wǎng)絡(luò),可以是局域網(wǎng)也可以是廣域網(wǎng)。在圖1所示的配置環(huán)境1000中,客戶端1200-1、1200-2、1200-3、1200-4以及服務(wù)器1100可以通過通信網(wǎng)絡(luò)1300進(jìn)行通信。
圖1所示的配置環(huán)境1100僅是解釋性的,并且決不是為了要限制本發(fā)明、其應(yīng)用或用途。應(yīng)用于本發(fā)明的實施例中,服務(wù)器1100的所述存儲器1120用于存儲指令,所述指令用于控制所述處理器1110進(jìn)行操作以執(zhí)行本發(fā)明實施例提供的應(yīng)用程序的升級方法。此外,客戶端1200的所述存儲器1220用于存儲指令,所述指令用于控制所述處理器1210進(jìn)行操作以執(zhí)行本發(fā)明實施例提供的應(yīng)用程序的升級方法。本領(lǐng)域技術(shù)人員應(yīng)當(dāng)理解,盡管在圖1中對服務(wù)器1100以及客戶端1200都示出了多個裝置,但是,本發(fā)明可以僅涉及其中的部分裝置,例如,服務(wù)器1100只涉及處理器1110和存儲裝置1120,或者客戶端1200只涉及處理器1210和存儲裝置1220等。技術(shù)人員可以根據(jù)本發(fā)明所公開方案設(shè)計指令。指令如何控制處理器進(jìn)行操作,這是本領(lǐng)域公知,故在此不再詳細(xì)描述。
<實施例>
在本實施例中提供一種應(yīng)用程序的升級方法,如圖2所示,包括:
步驟S2100,獲取新版本的目標(biāo)應(yīng)用程序的安裝包中的第一代碼文件以及舊版本的目標(biāo)應(yīng)用程序?qū)?yīng)的安裝包中的第二代碼文件,其中,所述第一代碼文件中存儲有包含若干個類的第一目標(biāo)代碼,所述第二代碼文件中存儲有包含若干個類的第二目標(biāo)代碼。
一般而言,應(yīng)用程序是基于某種應(yīng)用目的而被開發(fā)的,可被安裝于如電腦、手機(jī)等電子設(shè)備上,運行于電子設(shè)備的操作系統(tǒng)(例如windows、ios或者Android系統(tǒng)等)執(zhí)行對應(yīng)的應(yīng)用任務(wù)的計算機(jī)程序(或軟件),例如手機(jī)上安卓應(yīng)用對應(yīng)的程序等。通常應(yīng)用程序一旦發(fā)布后,由于需要修正程序錯誤或者新增應(yīng)用程序功能等各種原因,應(yīng)用程序的開發(fā)方通常會發(fā)布對應(yīng)做了更新的新版本的應(yīng)用程序的安裝包,例如APK(Android Package,安卓應(yīng)用程序安裝包),以供應(yīng)用程序的使用者下載進(jìn)行升級。
在本實施例中,目標(biāo)應(yīng)用程序是待執(zhí)行升級的應(yīng)用程序。在新版本的目標(biāo)應(yīng)用程序的安裝包生成后,可以通過解壓該安裝包獲取所述第一代碼文件,其中,所述第一代碼文件中存儲有包含若干個類的第一目標(biāo)代碼,所述類(class)是面向?qū)ο缶幊碳夹g(shù)中的最基本的概念,是一種抽象的數(shù)據(jù)類型,通常類的定義為:Class類名{類內(nèi)容}。
具體地,以目標(biāo)應(yīng)用程序為Android應(yīng)用程序為例,對應(yīng)的安裝包(APK)通常包含資源文件和代碼文件,所述資源文件通常包括圖片、xml(可擴(kuò)展標(biāo)記語言)、主要存在于asset和res文件夾中的音樂等,而所述代碼文件是單獨存放的dex文件,是APK的classes.dex文件通過dex優(yōu)化過程得到的并且可以從APK中提取出來的可執(zhí)行文件。與所述資源文件相比,所述dex文件所占的存儲很少,只占整個APK中極小的部分。在本例中,第一代碼文件是從新版本的目標(biāo)應(yīng)用程序的APK中解壓后抽取出來的dex文件。
類似地,從舊版本的目標(biāo)應(yīng)用程序?qū)?yīng)的安裝包中獲取第二代碼文件,例如,可以將本地備份的舊版本的安裝包解壓,獲取所述第二代碼文件,其中,所述第二代碼文件中存儲有包含若干個類的第二目標(biāo)代碼。例如,若目標(biāo)應(yīng)用程序是Android應(yīng)用程序,第二代碼文件是從舊版本目標(biāo)應(yīng)用程序的APK中解壓后抽取出來的dex文件。
在通過步驟S2100獲取第一代碼文件和第二代碼文件后,進(jìn)入步驟S2200,比較所述第一代碼文件與所述第二代碼文件,以確定對應(yīng)的所述第一目標(biāo)代碼與所述第二目標(biāo)代碼中存在差異的差異類。
具體地,以第一代碼文件中存儲的第一目標(biāo)代碼包含類A(Class A)和類B(Class B),第二代碼文件中存儲的第二目標(biāo)代碼也包含類A(Class A)和類B(Class B)為例:
(1)在第一目標(biāo)代碼中包含的類A(Class A)和類B(Class B)如下所示:
(2)在第二目標(biāo)代碼中包含的類A(Class A)和類B(Class B)如下所示:
如第(1)、(2)中示意性列出的偽代碼所示,類之間會存在多重嵌套,即一個大類中可能包含很多內(nèi)部類,例如,Class A中包含Class B,在本實施例中執(zhí)行所述步驟S2200確定差異類時,比較第一代碼文件和第二代碼文件,發(fā)現(xiàn)第一目標(biāo)代碼中的Class B與第二目標(biāo)代碼中的Class B所包含的方法內(nèi)容不同,因此確定差異類為Class B。
類似地,當(dāng)發(fā)現(xiàn)第一目標(biāo)代碼中包含的但第二目標(biāo)代碼中未包含的Class C時,確定差異類為Class C;當(dāng)發(fā)現(xiàn)第一目標(biāo)代碼中不包含第二目標(biāo)代碼中的Class D時,可以確定差異類為Class D,也可以忽略該Class D。
在通過步驟S2200確定差異類之后,進(jìn)入步驟S2300,根據(jù)所述差異類,生成補(bǔ)丁包以供下載。
具體地,根據(jù)差異類生成的補(bǔ)丁包,可以是至包含差異類以及與差異類相關(guān)的配置信息。例如,繼續(xù)以第一代碼文件中存儲的第一目標(biāo)代碼包含類A(Class A)和類B(Class B),第二代碼文件中存儲的第二目標(biāo)代碼也包含類A(Class A)和類B(Class B)為例:確定差異類為Class B時,所述補(bǔ)丁包中包含只存儲Class B的代碼文件和指示Class B的配置信息的配置文件;類似地,在確定差異類為第一目標(biāo)代碼中包含的而第二目標(biāo)代碼不包含的Class C時,所述補(bǔ)丁包中包含Class C對應(yīng)的代碼文件和指示Class C的配置信息的配置文件;或者,在確定差異類為第一目標(biāo)代碼中不包含的而第二目標(biāo)代碼包含的Class D時,所述補(bǔ)丁包中包含Class D對應(yīng)的代碼文件和指示Class D的配置信息的配置文件。
又或者,可以根據(jù)所述差異類,對所述第二代碼文件進(jìn)行類替換,得到補(bǔ)丁包。
具體地,當(dāng)在比較第一代碼文件和第二代碼文件,發(fā)現(xiàn)第一目標(biāo)代碼中的Class B與第二目標(biāo)代碼中的Class B所包含的方法內(nèi)容不同,因此確定差異類為Class B時,第二目標(biāo)代碼中原有的Class B進(jìn)行替換,替換為第一目標(biāo)代碼中的Class B,將對應(yīng)的類替換后得到的第二代碼文件作為補(bǔ)丁包;類似地,在確定差異類為第一目標(biāo)代碼中包含的而第二目標(biāo)代碼不包含的Class C時,在第二目標(biāo)代碼中增加的Class C,將對應(yīng)的類替換后得到的第二代碼文件作為補(bǔ)丁包;或者,在確定差異類為第一目標(biāo)代碼中不包含的而第二目標(biāo)代碼包含的Class D時,可以刪除第二代碼文件中的Class D,或者修改代碼邏輯結(jié)構(gòu),使得Class D不會在通過補(bǔ)丁包升級后的應(yīng)用程序運行時被運行或調(diào)用,又或者在確保Class D不會在通過補(bǔ)丁包升級后的應(yīng)用程序運行時被運行或調(diào)用,保留Class D不做操作,之后將對應(yīng)的類替換后得到的第二代碼文件作為補(bǔ)丁包。
更具體地,如果目標(biāo)應(yīng)用程序為Android應(yīng)用程序,第一代碼文件、第二代碼文件為dex文件,對應(yīng)的補(bǔ)丁包也為dex文件。
在生成所述補(bǔ)丁包后,可以將所述補(bǔ)丁包存儲在目標(biāo)應(yīng)用程序的服務(wù)器(例如云端服務(wù)器)中,由用戶主動下載升級,或者由安裝舊版本的目標(biāo)應(yīng)用程序的電子設(shè)備根據(jù)預(yù)置的規(guī)則自動觸發(fā)下載實現(xiàn)靜默升級,也可以直接推送至安裝舊版本的目標(biāo)應(yīng)用程序的電子設(shè)備,觸發(fā)后臺下載實現(xiàn)靜默升級。
本實施例中,所述補(bǔ)丁包是根據(jù)差異類生成,無論是與差異類對應(yīng)的代碼文件和指示差異類的配置信息的配置文件,或者是根據(jù)差異類執(zhí)行類替換后的代碼文件,與現(xiàn)有技術(shù)中通過整體比較新舊版本的應(yīng)用程序得到的差分包(通常包含資源文件和代碼文件)相比,對應(yīng)的文件都較小,不會帶來過多流量消耗,節(jié)省下載時間,提高升級速度,使用戶得到更好的升級體驗。特別適用于修改程序缺陷的新版本的應(yīng)用程序的后臺靜默升級,能快速修復(fù)程序問題。
上述已經(jīng)結(jié)合例子說明了圖2所示的應(yīng)用程序的升級方法,在本實施例中,可以通過生成新版本的目標(biāo)應(yīng)用程序的計算機(jī)設(shè)備或者服務(wù)器設(shè)備實施該方法,例如,圖1中的服務(wù)器1100,在此不再贅述。
在本實施例中,還提供一種應(yīng)用程序的升級方法,如圖3所示,包括:
步驟S3100,獲取如圖2所示的應(yīng)用程序的升級方法中所生成任意一項所述的補(bǔ)丁包;
在上述實施例中,獲取所述補(bǔ)丁包,可以是通過從目標(biāo)應(yīng)用程序的后臺服務(wù)器中靜默下載獲取,也可以是通過推送升級消息通知后用戶觸發(fā)的主動下載獲取。
在通過步驟S3100獲取所述補(bǔ)丁包后,進(jìn)入步驟S3200,根據(jù)所述補(bǔ)丁包,對舊版本的目標(biāo)應(yīng)用程序?qū)?yīng)的安裝包中的第二代碼文件進(jìn)行類替換,以實現(xiàn)目標(biāo)應(yīng)用程序的升級。
在一個例子中,所述補(bǔ)丁包是包含的是差異類對應(yīng)的代碼文件和指示差異類的配置信息的配置文件,因此,根據(jù)補(bǔ)丁包對舊版本的目標(biāo)應(yīng)用程序?qū)?yīng)的安裝包中的第二代碼文件進(jìn)行類替換,具體地,是根據(jù)指示差異類的配置信息的配置文件,將差異類替換第二代碼文件中對應(yīng)的部分,例如,差異類是第二代碼文件中已有的Class B,根據(jù)配置文件找到第二代碼文件中的第二目標(biāo)代碼中原有Class B對應(yīng)的部分,替換為補(bǔ)丁包中的Class B;又例如,差異類是第二代碼文件中不包含的Class C,根據(jù)配置文件找到第二代碼文件中的第二目標(biāo)代碼中應(yīng)該插入Class C的部分,新增為補(bǔ)丁包中的Class C;或者,差異類是第二代碼文件中包含的Class D,卻未包含在于新版本的目標(biāo)應(yīng)用程序?qū)?yīng)的第一目標(biāo)代碼中,可以根據(jù)配置文件的指示,刪除Class D或者修改代碼邏輯結(jié)構(gòu),使得Class D不會在通過補(bǔ)丁包升級后的應(yīng)用程序運行時被運行或調(diào)用,又或者在確保Class D不會在通過補(bǔ)丁包升級后的應(yīng)用程序運行時被運行或調(diào)用,保留Class D不做操作。
但在上述例子中涉及的具體步驟較為復(fù)雜,在實施的電子設(shè)備的內(nèi)存不足或者運行速度較慢時,容易影響升級成功率,并且當(dāng)目標(biāo)應(yīng)用程序為Android應(yīng)用程序,運行所述目標(biāo)應(yīng)用程序的電子設(shè)備的操作系統(tǒng)是Android 6.0以后的版本時,Android系統(tǒng)也不支持對于上述例子中的操作。因此,在另一個例子中,所述補(bǔ)丁包是根據(jù)所述差異類將舊版本的目標(biāo)應(yīng)用程序?qū)?yīng)的第二代碼文件執(zhí)行類替換后的代碼文件。因此,根據(jù)補(bǔ)丁包對舊版本的目標(biāo)應(yīng)用程序?qū)?yīng)的安裝包中的第二代碼文件進(jìn)行類替換,可以是直接將第二代碼文件替換為補(bǔ)丁包對應(yīng)的代碼文件。實施簡單,可以進(jìn)一步提高升級成功率。
在執(zhí)行對所述第二代碼文件進(jìn)行類替換的步驟之后,生成所述新版本的目標(biāo)應(yīng)用程序的安裝包以實現(xiàn)所述目標(biāo)應(yīng)用程序的升級。具體地,可以根據(jù)第二代碼文件對舊版本的目標(biāo)應(yīng)用程序的安裝包重新打包,得到對應(yīng)的新版本的目標(biāo)應(yīng)用程序的安裝包。
在本實施例中如圖3所示的應(yīng)用程序的升級方法中,所述補(bǔ)丁包是根據(jù)以類為比較粒度獲取的差異類生成的,不僅補(bǔ)丁包較小可以提高升級速度,可以使得在下載所述補(bǔ)丁包后,對舊版本的目標(biāo)應(yīng)用程序的安裝包對應(yīng)的第二文件執(zhí)行類替換時,保證代碼整合的成功率,提高升級成功的概率。特別適用于修改程序缺陷的新版本的應(yīng)用程序的后臺靜默升級,能快速修復(fù)程序問題。
上述已經(jīng)結(jié)合例子說明了圖3所示的應(yīng)用程序的升級方法,在本實施例中,可以通過安裝舊版本的目標(biāo)應(yīng)用程序的客戶端設(shè)備實施該方法,例如,圖1中的客戶端1200,在此不再贅述。
以下將結(jié)合圖4舉個例子進(jìn)一步說明本實施例中所提供的應(yīng)用程序的升級方法。在本例中,所述目標(biāo)應(yīng)用程序是Android應(yīng)用程序,對應(yīng)的安裝包為APK,安裝有舊版本的Android應(yīng)用程序的設(shè)備為手機(jī),新版本的Android應(yīng)用程序的APK(以下簡稱新APK)可以由開發(fā)人員通過開發(fā)設(shè)備(例如計算機(jī)或者開發(fā)服務(wù)器等)完成,舊版本的Android應(yīng)用程序的APK(簡稱舊APK)也本地備份在開發(fā)設(shè)備中。此外在本例中,第一代碼文件、第二代碼文件、補(bǔ)丁包均為dex文件。
如圖4所示,應(yīng)用程序的升級方法包括:
S401,在新APK開發(fā)完成后,將新APK解壓抽取dex文件;
S402,從舊APK中抽取dex文件;
S403,比較新舊兩個APK中抽取的dex文件確定差異類,具體實施方式可以如圖2所示的步驟S2200,在此不再贅述;
S404,根據(jù)差異類生成補(bǔ)丁包,具體實施方式可以如圖2所示的步驟S2300,在此不再贅述;
S405,將補(bǔ)丁包上傳到升級服務(wù)器中,以供用戶升級下載;
S406,從升級服務(wù)器下載補(bǔ)丁包,可以是手機(jī)后臺靜默下載,也可以由用戶收到提醒消息后觸發(fā)下載;
S407,根據(jù)補(bǔ)丁包對舊APK中的dex文件進(jìn)行類替換,具體實施方式可以如圖3所示的步驟S3200,在此不再贅述;
S408,重新打包生成新APK;
S409,安裝新APK完成升級。
在本例中,補(bǔ)丁包根據(jù)以類為比較粒度得到的差異類生成,補(bǔ)丁包較小,下載速度快,節(jié)省下載時間也不會帶來過多流量消耗,使得用戶得到升級速度快的體驗,此外,對舊APK中的dex文件進(jìn)行類替換能提高文件整合的成功概率,保證升級成功率。
在本實施例中,還提供一種應(yīng)用程序的升級設(shè)備5000,如圖5所示,包括:文件獲取單元5100、文件生成單元5200以及文件生成單元5300,用于實施本實施例中如圖2所示的應(yīng)用程序的升級方法,在此不再贅述。
應(yīng)用程序的升級設(shè)備5000,包括:
文件獲取單元5100,用于獲取新版本的目標(biāo)應(yīng)用程序的安裝包中的第一代碼文件以及舊版本的目標(biāo)應(yīng)用程序?qū)?yīng)的安裝包中的第二代碼文件,其中,所述第一代碼文件中存儲有包含若干個類的第一目標(biāo)代碼,所述第二代碼文件中存儲有包含若干個類的第二目標(biāo)代碼;
文件比較單元5200,用于比較所述第一代碼文件與所述第二代碼文件,以確定對應(yīng)的所述第一目標(biāo)代碼與所述第二目標(biāo)代碼中存在差異的差異類;
文件生成單元5300,根據(jù)所述差異類,生成補(bǔ)丁包以供下載。
可選地,所述文件生成單元5300,用于根據(jù)所述差異類,對所述第二代碼文件進(jìn)行類替換得到補(bǔ)丁包。
在一個例子中,所述目標(biāo)應(yīng)用程序為Android應(yīng)用程序,所述第一代碼文件、第二代碼文件以及補(bǔ)丁包為dex文件。
在本實施例中,還提供一種應(yīng)用程序的升級設(shè)備6000,如圖6所示,包括:文件獲取單元6100、文件替換單元6200,可選地,還包括安裝包生成單元6300,用于實施本實施例中如圖3所示的應(yīng)用程序的升級方法,在此不再贅述。
應(yīng)用程序的升級設(shè)備6000,包括:
文件獲取單元6100,用于獲取補(bǔ)丁包,所述補(bǔ)丁包根據(jù)本實施例中如圖2所示的應(yīng)用程序的升級方法生成;
文件替換單元6200,用于根據(jù)所述補(bǔ)丁包,對舊版本的目標(biāo)應(yīng)用程序?qū)?yīng)的安裝包中的第二代碼文件進(jìn)行類替換,以實現(xiàn)目標(biāo)應(yīng)用程序的升級。
可選地,所述應(yīng)用程序的升級設(shè)備6000,還包括:
安裝包生成單元6300,用于生成對應(yīng)的新版本的目標(biāo)應(yīng)用程序的安裝包以實現(xiàn)所述目標(biāo)應(yīng)用程序的升級。
在本實施例中,還提供一種電子設(shè)備,至少包括如圖6所示的應(yīng)用程序的升級設(shè)備6000。例如,可以是手機(jī)。
上述已經(jīng)結(jié)合例子和附圖說明了本實施例中提供的應(yīng)用程序的升級方法、設(shè)備及電子設(shè)備:在生成新版本的目標(biāo)應(yīng)用程序的安裝包后,將與新版本的目標(biāo)應(yīng)用程序的安裝包對應(yīng)的第一代碼文件和與舊版本的目標(biāo)應(yīng)用程序的安裝包對應(yīng)的第二代碼文件進(jìn)行比較,通過比較對應(yīng)的第一目標(biāo)代碼和第二目標(biāo)代碼確定存在差異的類,根據(jù)差異類生成補(bǔ)丁包以供下載;在下載補(bǔ)丁包后可以對舊版本的目標(biāo)應(yīng)用程序的安裝包中的第二代碼文件進(jìn)行替換,以完成升級。在本示例中,以類為比較粒度而生成的補(bǔ)丁包較小,可以避免較大的流量消耗,節(jié)省升級下載的時間,提高升級速度,使得用戶的升級體驗更好,并且,對舊版本的目標(biāo)應(yīng)用程序的安裝包對應(yīng)的第二文件執(zhí)行類替換時,保證代碼整合的成功率,提高升級成功的概率。特別適用于修改程序缺陷的新版本的應(yīng)用程序的后臺靜默升級,能快速修復(fù)程序問題。
本領(lǐng)域技術(shù)人員應(yīng)當(dāng)明白,可以通過各種方式來實現(xiàn)應(yīng)用程序的升級設(shè)備5000和應(yīng)用程序的升級設(shè)備6000。例如,可以通過指令配置處理器來實現(xiàn)應(yīng)用程序的升級設(shè)備5000和/或應(yīng)用程序的升級設(shè)備6000。例如,可以將指令存儲在ROM中,并且當(dāng)啟動設(shè)備時,將指令從ROM讀取到可編程器件中來實現(xiàn)應(yīng)用程序的升級設(shè)備5000和/或應(yīng)用程序的升級設(shè)備6000。例如,可以將應(yīng)用程序的升級設(shè)備5000和/或應(yīng)用程序的升級設(shè)備6000固化到專用器件(例如ASIC)中。可以將應(yīng)用程序的升級設(shè)備5000和/或應(yīng)用程序的升級設(shè)備6000分成相互獨立的單元,或者可以將它們合并在一起實現(xiàn)。應(yīng)用程序的升級設(shè)備5000和/或應(yīng)用程序的升級設(shè)備6000可以通過上述各種實現(xiàn)方式中的一種來實現(xiàn),或者可以通過上述各種實現(xiàn)方式中的兩種或更多種方式的組合來實現(xiàn)。
本領(lǐng)域技術(shù)人員公知的是,隨著諸如大規(guī)模集成電路技術(shù)的電子信息技術(shù)的發(fā)展和軟件硬件化的趨勢,要明確劃分計算機(jī)系統(tǒng)軟、硬件界限已經(jīng)顯得比較困難了。因為,任何操作可以軟件來實現(xiàn),也可以由硬件來實現(xiàn)。任何指令的執(zhí)行可以由硬件完成,同樣也可以由軟件來完成。對于某一機(jī)器功能采用硬件實現(xiàn)方案還是軟件實現(xiàn)方案,取決于價格、速度、可靠性、存儲容量、變更周期等非技術(shù)性因素。因此,對于電子信息技術(shù)領(lǐng)域的普通技術(shù)人員來說,更為直接和清楚地描述一個技術(shù)方案的方式是描述該方案中的各個操作。在知道所要執(zhí)行的操作的情況下,本領(lǐng)域技術(shù)人員可以基于對所述非技術(shù)性因素的考慮直接設(shè)計出期望的產(chǎn)品。
本發(fā)明可以是系統(tǒng)、方法和/或計算機(jī)程序產(chǎn)品。計算機(jī)程序產(chǎn)品可以包括計算機(jī)可讀存儲介質(zhì),其上載有用于使處理器實現(xiàn)本發(fā)明的各個方面的計算機(jī)可讀程序指令。
計算機(jī)可讀存儲介質(zhì)可以是可以保持和存儲由指令執(zhí)行設(shè)備使用的指令的有形設(shè)備。計算機(jī)可讀存儲介質(zhì)例如可以是――但不限于――電存儲設(shè)備、磁存儲設(shè)備、光存儲設(shè)備、電磁存儲設(shè)備、半導(dǎo)體存儲設(shè)備或者上述的任意合適的組合。計算機(jī)可讀存儲介質(zhì)的更具體的例子(非窮舉的列表)包括:便攜式計算機(jī)盤、硬盤、隨機(jī)存取存儲器(RAM)、只讀存儲器(ROM)、可擦式可編程只讀存儲器(EPROM或閃存)、靜態(tài)隨機(jī)存取存儲器(SRAM)、便攜式壓縮盤只讀存儲器(CD-ROM)、數(shù)字多功能盤(DVD)、記憶棒、軟盤、機(jī)械編碼設(shè)備、例如其上存儲有指令的打孔卡或凹槽內(nèi)凸起結(jié)構(gòu)、以及上述的任意合適的組合。這里所使用的計算機(jī)可讀存儲介質(zhì)不被解釋為瞬時信號本身,諸如無線電波或者其他自由傳播的電磁波、通過波導(dǎo)或其他傳輸媒介傳播的電磁波(例如,通過光纖電纜的光脈沖)、或者通過電線傳輸?shù)碾娦盘枴?/p>
這里所描述的計算機(jī)可讀程序指令可以從計算機(jī)可讀存儲介質(zhì)下載到各個計算/處理設(shè)備,或者通過網(wǎng)絡(luò)、例如因特網(wǎng)、局域網(wǎng)、廣域網(wǎng)和/或無線網(wǎng)下載到外部計算機(jī)或外部存儲設(shè)備。網(wǎng)絡(luò)可以包括銅傳輸電纜、光纖傳輸、無線傳輸、路由器、防火墻、交換機(jī)、網(wǎng)關(guān)計算機(jī)和/或邊緣服務(wù)器。每個計算/處理設(shè)備中的網(wǎng)絡(luò)適配卡或者網(wǎng)絡(luò)接口從網(wǎng)絡(luò)接收計算機(jī)可讀程序指令,并轉(zhuǎn)發(fā)該計算機(jī)可讀程序指令,以供存儲在各個計算/處理設(shè)備中的計算機(jī)可讀存儲介質(zhì)中。
用于執(zhí)行本發(fā)明操作的計算機(jī)程序指令可以是匯編指令、指令集架構(gòu)(ISA)指令、機(jī)器指令、機(jī)器相關(guān)指令、微代碼、固件指令、狀態(tài)設(shè)置數(shù)據(jù)、或者以一種或多種編程語言的任意組合編寫的源代碼或目標(biāo)代碼,所述編程語言包括面向?qū)ο蟮木幊陶Z言—諸如Smal ltalk、C++等,以及常規(guī)的過程式編程語言—諸如“C”語言或類似的編程語言。計算機(jī)可讀程序指令可以完全地在用戶計算機(jī)上執(zhí)行、部分地在用戶計算機(jī)上執(zhí)行、作為一個獨立的軟件包執(zhí)行、部分在用戶計算機(jī)上部分在遠(yuǎn)程計算機(jī)上執(zhí)行、或者完全在遠(yuǎn)程計算機(jī)或服務(wù)器上執(zhí)行。在涉及遠(yuǎn)程計算機(jī)的情形中,遠(yuǎn)程計算機(jī)可以通過任意種類的網(wǎng)絡(luò)—包括局域網(wǎng)(LAN)或廣域網(wǎng)(WAN)—連接到用戶計算機(jī),或者,可以連接到外部計算機(jī)(例如利用因特網(wǎng)服務(wù)提供商來通過因特網(wǎng)連接)。在一些實施例中,通過利用計算機(jī)可讀程序指令的狀態(tài)信息來個性化定制電子電路,例如可編程邏輯電路、現(xiàn)場可編程門陣列(FPGA)或可編程邏輯陣列(PLA),該電子電路可以執(zhí)行計算機(jī)可讀程序指令,從而實現(xiàn)本發(fā)明的各個方面。
這里參照根據(jù)本發(fā)明實施例的方法、裝置(系統(tǒng))和計算機(jī)程序產(chǎn)品的流程圖和/或框圖描述了本發(fā)明的各個方面。應(yīng)當(dāng)理解,流程圖和/或框圖的每個方框以及流程圖和/或框圖中各方框的組合,都可以由計算機(jī)可讀程序指令實現(xiàn)。
這些計算機(jī)可讀程序指令可以提供給通用計算機(jī)、專用計算機(jī)或其它可編程數(shù)據(jù)處理裝置的處理器,從而生產(chǎn)出一種機(jī)器,使得這些指令在通過計算機(jī)或其它可編程數(shù)據(jù)處理裝置的處理器執(zhí)行時,產(chǎn)生了實現(xiàn)流程圖和/或框圖中的一個或多個方框中規(guī)定的功能/動作的裝置。也可以把這些計算機(jī)可讀程序指令存儲在計算機(jī)可讀存儲介質(zhì)中,這些指令使得計算機(jī)、可編程數(shù)據(jù)處理裝置和/或其他設(shè)備以特定方式工作,從而,存儲有指令的計算機(jī)可讀介質(zhì)則包括一個制造品,其包括實現(xiàn)流程圖和/或框圖中的一個或多個方框中規(guī)定的功能/動作的各個方面的指令。
也可以把計算機(jī)可讀程序指令加載到計算機(jī)、其它可編程數(shù)據(jù)處理裝置、或其它設(shè)備上,使得在計算機(jī)、其它可編程數(shù)據(jù)處理裝置或其它設(shè)備上執(zhí)行一系列操作步驟,以產(chǎn)生計算機(jī)實現(xiàn)的過程,從而使得在計算機(jī)、其它可編程數(shù)據(jù)處理裝置、或其它設(shè)備上執(zhí)行的指令實現(xiàn)流程圖和/或框圖中的一個或多個方框中規(guī)定的功能/動作。
附圖中的流程圖和框圖顯示了根據(jù)本發(fā)明的多個實施例的系統(tǒng)、方法和計算機(jī)程序產(chǎn)品的可能實現(xiàn)的體系架構(gòu)、功能和操作。在這點上,流程圖或框圖中的每個方框可以代表一個模塊、程序段或指令的一部分,所述模塊、程序段或指令的一部分包含一個或多個用于實現(xiàn)規(guī)定的邏輯功能的可執(zhí)行指令。在有些作為替換的實現(xiàn)中,方框中所標(biāo)注的功能也可以以不同于附圖中所標(biāo)注的順序發(fā)生。例如,兩個連續(xù)的方框?qū)嶋H上可以基本并行地執(zhí)行,它們有時也可以按相反的順序執(zhí)行,這依所涉及的功能而定。也要注意的是,框圖和/或流程圖中的每個方框、以及框圖和/或流程圖中的方框的組合,可以用執(zhí)行規(guī)定的功能或動作的專用的基于硬件的系統(tǒng)來實現(xiàn),或者可以用專用硬件與計算機(jī)指令的組合來實現(xiàn)。對于本領(lǐng)域技術(shù)人員來說公知的是,通過硬件方式實現(xiàn)、通過軟件方式實現(xiàn)以及通過軟件和硬件結(jié)合的方式實現(xiàn)都是等價的。
以上已經(jīng)描述了本發(fā)明的各實施例,上述說明是示例性的,并非窮盡性的,并且也不限于所披露的各實施例。在不偏離所說明的各實施例的范圍和精神的情況下,對于本技術(shù)領(lǐng)域的普通技術(shù)人員來說許多修改和變更都是顯而易見的。本文中所用術(shù)語的選擇,旨在最好地解釋各實施例的原理、實際應(yīng)用或?qū)κ袌鲋械募夹g(shù)改進(jìn),或者使本技術(shù)領(lǐng)域的其它普通技術(shù)人員能理解本文披露的各實施例。本發(fā)明的范圍由所附權(quán)利要求來限定。