應(yīng)用更新方法和裝置的制造方法
【專利摘要】本發(fā)明提供了一種應(yīng)用更新方法,包括:應(yīng)用啟動(dòng)時(shí)相應(yīng)的代碼執(zhí)行被觸發(fā),在進(jìn)行的所述代碼執(zhí)行中觸發(fā)執(zhí)行預(yù)埋代碼;在所述預(yù)埋代碼的執(zhí)行中動(dòng)態(tài)加載補(bǔ)丁文件,所述補(bǔ)丁文件攜帶有更新所述應(yīng)用的更新代碼;所述補(bǔ)丁文件被成功加載時(shí),執(zhí)行所述補(bǔ)丁文件中的更新代碼;按照指定輸出類型獲得所述更新代碼的執(zhí)行結(jié)果。此外,還提供了一種與該方法匹配的應(yīng)用更新裝置。上述應(yīng)用更新方法和裝置能夠簡(jiǎn)易的實(shí)現(xiàn)應(yīng)用更新,以為應(yīng)用修復(fù)問(wèn)題并解決運(yùn)營(yíng)需求。
【專利說(shuō)明】
應(yīng)用更新方法和裝置
技術(shù)領(lǐng)域
[0001]本發(fā)明涉及互聯(lián)網(wǎng)應(yīng)用技術(shù)領(lǐng)域,特別涉及一種應(yīng)用更新方法和裝置。
【背景技術(shù)】
[0002]隨著互聯(lián)網(wǎng)應(yīng)用的空前繁榮,人們?cè)絹?lái)越多的通過(guò)各種終端獲取資訊、進(jìn)行相互交流、學(xué)習(xí)和工作,這都是通過(guò)終端上的應(yīng)用完成的。由此將使得各種應(yīng)用被爭(zhēng)相發(fā)布,并通過(guò)不斷的發(fā)布新版本、新特性來(lái)不斷的滿足用戶提出的需求。
[0003]但是,隨著應(yīng)用的需求和功能的逐漸增多,應(yīng)用中的邏輯也越來(lái)越復(fù)雜,因此,出現(xiàn)BUG(應(yīng)用程序代碼中存在的邏輯缺陷)和運(yùn)營(yíng)需求的情況也越來(lái)越多。大部分的應(yīng)用在一個(gè)版本發(fā)布周期內(nèi)出現(xiàn)的BUG和運(yùn)營(yíng)需求只能通過(guò)進(jìn)行下下個(gè)版本的發(fā)布得到解決,由此將所帶來(lái)的成本非常高,如何在不發(fā)布新版本的情況下修復(fù)問(wèn)題和解決運(yùn)營(yíng)需求將成為當(dāng)前亟待解決的問(wèn)題。
[0004]然而,現(xiàn)有的解決這類問(wèn)題的技術(shù)較為復(fù)雜,無(wú)法為應(yīng)用修復(fù)問(wèn)題和解決運(yùn)營(yíng)需求。
【發(fā)明內(nèi)容】
[0005]基于此,有必要提供一種應(yīng)用更新方法,所述方法能夠簡(jiǎn)易的實(shí)現(xiàn)應(yīng)用更新,以為應(yīng)用修復(fù)問(wèn)題并解決運(yùn)營(yíng)需求。
[0006]此外,還有必要提供一種應(yīng)用更新裝置,所述裝置能夠簡(jiǎn)易的實(shí)現(xiàn)應(yīng)用更新,以為應(yīng)用修復(fù)問(wèn)題并解決運(yùn)營(yíng)需求。
[0007]—種應(yīng)用更新方法,包括如下步驟:
應(yīng)用啟動(dòng)時(shí)相應(yīng)的代碼執(zhí)行被觸發(fā),在進(jìn)行的所述代碼執(zhí)行中觸發(fā)執(zhí)行預(yù)埋代碼;
在所述預(yù)埋代碼的執(zhí)行中動(dòng)態(tài)加載補(bǔ)丁文件,所述補(bǔ)丁文件攜帶有更新所述應(yīng)用的更新代碼;
所述補(bǔ)丁文件被成功加載時(shí),執(zhí)行所述補(bǔ)丁文件中的更新代碼;
按照指定輸出類型獲得所述更新代碼的執(zhí)行結(jié)果。
[0008]—種應(yīng)用更新裝置,包括:
代碼執(zhí)行模塊,用于應(yīng)用啟動(dòng)時(shí)相應(yīng)的代碼執(zhí)行被觸發(fā),在進(jìn)行的代碼執(zhí)行中觸發(fā)執(zhí)行預(yù)埋代碼;
動(dòng)態(tài)加載模塊,用于在所述預(yù)埋代碼的執(zhí)行中動(dòng)態(tài)加載補(bǔ)丁文件,所述補(bǔ)丁文件攜帶有更新所述應(yīng)用的更新代碼;
更新代碼執(zhí)行模塊,用于所述補(bǔ)丁文件被成功加載時(shí),執(zhí)行所述補(bǔ)丁文件中的更新代碼;
結(jié)果輸出模塊,用于按照指定輸出類型獲得所述更新代碼的執(zhí)行結(jié)果。
[0009]為解決上述技術(shù)問(wèn)題,將采用如下技術(shù)方案:
在應(yīng)用啟動(dòng)時(shí)相應(yīng)代碼的執(zhí)行被觸發(fā),隨著代碼的執(zhí)行在執(zhí)行到預(yù)埋代碼時(shí),觸發(fā)執(zhí)行預(yù)埋代碼,以在預(yù)埋代碼的執(zhí)行中動(dòng)態(tài)加載補(bǔ)丁文件,補(bǔ)丁文件攜帶有更新應(yīng)用的更新代碼,因此在補(bǔ)丁文件被成功加載時(shí)執(zhí)行補(bǔ)丁文件中的更新代碼,按照指定輸出類型更新代碼的執(zhí)行結(jié)果,通過(guò)此過(guò)程中更新代碼的執(zhí)行實(shí)現(xiàn)應(yīng)用中問(wèn)題的修復(fù)和運(yùn)營(yíng)需求的解決,為應(yīng)用的更新提供了一種簡(jiǎn)易的實(shí)現(xiàn)方案,實(shí)現(xiàn)應(yīng)用中BUG的動(dòng)態(tài)修復(fù)和動(dòng)態(tài)運(yùn)營(yíng)。
【附圖說(shuō)明】
[0010]圖1是一個(gè)實(shí)施例中應(yīng)用更新方法的流程圖;
圖2是圖1中應(yīng)用啟動(dòng)時(shí)相應(yīng)代碼執(zhí)行被觸發(fā),在進(jìn)行的代碼執(zhí)行中觸發(fā)執(zhí)行預(yù)埋代碼的方法流程圖;
圖3是圖1中在預(yù)埋代碼的執(zhí)行中動(dòng)態(tài)加載補(bǔ)丁文件,補(bǔ)丁文件攜帶有更新應(yīng)用的更新代碼的方法流程圖;
圖4是一個(gè)實(shí)施例中應(yīng)用更新方法的應(yīng)用示意圖;
圖5是一個(gè)實(shí)施例中應(yīng)用更新裝置的結(jié)構(gòu)示意圖;
圖6是圖5中代碼執(zhí)行模塊的結(jié)構(gòu)示意圖;
圖7是圖5中動(dòng)態(tài)加載模塊的結(jié)構(gòu)示意圖;
圖8是本發(fā)明實(shí)施例提供的一種終端設(shè)備的結(jié)構(gòu)示意圖。
【具體實(shí)施方式】
[0011]體現(xiàn)本發(fā)明特征與優(yōu)點(diǎn)的典型實(shí)施方式將在以下的說(shuō)明中詳細(xì)敘述。應(yīng)理解的是本發(fā)明能夠在不同的實(shí)施方式上具有各種的變化,其皆不脫離本發(fā)明的范圍,且其中的說(shuō)明及圖示在本質(zhì)上是當(dāng)作說(shuō)明之用,而非用以限制本發(fā)明。
[0012]在一個(gè)實(shí)施例中,一種應(yīng)用更新方法如圖1所示,包括如下步驟:
步驟110,應(yīng)用啟動(dòng)時(shí)相應(yīng)代碼執(zhí)行被觸發(fā),在進(jìn)行的代碼執(zhí)行中觸發(fā)執(zhí)行預(yù)埋代碼。
[0013]應(yīng)用指的是終端中可供運(yùn)行的應(yīng)用程序。應(yīng)用啟動(dòng)時(shí)相應(yīng)代碼被觸發(fā)執(zhí)行,并通過(guò)代碼的執(zhí)行來(lái)實(shí)現(xiàn)應(yīng)用中的相應(yīng)功能。
[0014]應(yīng)用啟動(dòng)運(yùn)行中所執(zhí)行的代碼來(lái)自于應(yīng)用的代碼信息,而在應(yīng)用的代碼信息中包括了預(yù)埋代碼,該預(yù)埋代碼是與應(yīng)用的功能模塊或者方法對(duì)應(yīng)的。例如,如果預(yù)估到應(yīng)用中一定的功能模塊或者方法存在BUG或者運(yùn)營(yíng)需求的可能性較高,則在應(yīng)用的代碼信息中為此功能模塊或者方法設(shè)置預(yù)埋代碼。
[0015]由此在進(jìn)行的代碼執(zhí)行中,如果執(zhí)行到預(yù)埋代碼,則說(shuō)明相應(yīng)的功能模塊或者方法被觸發(fā)運(yùn)行,此時(shí),將執(zhí)行此預(yù)埋代碼。
[0016]步驟130,在預(yù)埋代碼的執(zhí)行中動(dòng)態(tài)加載補(bǔ)丁文件,補(bǔ)丁文件攜帶有更新應(yīng)用的更新代碼。
[0017]預(yù)埋代碼用于實(shí)現(xiàn)補(bǔ)丁文件的動(dòng)態(tài)加載。其中,補(bǔ)丁文件用于實(shí)現(xiàn)預(yù)埋代碼對(duì)應(yīng)的功能模塊或者方法的問(wèn)題修復(fù),也可用于實(shí)現(xiàn)對(duì)應(yīng)功能模塊或者方法中新的運(yùn)營(yíng)需求,具體可根據(jù)實(shí)際需要確定。
[0018]無(wú)論是進(jìn)行問(wèn)題修復(fù)還是實(shí)現(xiàn)新的運(yùn)營(yíng)需求,都只要在補(bǔ)丁文件中添加新邏輯和/或新需求即可,由此便獲得補(bǔ)丁文件中攜帶的更新代碼。
[0019]需要說(shuō)明的是,本發(fā)明所指的需要進(jìn)行修復(fù)的問(wèn)題是應(yīng)用程序代碼中存在的邏輯缺陷。
[0020]在預(yù)埋代碼的執(zhí)行中,通過(guò)進(jìn)行補(bǔ)丁文件的動(dòng)態(tài)加載方能夠加載和執(zhí)行除了應(yīng)用的執(zhí)行程序之外的其他代碼,如更新代碼。通過(guò)動(dòng)態(tài)加載的實(shí)現(xiàn)為應(yīng)用中問(wèn)題修復(fù)和新的運(yùn)營(yíng)需求的實(shí)現(xiàn)提供了可能。
[0021 ]具體的,在執(zhí)行到預(yù)埋代碼時(shí),判斷是否存在補(bǔ)丁文件,如果存在補(bǔ)丁文件,則進(jìn)行補(bǔ)丁文件的動(dòng)態(tài)加載,如果不存在補(bǔ)丁文件,則執(zhí)行本地邏輯。
[0022]步驟150,補(bǔ)丁文件被成功加載時(shí),執(zhí)行補(bǔ)丁文件中的更新代碼。
[0023]判斷補(bǔ)丁文件加載是否成功,如果補(bǔ)丁文件被成功加載,則能夠執(zhí)行添加于補(bǔ)丁文件中的更新代碼,即為修復(fù)問(wèn)題和/或新的運(yùn)營(yíng)需求的實(shí)現(xiàn)而添加的新邏輯和/或新需求,進(jìn)而得以實(shí)現(xiàn)應(yīng)用中相關(guān)功能模塊或者方法的修復(fù)或功能更新。
[0024]步驟170,按照指定輸出類型獲得更新代碼的執(zhí)行結(jié)果。
[0025]在動(dòng)態(tài)加載補(bǔ)丁文件所實(shí)現(xiàn)的更新代碼執(zhí)行中,按照指定輸出類型輸出更新代碼的執(zhí)行結(jié)果。其中,指定輸出類型用于約定執(zhí)行新邏輯和/或新的運(yùn)營(yíng)需求的實(shí)現(xiàn)中返回結(jié)果的類型,其是與本地邏輯的執(zhí)行中結(jié)果的輸出類型相一致的,由此方能夠適配于應(yīng)用的執(zhí)行程序,進(jìn)而使得更新后的應(yīng)用能夠順暢運(yùn)行。
[0026]通過(guò)如上所述的過(guò)程,使得應(yīng)用能夠自動(dòng)實(shí)現(xiàn)其問(wèn)題修復(fù)和/或新的需求的實(shí)現(xiàn),進(jìn)而使得應(yīng)用的更新是與應(yīng)用本身適配的,提高了應(yīng)用更新的可靠性和簡(jiǎn)易性。
[0027]如前所述的,對(duì)于如何在不發(fā)布新版本的情況下修復(fù)應(yīng)用中的問(wèn)題并解決新的運(yùn)營(yíng)需求這類問(wèn)題,目前所研究出解決這類問(wèn)題的技術(shù)包括基于Xposed框架的Dexposed和Andf ix,基于Cass loader的Nuwa、HotFix和DroidFix等,但都存在著技術(shù)復(fù)雜,無(wú)法為應(yīng)用修復(fù)問(wèn)題并解決運(yùn)營(yíng)需求。
[0028]—方面,基于Xposed框架的Dexposed和Andfix是通過(guò)改變一個(gè)方法對(duì)象方法在虛擬機(jī)中的定義來(lái)實(shí)現(xiàn)的。具體做法是將該方法的類型改變?yōu)閚ative,并且將這一方法的實(shí)現(xiàn)鏈接到一通用的Native Dispatch方法上,Native Dispatch方法通過(guò)回調(diào)到Java端的一個(gè)統(tǒng)一處理方法來(lái)實(shí)現(xiàn)A0P(A-Oriented Programming,面向方面編程)。
[0029]但是此做法與本發(fā)明所提供的方案相比較,本身存在著安全隱患,并且為了達(dá)到版本適配的目的,需要對(duì)現(xiàn)有的所有版本做適配,還需要增加額外的工具至應(yīng)用的安裝包中。
[°03°]另外,基于Xposed框架的Dexposed和Andfix對(duì)于使用者的技術(shù)門濫要求較高,需要使用者對(duì)Java的反射機(jī)制非常了解;此外,還只能對(duì)舊版本中的已有代碼進(jìn)行修復(fù),并無(wú)法添加新特性,進(jìn)而滿足在線添加運(yùn)營(yíng)特性的需求。
[0031 ]另一方面,基于Class loader的Nuwa、HtFix和DroidFix是通過(guò)修改Cassloader中findClass方法的查找順序,優(yōu)選從下發(fā)的補(bǔ)丁文件中查找被修復(fù)的類,加載并執(zhí)行被修復(fù)后的代碼來(lái)實(shí)現(xiàn)修復(fù)問(wèn)題的目的。
[0032]但是,由于系統(tǒng)對(duì)于DEX文件(應(yīng)用的執(zhí)行程序)中的類有一個(gè)校驗(yàn)機(jī)制,S卩,如果一個(gè)類A引用另外一個(gè)類B,六和8在同一個(gè)DEX文件中,則在對(duì)DEX文件優(yōu)化時(shí),會(huì)在優(yōu)化后的類A的字節(jié)碼中加入一個(gè)CLASS_ISPREVERIFIED標(biāo)志。
[0033]在此情況下,如果讓Cass loader中findClass方法強(qiáng)制到DEX文件中查找類B,則會(huì)發(fā)生無(wú)法通過(guò)驗(yàn)證的異常。
[0034]也就是說(shuō),如果一個(gè)類帶有CLASS_ISPREVERIFIED標(biāo)志,則無(wú)法對(duì)該類進(jìn)行修復(fù),所以只能將DEX文件中包含的所有類都制作成不帶CLASS_ISPREVERIFIED標(biāo)志的類,但將由此帶來(lái)比較大的運(yùn)行效率問(wèn)題,且為開(kāi)發(fā)造成困難。
[0035]而通過(guò)本發(fā)明所提供的應(yīng)用更新方法,能夠在原有應(yīng)用的DEX文件基礎(chǔ)上通過(guò)補(bǔ)丁文件的動(dòng)態(tài)加載實(shí)現(xiàn)問(wèn)題修復(fù)和運(yùn)營(yíng)需求更新,進(jìn)而不會(huì)對(duì)應(yīng)用的運(yùn)行效率造成任何影響,也不需要為此額外地制作DEX文件中包含的類,因此能夠保證較低成本。
[0036]另外,通過(guò)本發(fā)明所提供的應(yīng)用更新方法,對(duì)于使用者而言技術(shù)門檻較低,且能夠同時(shí)兼顧問(wèn)題的修復(fù)和運(yùn)營(yíng)需求的更新。
[0037]在一個(gè)實(shí)施例中,如上所述的方法還包括:
應(yīng)用被觸發(fā)進(jìn)行服務(wù)器中補(bǔ)丁文件的查詢,通過(guò)該查詢從服務(wù)器獲得補(bǔ)丁文件。
[0038]服務(wù)器是應(yīng)用所對(duì)應(yīng)服務(wù)器,補(bǔ)丁文件是通過(guò)服務(wù)器發(fā)布,以便于應(yīng)用獲得的。具體的,終端中應(yīng)用被觸發(fā)運(yùn)行之后,將進(jìn)行服務(wù)器中補(bǔ)丁文件的查詢,在服務(wù)器中查詢得到補(bǔ)丁文件之后,拉取查詢得到的補(bǔ)丁文件。
[0039]其中,應(yīng)用從服務(wù)器獲得補(bǔ)丁文件的過(guò)程即為插件下載過(guò)程,并且通過(guò)文件大小、文件信息摘要值來(lái)保證補(bǔ)丁文件下載的完整性。
[0040]也就是說(shuō),通過(guò)應(yīng)用與服務(wù)器之間的交互,使得運(yùn)行于終端中的應(yīng)用能夠隨時(shí)獲得是發(fā)布的補(bǔ)丁文件,進(jìn)而及時(shí)有效的實(shí)現(xiàn)自身問(wèn)題的修復(fù)和新的運(yùn)營(yíng)需求的實(shí)現(xiàn),極大地提高了時(shí)效性,并且對(duì)于問(wèn)題修復(fù)和運(yùn)營(yíng)需求的實(shí)現(xiàn)而言,所需要耗費(fèi)的成本最低。
[0041 ]在一個(gè)實(shí)施例中,步驟110如圖2所示,包括如下步驟:
步驟111,被觸發(fā)啟動(dòng)的應(yīng)用中功能模塊被觸發(fā),根據(jù)被觸發(fā)的功能模塊執(zhí)行相應(yīng)代碼。
[0042]終端中應(yīng)用被觸發(fā)啟動(dòng),以運(yùn)行于終端中。對(duì)于應(yīng)用而言,其包含了多個(gè)功能模塊,以用于實(shí)現(xiàn)應(yīng)用中的各種功能,對(duì)于每一功能模塊,其都有對(duì)應(yīng)的代碼信息,以通過(guò)對(duì)應(yīng)代碼信息中代碼的執(zhí)行來(lái)實(shí)現(xiàn)功能模塊的運(yùn)行。
[0043]在應(yīng)用運(yùn)行的過(guò)程中,將觸發(fā)各種功能模塊來(lái)實(shí)現(xiàn)應(yīng)用中所需要的功能,因此,被觸發(fā)的功能模塊將執(zhí)行其相應(yīng)代碼。
[0044]步驟113,隨著代碼的執(zhí)行,功能模塊的代碼信息中存在的預(yù)埋代碼被觸發(fā)執(zhí)行。
[0045]如前所述的,對(duì)于某些功能模塊,在其代碼信息包含了預(yù)埋代碼,這將意味著一旦功能模塊被觸發(fā),便能夠觸發(fā)執(zhí)行預(yù)埋代碼,進(jìn)而通過(guò)預(yù)埋代碼來(lái)實(shí)現(xiàn)補(bǔ)丁文件相關(guān)的處理過(guò)程,簡(jiǎn)易有效地實(shí)現(xiàn)應(yīng)用更新。
[0046]在一個(gè)實(shí)施例中,步驟130如圖3所示,包括如下步驟:
步驟131,在預(yù)埋代碼的執(zhí)行中構(gòu)造自定義的類加載器。
[0047]首先需要說(shuō)明的是,應(yīng)用啟動(dòng)后執(zhí)行的代碼,都是通過(guò)操作系統(tǒng)中的類加載器,例如,Classloader,進(jìn)行加載執(zhí)行的。但是,操作系統(tǒng)自身的類加載器只能夠加載應(yīng)用的執(zhí)行程序(比如,DEX文件)中存在的代碼,而執(zhí)行程序之外的代碼并無(wú)法加載。
[0048]因此,在預(yù)埋代碼的執(zhí)行中,通過(guò)邏輯控制創(chuàng)建自定義的類加載器,例如,一個(gè)新的Classloader。自定義的類加載器用過(guò)讀取和加載補(bǔ)丁文件中存在的代碼,進(jìn)而方能夠?qū)崿F(xiàn)動(dòng)態(tài)加載,即不受操作系統(tǒng)的限制。
[0049]步驟133,通過(guò)自定義的類加載器動(dòng)態(tài)加載補(bǔ)丁文件,在加載的補(bǔ)丁文件中觸發(fā)執(zhí)行補(bǔ)丁文件的代碼。
[0050]如前所述的,補(bǔ)丁文件的代碼包括了用以實(shí)現(xiàn)問(wèn)題修復(fù)和/或新需求的更新代碼。換而言之,對(duì)于服務(wù)器所進(jìn)行的補(bǔ)丁文件發(fā)布而言,其是通過(guò)在添加新邏輯、新需求來(lái)得獲得向應(yīng)用發(fā)布的補(bǔ)丁文件的。
[0051]由此便能夠在應(yīng)用中通過(guò)預(yù)埋代碼實(shí)現(xiàn)為所進(jìn)行的更新,進(jìn)而不斷修復(fù)運(yùn)行中的問(wèn)題或者實(shí)現(xiàn)動(dòng)態(tài)運(yùn)營(yíng),而并不需要依賴于版本的迭代更新。
[0052]例如,已發(fā)布的終端應(yīng)用如果出現(xiàn)BUG或者有運(yùn)營(yíng)需求時(shí),不再需要通過(guò)更新應(yīng)用版本才能修復(fù)問(wèn)題、更新產(chǎn)品特性,明顯降低應(yīng)用的版本發(fā)布頻率,能夠快速、方便、靈活的更新產(chǎn)品特性,降低運(yùn)營(yíng)成本。
[0053]在一個(gè)實(shí)施例中,步驟150包括:
在補(bǔ)丁文件被成功加載時(shí),預(yù)埋代碼被觸發(fā)從補(bǔ)丁文件調(diào)用指定接口執(zhí)行更新代碼。
[0054]如前所述的,補(bǔ)丁文件中攜帶了預(yù)埋代碼,除此之外,還在補(bǔ)丁文件中約定了用以執(zhí)行更新代碼的接口,進(jìn)而能夠從補(bǔ)丁文件中調(diào)整指定接口來(lái)執(zhí)行更新代碼,以實(shí)現(xiàn)問(wèn)題修復(fù)和動(dòng)態(tài)運(yùn)營(yíng)。
[0055]其中,預(yù)埋代碼從補(bǔ)丁文件所調(diào)用的指定接口作為擴(kuò)展接口,有對(duì)應(yīng)的調(diào)用方法,因此,在調(diào)用指定接口執(zhí)行更新代碼的過(guò)程即為調(diào)用接口來(lái)通過(guò)對(duì)應(yīng)的調(diào)用方法執(zhí)行更新代碼的過(guò)程,
在另一個(gè)實(shí)施例中,如上所述的方法還包括:
在補(bǔ)丁文件未被成功加載時(shí),通過(guò)代碼的執(zhí)行進(jìn)行應(yīng)用的本地邏輯執(zhí)行。
[0056]—方面,在不存在補(bǔ)丁文件時(shí),即服務(wù)器并未發(fā)布補(bǔ)丁文件,則創(chuàng)建本地邏輯,通過(guò)本地邏輯的執(zhí)行來(lái)使得應(yīng)用得以順暢運(yùn)行。
[0057]另一方面,在未成功加載補(bǔ)丁文件時(shí),也將調(diào)用本地邏輯中的方法來(lái)實(shí)現(xiàn)應(yīng)用的順暢運(yùn)行。
[0058]通過(guò)如上的過(guò)程,提供了一種輕量的、穩(wěn)定的、平臺(tái)兼容性強(qiáng)的應(yīng)用更新過(guò)程,通過(guò)預(yù)埋代碼,在調(diào)用者和內(nèi)容提供者之間約定調(diào)用接口和結(jié)果的輸出類型,進(jìn)而在代碼編寫(xiě)難易度方面也有更優(yōu)表現(xiàn)。
[0059]下面結(jié)合一個(gè)具體的實(shí)施例來(lái)詳細(xì)闡述如上所述的過(guò)程。該實(shí)施例中,如圖4所示的,應(yīng)用的一功能模塊中,Invoker類需要得到輸出類型為Class A的執(zhí)行結(jié)果,其作為有大量運(yùn)營(yíng)需求或者新開(kāi)發(fā)、有較高風(fēng)險(xiǎn)的功能模塊,將在應(yīng)用的版本發(fā)布之前,為此功能模塊設(shè)置預(yù)埋代碼。
[0060]另一方面的,如圖4所標(biāo)示的,還將定義約定的指定接口,即輸出結(jié)果提供者接口IContentPrider及其調(diào)用方法getClassResult.,即執(zhí)行步驟210。
[0061 ] 創(chuàng)建一個(gè)補(bǔ)丁內(nèi)容提供者PatchContentPrider來(lái)實(shí)現(xiàn)指定接口和調(diào)用方法,即執(zhí)行步驟220,并編譯后封裝到patch.dex文件,即補(bǔ)丁文件中,下發(fā)到應(yīng)用,S卩執(zhí)行步驟230。
[0062]此時(shí),運(yùn)行于終端中的應(yīng)用而言,如步驟240至步驟290,其將在判斷到補(bǔ)丁文件存在的前提條件下,通過(guò)Classsloader動(dòng)態(tài)加載補(bǔ)丁文件,并在加載成功之后,通過(guò)Class loader從補(bǔ)丁文件中動(dòng)態(tài)加載約定的補(bǔ)丁內(nèi)容提供者PatchContentPr ider,在加載成功時(shí)方可調(diào)用其封裝的方法getClassAResult返回約定輸出類型的執(zhí)行結(jié)果,由此便實(shí)現(xiàn)了應(yīng)用中問(wèn)題的修復(fù)和動(dòng)態(tài)運(yùn)營(yíng)。
[0063]另外,需要補(bǔ)充的是,如圖4中步驟310和步驟330所標(biāo)示的,在不存在補(bǔ)丁文件或者補(bǔ)丁文件未被成功加載時(shí),將通過(guò)本地邏輯來(lái)實(shí)現(xiàn)應(yīng)用的順暢運(yùn)行。
[0064]具體的,在不存在補(bǔ)丁文件時(shí),創(chuàng)建一個(gè)默認(rèn)內(nèi)容提供者接口,即LocalContentPrider,來(lái)實(shí)現(xiàn)指定接口 IContentPrider和調(diào)用方法getClassAResult。
[0065]通過(guò)如上所述的過(guò)程便能夠方便快捷的對(duì)用戶提出的問(wèn)題、新的運(yùn)營(yíng)需求進(jìn)行響應(yīng)和滿足。
[0066]此外,還相應(yīng)地提供了一種應(yīng)用更新裝置,所述裝置如圖5所示,包括代碼執(zhí)行模塊410、動(dòng)態(tài)加載模塊430、更新代碼執(zhí)行模塊450和結(jié)果輸出模塊470,其中:
代碼執(zhí)行模塊410,用于應(yīng)用啟動(dòng)時(shí)相應(yīng)的代碼執(zhí)行被觸發(fā),在進(jìn)行的代碼執(zhí)行中觸發(fā)執(zhí)行預(yù)埋代碼。
[0067]動(dòng)態(tài)加載模塊430,用于在預(yù)埋代碼的執(zhí)行中動(dòng)態(tài)加載補(bǔ)丁文件,補(bǔ)丁文件攜帶有更新應(yīng)用的更新代碼。
[0068]更新代碼執(zhí)行模塊450,用于補(bǔ)丁文件被成功加載時(shí),執(zhí)行補(bǔ)丁文件中的更新代碼。
[0069]結(jié)果輸出模塊470,用于按照指定輸出類型獲得更新代碼的執(zhí)行結(jié)果。
[0070]在一個(gè)實(shí)施例中,如上所述的裝置還包括查詢模塊,該查詢模塊用于應(yīng)用被觸發(fā)進(jìn)行服務(wù)器中補(bǔ)丁文件的查詢,通過(guò)查詢從服務(wù)器獲得補(bǔ)丁文件。
[0071]在一個(gè)實(shí)施例中,代碼執(zhí)行模塊410如圖6所示,包括功能模塊執(zhí)行單元411和預(yù)埋代碼執(zhí)行單元413,其中:
功能模塊執(zhí)行單元411,用于被觸發(fā)啟動(dòng)的應(yīng)用中功能模塊被觸發(fā),根據(jù)被觸發(fā)的功能模塊執(zhí)行相應(yīng)代碼。
[0072]預(yù)埋代碼執(zhí)行單元413,用于隨著代碼的執(zhí)行,功能模塊的代碼信息中存在的預(yù)埋代碼被觸發(fā)執(zhí)行。
[0073]在一個(gè)實(shí)施例中,動(dòng)態(tài)加載模塊430如圖7所示,包括構(gòu)造單元431和動(dòng)態(tài)加載執(zhí)行單元433,其中:
構(gòu)造單元431,用于在預(yù)埋代碼的執(zhí)行中構(gòu)造自定義的類加載器。
[0074]動(dòng)態(tài)加載執(zhí)行單元433,用于通過(guò)自定義的類加載器動(dòng)態(tài)加載補(bǔ)丁文件,在加載的補(bǔ)丁文件中觸發(fā)執(zhí)行補(bǔ)丁文件的代碼。
[0075]在一個(gè)實(shí)施例中,更新代碼執(zhí)行模塊450進(jìn)一步用于在補(bǔ)丁文件被成功加載時(shí),預(yù)埋代碼被觸發(fā)從補(bǔ)丁文件調(diào)用指定接口執(zhí)行更新代碼。
[0076]在另一個(gè)實(shí)施例中,如上所述的裝置還包括本地執(zhí)行模塊,該本地執(zhí)行模塊用于在補(bǔ)丁文件被成功加載時(shí),通過(guò)代碼的執(zhí)行進(jìn)行應(yīng)用的本地邏輯的的執(zhí)行。
[0077]圖8示出了本發(fā)明實(shí)施例提供的一種終端設(shè)備的結(jié)構(gòu)。該終端設(shè)備500只是一個(gè)適用本發(fā)明的示例,并不能認(rèn)為是提供了對(duì)本發(fā)明的使用范圍的任何限制。該終端設(shè)備500也不能解釋為需要依賴于或具有圖示的示例性的終端設(shè)備500中的一個(gè)或者多個(gè)部件的組入口 ο
[0078]如圖8所示,終端設(shè)備500包括處理器510、存儲(chǔ)器520和系統(tǒng)總線530。包括存儲(chǔ)器520和處理器510在內(nèi)的各種組件將連接到系統(tǒng)總線530上。處理器510是一個(gè)用于通過(guò)計(jì)算機(jī)系統(tǒng)中基本的算術(shù)和邏輯運(yùn)算來(lái)執(zhí)行計(jì)算機(jī)程序指令的硬件。存儲(chǔ)器520是一個(gè)用于臨時(shí)或永久性存儲(chǔ)計(jì)算機(jī)程序或數(shù)據(jù)的物理設(shè)備。
[0079]其中,存儲(chǔ)器520中存儲(chǔ)了相應(yīng)的程序指令和當(dāng)前顯示的內(nèi)容;處理器510將執(zhí)行存儲(chǔ)器520中的程序指令,偵聽(tīng)輸入的各種指令,并對(duì)偵聽(tīng)得到的指令進(jìn)行響應(yīng)。
[0080]終端設(shè)備500還包括各種輸入接口 570、輸入裝置540,以實(shí)現(xiàn)各種操作的輸入。其中,該輸入裝置540可以是觸摸屏幕、按鍵、鍵盤(pán)和鼠標(biāo)等至少一種。
[0081 ] 終端設(shè)備500還包括存儲(chǔ)設(shè)備580,存儲(chǔ)設(shè)備580可以從多種計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)中選擇,計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)是指可以進(jìn)行訪問(wèn)的任何可利用的介質(zhì),包括移動(dòng)的和固定的兩種存儲(chǔ)介質(zhì)。例如,計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),包括但不限于閃速存儲(chǔ)器(微型SD卡)、CD-R0M、數(shù)字通用光盤(pán)(DVD)或其它光盤(pán)、磁帶盒、磁帶存儲(chǔ)或其它存儲(chǔ)設(shè)備、或者可用于存儲(chǔ)所需要信息并可訪問(wèn)的任何其它存儲(chǔ)介質(zhì)。
[0082]如上面所詳細(xì)描述的,適配于本發(fā)明的終端設(shè)備500將執(zhí)行分享移動(dòng)終端內(nèi)容的指定操作,即通過(guò)處理器510運(yùn)行存儲(chǔ)器520中的程序指令的形式執(zhí)行該指定操作,以實(shí)現(xiàn)移動(dòng)終端設(shè)備500中內(nèi)容的分享。
[0083]此外,通過(guò)硬件電路或者硬件電路結(jié)合軟件指令也能同樣實(shí)現(xiàn)本發(fā)明,因此,實(shí)現(xiàn)本發(fā)明并不限于任何特定硬件電路、軟件以及兩者的結(jié)合。
[0084]本領(lǐng)域普通技術(shù)人員可以理解實(shí)現(xiàn)上述實(shí)施例的全部或部分步驟可以通過(guò)硬件來(lái)完成,也可以通過(guò)程序來(lái)指令相關(guān)的硬件完成,所述的程序可以存儲(chǔ)于一種計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)中,上述提到的存儲(chǔ)介質(zhì)可以是只讀存儲(chǔ)器,磁盤(pán)或光盤(pán)等。
[0085]雖然已參照幾個(gè)典型實(shí)施方式描述了本發(fā)明,但應(yīng)當(dāng)理解,所用的術(shù)語(yǔ)是說(shuō)明和示例性、而非限制性的術(shù)語(yǔ)。由于本發(fā)明能夠以多種形式具體實(shí)施而不脫離發(fā)明的精神或?qū)嵸|(zhì),所以應(yīng)當(dāng)理解,上述實(shí)施方式不限于任何前述的細(xì)節(jié),而應(yīng)在隨附權(quán)利要求所限定的精神和范圍內(nèi)廣泛地解釋,因此落入權(quán)利要求或其等效范圍內(nèi)的全部變化和改型都應(yīng)為隨附權(quán)利要求所涵蓋。
【主權(quán)項(xiàng)】
1.一種應(yīng)用更新方法,其特征在于,包括如下步驟: 應(yīng)用啟動(dòng)時(shí)相應(yīng)的代碼執(zhí)行被觸發(fā),在進(jìn)行的所述代碼執(zhí)行中觸發(fā)執(zhí)行預(yù)埋代碼; 在所述預(yù)埋代碼的執(zhí)行中動(dòng)態(tài)加載補(bǔ)丁文件,所述補(bǔ)丁文件攜帶有更新所述應(yīng)用的更新代碼; 所述補(bǔ)丁文件被成功加載時(shí),執(zhí)行所述補(bǔ)丁文件中的更新代碼; 按照指定輸出類型獲得所述更新代碼的執(zhí)行結(jié)果。2.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述方法還包括: 所述應(yīng)用被觸發(fā)進(jìn)行服務(wù)器中補(bǔ)丁文件的查詢,通過(guò)所述查詢從所述服務(wù)器獲得補(bǔ)丁文件。3.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述應(yīng)用啟動(dòng)時(shí)相應(yīng)的代碼執(zhí)行被觸發(fā),在進(jìn)行的所述代碼執(zhí)行中觸發(fā)執(zhí)行預(yù)埋代碼的步驟包括: 被觸發(fā)啟動(dòng)的所述應(yīng)用中功能模塊被觸發(fā),根據(jù)被觸發(fā)的所述功能模塊執(zhí)行相應(yīng)代碼; 隨著所述代碼的執(zhí)行,所述功能模塊的代碼信息中存在的預(yù)埋代碼被觸發(fā)執(zhí)行。4.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述在所述預(yù)埋代碼的執(zhí)行中動(dòng)態(tài)加載補(bǔ)丁文件的步驟包括: 在所述預(yù)埋代碼的執(zhí)行中構(gòu)造自定義的類加載器; 通過(guò)所述自定義的類加載器動(dòng)態(tài)加載補(bǔ)丁文件,在加載的所述補(bǔ)丁文件中觸發(fā)執(zhí)行所述補(bǔ)丁文件的代碼。5.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述補(bǔ)丁文件被成功加載時(shí),執(zhí)行所述補(bǔ)丁文件中的更新代碼的步驟包括: 在所述補(bǔ)丁文件被成功加載時(shí),所述預(yù)埋代碼被觸發(fā)從所述補(bǔ)丁文件調(diào)用指定接口執(zhí)行更新代碼。6.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述方法還包括: 在所述補(bǔ)丁文件未被成功加載時(shí),通過(guò)所述代碼的執(zhí)行進(jìn)行所述應(yīng)用的本地邏輯的執(zhí)行。7.一種應(yīng)用更新裝置,其特征在于,包括: 代碼執(zhí)行模塊,用于應(yīng)用啟動(dòng)時(shí)相應(yīng)的代碼執(zhí)行被觸發(fā),在進(jìn)行的代碼執(zhí)行中觸發(fā)執(zhí)行預(yù)埋代碼; 動(dòng)態(tài)加載模塊,用于在所述預(yù)埋代碼的執(zhí)行中動(dòng)態(tài)加載補(bǔ)丁文件,所述補(bǔ)丁文件攜帶有更新所述應(yīng)用的更新代碼; 更新代碼執(zhí)行模塊,用于所述補(bǔ)丁文件被成功加載時(shí),執(zhí)行所述補(bǔ)丁文件中的更新代碼; 結(jié)果輸出模塊,用于按照指定輸出類型獲得所述更新代碼的執(zhí)行結(jié)果。8.根據(jù)權(quán)利要求7所述的裝置,其特征在于,所述裝置還包括: 查詢模塊,用于所述應(yīng)用被觸發(fā)進(jìn)行服務(wù)器中補(bǔ)丁文件的查詢,通過(guò)所述查詢從所述服務(wù)器獲得補(bǔ)丁文件。9.根據(jù)權(quán)利要求7所述的裝置,其特征在于,所述代碼執(zhí)行模塊包括: 功能模塊執(zhí)行單元,用于被觸發(fā)啟動(dòng)的所述應(yīng)用中功能模塊被觸發(fā),根據(jù)被觸發(fā)的所述功能模塊執(zhí)行相應(yīng)代碼; 預(yù)埋代碼執(zhí)行單元,用于隨著所述代碼的執(zhí)行,所述功能模塊的代碼信息中存在的預(yù)埋代碼被觸發(fā)執(zhí)行。10.根據(jù)權(quán)利要求7所述的裝置,其特征在于,所述動(dòng)態(tài)加載模塊包括: 構(gòu)造單元,用于在所述預(yù)埋代碼的執(zhí)行中構(gòu)造自定義的類加載器; 動(dòng)態(tài)加載執(zhí)行單元,用于通過(guò)所述自定義的類加載器動(dòng)態(tài)加載補(bǔ)下文件,在加載的所述補(bǔ)丁文件中觸發(fā)執(zhí)行補(bǔ)丁文件的代碼。11.根據(jù)權(quán)利要求7所述的裝置,其特征在于,所述更新代碼執(zhí)行模塊進(jìn)一步用于在所述補(bǔ)丁文件被成功加載時(shí),所述預(yù)埋代碼被觸發(fā)從所述補(bǔ)丁文件調(diào)用指定接口執(zhí)行更新代碼。12.根據(jù)權(quán)利要求7所述的裝置,其特征在于,所述方法還包括: 本地執(zhí)行模塊,用于在所述補(bǔ)丁文件被成功加載時(shí),通過(guò)所述代碼的執(zhí)行進(jìn)行所述應(yīng)用的本地邏輯的執(zhí)行。
【文檔編號(hào)】G06F9/445GK106055368SQ201610388562
【公開(kāi)日】2016年10月26日
【申請(qǐng)日】2016年6月2日
【發(fā)明人】楊小龍
【申請(qǐng)人】騰訊科技(深圳)有限公司