本發(fā)明屬于計算機技術(shù)領(lǐng)域,尤其涉及一種應(yīng)用程序的插入補丁方法及裝置。
背景技術(shù):
隨著計算機技術(shù)的普及,計算機中的應(yīng)用程序越來越多。在實際使用過程中,應(yīng)用程序的各種功能通過更新可以不斷的得以完善。然而,在現(xiàn)有技術(shù)中,應(yīng)用程序不管是更新多少內(nèi)容,都需要重新打包、測試、在對應(yīng)的渠道換安裝包、提示用戶升級、用戶升級后進行覆蓋安裝等步驟。因此,更新過程比較復(fù)雜,需要耗費過多的人力以及成本。因此,根據(jù)應(yīng)用程序所要更新的內(nèi)容,提供一種快速插入所述應(yīng)用程序的補丁成為亟待解決的問題。
技術(shù)實現(xiàn)要素:
本發(fā)明提供了一種應(yīng)用程序的插入補丁方法及裝置,可以在不全部重新編譯所述應(yīng)用程序的源代碼的情況下,有效進行更新所述應(yīng)用程序的問題程序或者需要進行更新的程序。
具體地,本發(fā)明實施例提供一種應(yīng)用程序的插入補丁方法,所述方法包括:
從服務(wù)器中下載應(yīng)用程序的待更新部分的補??;
將所述補丁插入類加載器中所述應(yīng)用程序的安裝包形成的元素組的最前面;以及
運行所述應(yīng)用程序時,所述類加載器加載所述應(yīng)用程序插入所述補丁 之后的元素組,其中,若所述插入所述補丁之后的元素組中包括不止一個同名類時,所述類加載器加載所述同名類所在元素組排在最前面的元素中的同名類。
本發(fā)明實施例還提供一種應(yīng)用程序的插入補丁裝置,所述裝置包括:
下載模塊,用于從服務(wù)器中下載應(yīng)用程序的待更新部分的補??;
補丁插入模塊,用于將所述補丁插入類加載器中所述應(yīng)用程序的安裝包形成的元素組的最前面;以及
類加載模塊,用于所述類加載器加載所述應(yīng)用程序插入所述補丁之后的元素組,其中,若所述插入所述補丁之后的元素組中包括不止一個同名類時,所述類加載器加載所述同名類所在元素組中排在最前面的元素中的同名類。
本發(fā)明實施例所提供的應(yīng)用程序的插入補丁方法及裝置,通過直接在應(yīng)用程序中插入補丁,在應(yīng)用程序運行過程中,若出現(xiàn)重名類時先加載所述補丁中的類,從而實現(xiàn)覆蓋所述應(yīng)用程序中的出現(xiàn)問題的類。因此,可實現(xiàn)快速更新應(yīng)用程序,節(jié)省人力資源以及更新成本。
為讓本發(fā)明的上述和其他目的、特征和優(yōu)點能更明顯易懂,下文特舉較佳實施例,并配合所附圖式,作詳細說明如下。
附圖說明
圖1示出了一種電子終端的結(jié)構(gòu)框圖。
圖2為第一實施例提供的應(yīng)用程序的插入補丁方法流程圖。
圖3為第二實施例提供的應(yīng)用程序的插入補丁方法流程圖。
圖4為第三實施例提供的應(yīng)用程序的插入補丁方法流程圖。
圖5為第四實施例提供的應(yīng)用程序的插入補丁方法流程圖。
圖6為第四實施例提供的應(yīng)用程序的插入補丁裝置結(jié)構(gòu)框圖。
圖7為第五實施例提供的應(yīng)用程序的插入補丁裝置結(jié)構(gòu)框圖。
圖8為第六實施例提供的應(yīng)用程序的插入補丁裝置結(jié)構(gòu)框圖。
圖9為第七實施例提供的應(yīng)用程序的插入補丁裝置結(jié)構(gòu)框圖。
具體實施方式
為更進一步闡述本發(fā)明為實現(xiàn)預(yù)定發(fā)明目的所采取的技術(shù)手段及功效,以下結(jié)合附圖及較佳實施例,對依據(jù)本發(fā)明的具體實施方式、結(jié)構(gòu)、特征及其功效,詳細說明如后。
本發(fā)明實施例所提供的應(yīng)用程序的插入補丁方法及裝置可用于電子終端。
圖1示出了一種電子終端的結(jié)構(gòu)框圖。如圖1所示,電子終端100包括一個或多個(圖中僅示出一個)處理器102、存儲器104、存儲控制器106,外設(shè)接口108、RF(Radio Frequency,射頻)模塊110、網(wǎng)絡(luò)模塊112、音頻電路114、傳感器116、輸入模塊118、及顯示模塊120。本領(lǐng)域普通技術(shù)人員可以理解,圖1所示的結(jié)構(gòu)僅為示意,其并不對電子終端100的結(jié)構(gòu)造成限定。例如,電子終端100還可包括比圖1中所示更多或者更少的組件,或者具有與圖1所示不同的配置。上述的電子終端100的具體實例包括但并不限于手持式計算機、移動電話、媒體播放器、車載設(shè)備、個人數(shù)字助理及前述裝置的各種組合。
本領(lǐng)域普通技術(shù)人員可以理解,相對于處理器102來說,所有其他的組件均屬于外設(shè),處理器102與這些外設(shè)之間通過多個外設(shè)接口108相耦合。外設(shè)接口108可基于以下標準實現(xiàn):通用異步接收/發(fā)送裝置(Universal Asynchronous Receiver/Transmitter,UART)、通用輸入/輸出(General Purpose Input Output,GPIO)、串行外設(shè)接口(Serial Peripheral Interface,SPI)、內(nèi)部集成電路(Inter-Integrated Circuit,I2C),但不并限于上述標準。在一些實例中,外設(shè)接口108可僅包括總線;在另一些實例中,外設(shè)接口108還可包括其他元件,如一個 或者多個控制器,例如用于連接液晶顯示面板的顯示控制器或者用于連接存儲器的存儲控制器106。此外,這些控制器還可以從外設(shè)接口108中脫離出來,而集成于處理器102內(nèi)或者相應(yīng)的外設(shè)內(nèi)。
存儲器104可用于存儲軟件程序以及模塊,如本發(fā)明實施例中的應(yīng)用程序的插入補丁方法/裝置對應(yīng)的程序指令/模塊,處理器102通過運行存儲在存儲器104內(nèi)的軟件程序以及模塊,從而執(zhí)行各種功能應(yīng)用以及數(shù)據(jù)處理,即實現(xiàn)上述的應(yīng)用程序的插入補丁方法。存儲器104可包括高速隨機存儲器,還可包括非易失性存儲器,如一個或者多個磁性存儲裝置、閃存、或者其他非易失性固態(tài)存儲器。在一些實例中,存儲器104可進一步包括相對于處理器102遠程設(shè)置的存儲器,這些遠程存儲器可以通過網(wǎng)絡(luò)連接至電子終端100。上述網(wǎng)絡(luò)的實例包括但不限于互聯(lián)網(wǎng)、企業(yè)內(nèi)部網(wǎng)、局域網(wǎng)、移動通信網(wǎng)及其組合。
射頻模塊110用于接收以及發(fā)送電磁波,實現(xiàn)電磁波與電信號的相互轉(zhuǎn)換,從而與通訊網(wǎng)絡(luò)或者其他設(shè)備進行通訊。射頻模塊110可包括各種現(xiàn)有的用于執(zhí)行這些功能的電路元件,例如,天線、射頻收發(fā)器、數(shù)字信號處理器、加密/解密芯片、用戶身份模塊(SIM)卡、存儲器等等。RF模塊110可與各種網(wǎng)絡(luò)如互聯(lián)網(wǎng)、企業(yè)內(nèi)部網(wǎng)、無線網(wǎng)絡(luò)進行通訊或者通過無線網(wǎng)絡(luò)與其他設(shè)備進行通訊。上述的無線網(wǎng)絡(luò)可包括蜂窩式電話網(wǎng)、無線局域網(wǎng)或者城域網(wǎng)。上述的無線網(wǎng)絡(luò)可以使用各種通信標準、協(xié)議及技術(shù),包括但并不限于全球移動通信系統(tǒng)(Global System for Mobile Communication,GSM)、增強型移動通信技術(shù)(Enhanced Data GSM Environment,EDGE),寬帶碼分多址技術(shù)(wideband code division multiple access,W-CDMA),碼分多址技術(shù)(Code division access,CDMA)、時分多址技術(shù)(time division multiple access,TDMA),無線保真技術(shù)(Wireless,Fidelity,WiFi)(如美國電氣和電子工程師協(xié)會標準IEEE 802.11a,IEEE 802.11b,IEEE802.11g和/或IEEE 802.11n)、網(wǎng)絡(luò)電話(Voice over internet protocal,VoIP)、全球微波互聯(lián)接入(Worldwide Interoperabil ity for Microwave Access,Wi-Max)、其他用于郵件、即時通訊及短消息的協(xié)議,以及任何其他合適的通訊協(xié)議,甚至可包括那些當(dāng)前仍未被開發(fā)出來的協(xié)議。
網(wǎng)絡(luò)模塊112用于接收以及發(fā)送網(wǎng)絡(luò)信號。上述網(wǎng)絡(luò)信號可包括無線信號或者有線信號。在一個實例中,上述網(wǎng)絡(luò)信號為WiFi信號,由于WiFi的工作頻率也處于射頻的頻段內(nèi),此時網(wǎng)絡(luò)模塊可具有與RF模塊110類似的硬件結(jié)構(gòu),即可包括天線、射頻收發(fā)器、數(shù)字信號處理器、加密/解密芯片等元件。在一個實例中,上述網(wǎng)絡(luò)信號為有線網(wǎng)絡(luò)信號。此時,網(wǎng)絡(luò)模塊112可包括處理器、隨機存儲器、轉(zhuǎn)換器、晶體振蕩器等元件。
音頻電路114、揚聲器、聲音插孔、麥克風(fēng)共同提供用戶與電子終端100之間的音頻接口。具體地,音頻電路114從處理器102處接收聲音數(shù)據(jù),將聲音數(shù)據(jù)轉(zhuǎn)換為電信號,將電信號傳輸至揚聲器。揚聲器將電信號轉(zhuǎn)換為人耳能聽到的聲波。音頻電路114還從麥克風(fēng)處接收電信號,將電信號轉(zhuǎn)換為聲音數(shù)據(jù),并將聲音數(shù)據(jù)傳輸給處理器102以進行進一步的處理。音頻數(shù)據(jù)可以從存儲器104處或者通過RF模塊110、網(wǎng)絡(luò)模塊112獲取。此外,音頻數(shù)據(jù)也可以存儲至存儲器104中或者通過RF模塊110及網(wǎng)絡(luò)模塊112進行發(fā)送。
傳感器116的實例包括但并不限于:光傳感器、運行傳感器、及其他傳感器。具體地,光傳感器可包括環(huán)境光傳感器及接近傳感器,其中,環(huán)境光傳感器可以感測環(huán)境光的明暗,進而處理器102執(zhí)行的一些模塊可利用環(huán)境光傳感器的輸出來自動調(diào)節(jié)顯示的輸出。接近傳感器可在電子終端100移動到耳邊時,關(guān)閉顯示輸出。作為運動傳感器的一種,重力加速度傳感器可檢測各個方向上(一般為三軸)加速度的大小,靜止時可檢測出重力的大小及方向,可用于識別手機姿態(tài)的應(yīng)用(比如橫豎屏切換、相關(guān)游戲、磁力計姿態(tài)校準)、振動識別相關(guān)功能(比如計步器、敲擊)等; 至于電子終端100還可配置的陀螺儀、氣壓計、濕度計、溫度計等其他傳感器,在此不再贅述。
輸入模塊118可用于接收輸入的字符信息,以及產(chǎn)生與用戶設(shè)置以及功能控制有關(guān)的鍵盤、鼠標、操作桿、光學(xué)或者軌跡球信號輸入。具體地,輸入模塊118可包括按鍵以及觸控表面。按鍵例如可包括用于輸入字符的字符按鍵,以及用于觸發(fā)控制功能的控制按鍵??刂瓢存I的實例包括“返回主屏”按鍵、開機/關(guān)機按鍵、拍照鍵等等。觸控表面可收集用戶在其上或附近的觸摸操作(比如用戶使用手指、觸筆等任何適合的物體或附件在觸控表面上或在觸控表面附近的操作),并根據(jù)預(yù)先設(shè)定的程序驅(qū)動相應(yīng)的連接裝置??蛇x的,觸控表面可包括觸摸檢測裝置和觸摸控制器兩個部分。其中,觸摸檢測裝置檢測用戶的觸摸方位,并檢測觸摸操作帶來的信號,將信號傳送給觸摸控制器;觸摸控制器從觸摸檢測裝置上接收觸摸信息,并將它轉(zhuǎn)換成觸點坐標,再送給處理器102,并能接收處理器102發(fā)來的命令并加以執(zhí)行。此外,可以采用電阻式、電容式、紅外線以及表面聲波等多種類型實現(xiàn)觸控表面。除了觸控表面,輸入模塊118還可以包括其他輸入設(shè)備。上述的其他輸入設(shè)備包括但不限于物理鍵盤、軌跡球、鼠標、操作桿等中的一種或多種。
顯示模塊120用于顯示由用戶輸入的信息、提供給用戶的信息以及電子終端100的各種圖形用戶接口,這些圖形用戶接口可以由圖形、文本、圖標、視頻和其任意組合來構(gòu)成。在一個實例中,顯示模塊120包括一個顯示面板。顯示面板例如可為一個液晶顯示面板(Liquid Crystal Display,LCD)、有機發(fā)光二極管(Organic Light-Emitting Diode Display,OLED)顯示面板、電泳顯示面板(Electro-Phoretic Display,EPD)等。進一步地,觸控表面可設(shè)置于顯示面板上從而與顯示面板構(gòu)成一個整體。在另一些實施例中,顯示模塊120還可包括其他類型的顯示裝置,例如包括一個投影顯示裝置。相比于一般的顯示面板,投影顯示裝置 還需要包括一些用于投影的部件例如透鏡組。
上述的軟件程序以及模塊包括:操作系統(tǒng)以及補丁插入模塊。本發(fā)明實施例中,操作系統(tǒng)例如可為LINUX,UNIX,WINDOWS,或者移動操作系統(tǒng)如Android,IOS等,其可包括各種用于管理系統(tǒng)任務(wù)(例如內(nèi)存管理、存儲設(shè)備控制、電源管理等)的軟件組件和/或驅(qū)動,并可與各種硬件或軟件組件相互通訊,從而提供其他軟件組件的運行環(huán)境。補丁插入模塊運行在操作系統(tǒng)的基礎(chǔ)上,用于對電子終端100的中的應(yīng)用程序插入補丁。
第一實施例
本實施例提供一種應(yīng)用程序的插入補丁方法,如圖2所示,本實施例的方法包括以下步驟:
步驟S101、從服務(wù)器中下載應(yīng)用程序的待更新部分的補丁。
在一個實例中,電子終端100中的一個應(yīng)用程序出現(xiàn)錯誤,或者剛發(fā)布的新版本的安裝包,出現(xiàn)了一些錯誤。服務(wù)器會向電子終端100發(fā)送對應(yīng)的提示消息。例如,在一個場景中,可以是所述應(yīng)用程序的其中一項功能中存在錯誤,如,動態(tài)檢索操作,則在用戶執(zhí)行所述動態(tài)檢索時,所述服務(wù)器向電子終端100發(fā)送提示消息,則所述電子終端100顯示所述提示消息,詳細地,所述提示消息可為“下載動態(tài)檢索的補丁才能進行此操作,是否下載”,此時,所述電子終端100顯示可隨所述提示消息一并顯示提示按鈕,比如,“是”、“否”或者“下載”、“取消”等提示按鈕。進一步地,若接收到所用戶點擊提示按鈕“是”或者“下載”的操作,則從所述服務(wù)器下載所述應(yīng)用程序的動態(tài)檢索操作對應(yīng)的補丁。
在本實施例中,應(yīng)用程序的待更新部分的補丁包括類(class)。比如,若應(yīng)用程序中出現(xiàn)有問題的類,則需要通過更新修復(fù)有問題的類,在此種情形下,即可采用待更新部分的補丁中的類替換對應(yīng)有問題的類。
步驟S102、將所述補丁插入類加載器(classloader)中的所述應(yīng)用程 序的安裝包形成的元素組的最前面。
在一個實例中,所述應(yīng)用程序的元素組中的元素為所述應(yīng)用程序的安裝包分包后生成的dex文件,所述dex文件為Android平臺上可執(zhí)行文件的類型。其中,一個dex文件為一個元素(Element),多個dex文件會排列成一個有序的元素組(如,dexElements)。在本實施例中,所述補丁可以打包成dex文件。
步驟S103、所述類加載器加載所述應(yīng)用程序插入所述補丁之后的元素組,其中,若所述插入所述補丁之后的元素組中包括不止一個同名類時,所述類加載器加載所述同名類所在元素組中排在最前面的元素中的同名類。
詳細地,運行所述應(yīng)用程序時,所述類加載器加載所述應(yīng)用程序的所述元素組。在本實施例中,由于所述應(yīng)用程序的的補丁排列在所述元素組的最前面,當(dāng)所述類加載器加載所述元素組中的類時,首先會查看到所述補丁中的類。
詳細地,所述類加載器加載所述應(yīng)用程序插入所述補丁之后的元素組具體包括:按照所述元素組中元素的排列順序依次加載所述元素組中的元素;若所述元素中存在調(diào)用子類,則按照所述元素組中元素的排列順序依次讀取類,判斷當(dāng)前位置的元素中是否存在所述子類;若存在,則讀取所述子類,將所述子類返回至調(diào)用所述子類的元素中;若不存在,則讀取所述當(dāng)前位置的下一元素中的類,直到讀取到所述子類。
在一個實例中,所述類加載器中查找類的具體代碼如下:
詳細地,本實例中加載目標類clazz為所述應(yīng)用程序運行到某一時刻需要調(diào)用dex文件中的類。所述類加載器中的查找類的具體代碼則依次讀取所述類加載器中所述應(yīng)用程序的安裝包形成的元素組中元素中的類,直到查找到所述目標類clazz。類加載器加載所述目標類clazz時,則需要從所述多個dex文件中獲取所述目標類clazz。在本實施例中,由于所述補丁的插入,且原應(yīng)用程序的安裝包形成的元素組保持完整的情況下,可能出現(xiàn)同名類。上述代碼中的類加載方式為,根據(jù)所述應(yīng)用程序的安裝包形成的元素組的排列順序進行查找元素中的所述目標類clazz。詳細地,上述代碼中以Element表示所述應(yīng)用程序中的dex文件。上述代碼先定位至所述應(yīng)用程序的其中一個dex文件,查找當(dāng)前dex文件中是否存在所述目標類clazz,若不存在則移向下一個dex文件進行查找;若所述應(yīng)用程序全部的dex文件瀏覽完未找到所述目標類clazz,則返回空值,表示查找失敗。
根據(jù)本實施例的方法,通過直接在原應(yīng)用程序中插入補丁;運行過程中,出現(xiàn)重名類時先加載所述補丁中的類,從而實現(xiàn)覆蓋所述應(yīng)用程序中的出現(xiàn)問題的類。實現(xiàn)快速更新應(yīng)用程序,節(jié)省人力資源以及更新成本。
第二實施例
本實施例提供一種應(yīng)用程序的插入補丁方法,本實施例與第一實施例類似,其不同之處在于,如圖3所示,本實施例的方法包括:
步驟S101、從服務(wù)器中下載應(yīng)用程序的待更新部分的補丁。
步驟S102、將所述補丁插入類加載器中的所述應(yīng)用程序的安裝包形成的元素組的最前面。
若所述應(yīng)用程序的安裝包沒有進行拆分打包成多個dex文件,所述步驟S102包括:
步驟S1021、將所述補丁以插入數(shù)組方式插入所述應(yīng)用程序的安裝包形成的元素組的最前面。
詳細地,將所述補丁按照數(shù)組的形式插入所述安裝包形成的元素組的隊列首位。在所述類加載器進行加載時,先加載所述補丁中的類。本實施例中,所述元素組為所述應(yīng)用程序中的類、方法等組成的數(shù)組。
步驟S103、所述類加載器加載所述應(yīng)用程序插入所述補丁之后的元素組,其中,若所述插入所述補丁之后的元素組中包括不止一個同名類時,所述類加載器加載所述同名類所在元素組中排在最前面的元素中的同名類。
即,在本步驟中,在所述類加載器進行加載時,先加載所述補丁中的類。
關(guān)于本實施例的其它細節(jié),可進一步地參考第一實施例中的步驟,在此不再贅述。
根據(jù)本實施例的方法,若所述應(yīng)用程序沒有拆分代碼打包的程序,則不需要將所述補丁打包成指定文件,可以直接插入所述補丁在所述應(yīng)用程序的代碼形成的數(shù)組,節(jié)省對所述應(yīng)用程序的少部分更改操作時的成本。
第三實施例
本實施例提供一種應(yīng)用程序的插入補丁方法,本實施例與第一實施例類似,其不同之處在于,如圖4所示,本實施例的方法包括:
步驟S101、從服務(wù)器中下載應(yīng)用程序的待更新部分的補丁。
步驟S102、將所述補丁插入類加載器中的所述應(yīng)用程序的安裝包形成的元素組的最前面。
若所述方法基于應(yīng)用程序的dex分包,然后用所述類加載器進行加載。
所述步驟S102包括:
步驟S1022、將所述補丁打包成補入dex文件。
步驟S1023、將所述補入dex文件插入所述應(yīng)用程序的dex文件元素組的最前面。
詳細地,本實施例中的方法基于android dex分包方案。所述dex分包原理是將編譯好的class文件拆分打包成至少兩個dex,繞過dex方法數(shù)量的限制以及安裝時的檢查,在運行時再動態(tài)加載其它后面的dex文件。
步驟S103、所述類加載器加載所述應(yīng)用程序插入所述補丁之后的元素組,其中,若所述插入所述補丁之后的元素組中包括不止一個同名類時,所述類加載器加載所述同名類所在元素組中排在最前面的元素中的同名類。
關(guān)于本實施例的其它細節(jié),可進一步地參考第一實施例中的步驟,在此不再贅述。
根據(jù)本實施例的方法,基于dex拆分包,將所述補丁打包成dex文件插入所述應(yīng)用程序組成dex文件組成的元素組的隊首;調(diào)用類或者方法時先調(diào)用前面的類,從而實現(xiàn)覆蓋待替換的部分。節(jié)省對所述應(yīng)用程序的少部分更改操作時的成本。
第四實施例
本實施例提供一種應(yīng)用程序的插入補丁方法,本實施例與第一實施例類似,其不同之處在于,如圖5所示,本實施例的方法包括:
步驟S201、所述應(yīng)用程序的代碼在編譯時,在所述應(yīng)用程序中的類的構(gòu)造函數(shù)中插入指定代碼,使所述應(yīng)用程序中的類顯示未校驗狀態(tài)。
在本實施例中,基于所述應(yīng)用程序被android dex分包。詳細地,在一個實例中,安卓應(yīng)用程序的安裝包安裝時,所述安裝包中的dex文件會被虛擬機(dexopt)優(yōu)化成odex文件,然后可執(zhí)行所述應(yīng)用程序。所述虛擬機在啟動時,會產(chǎn)生verify選項,當(dāng)verify選項被打開時,doVerify變量為true,那么就會執(zhí)行dvmVerifyClass進行類的校驗,如果dvmVerifyClass校驗類成功,那么這個類會被打CLASS_ISPREVERIFIED的標志。然而不同的dex文件中的被打CLASS_ISPREVERIFIED的標志的類在相互調(diào)用會出現(xiàn)錯誤。因此,防止所述應(yīng)用程序中的類被打上CLASS_ISPREVERIFIED的標志,可防止不同dex文件中的類之間調(diào)用的錯誤。在一個實例中,在所述應(yīng)用程序的代碼中的各個類的構(gòu)造函數(shù)中插入以下代碼:
if(ClassVerifier.PREVENT_VERIFY){
System.out.println(AntilazyLoad.class);
}
詳細地,還包括將AntilazyLoad類打包成hack.dex,在啟動所述應(yīng)用程序應(yīng)用時加載進來。進一步地,AntilazyLoad類所在的dex包先加載進來,不然AntilazyLoad類會被標記為不存在,即使后續(xù)加載了hack.dex包,那么它也是不存在的,這樣屏幕就會出現(xiàn)很多類調(diào)用所述AntilazyLoad類時,AntilazyLoad類找不到的標志。由于AntilazyLoad類會被單獨打包成hack.dex首先被加載,因此,其它dex文件中的類的構(gòu)造函數(shù)中均插入了上述代碼,均調(diào)用了不在同一個dex文件中的AntilazyLoad類,因此其它dex文件中的類均不會被打上CLASS_ISPREVERIFIED標志。
進一步地,由于任何類中都包括構(gòu)造函數(shù)。因此所述指定代碼添加在所有類的構(gòu)造函數(shù)中,可以有效避免增加多余的函數(shù)使所述應(yīng)用程序原來的類的結(jié)構(gòu)被改變。
步驟S202、從服務(wù)器中下載應(yīng)用程序的待更新部分的補丁。
步驟S203、將所述補丁插入類加載器中的所述應(yīng)用程序的安裝包形成成的元素組的最前面。
步驟S204、所述類加載器加載所述應(yīng)用程序插入所述補丁之后的元素組,其中,若所述插入所述補丁之后的元素組中包括不止一個同名類時,所述類加載器加載所述同名類所在元素組中排在最前面的元素中的同名類。
關(guān)于本實施例的其它細節(jié),可進一步地參考第一實施例中的步驟,在此不再贅述。
根據(jù)本實施例的方法,通過將所述應(yīng)用程序在編譯時插入指定代碼,使所述應(yīng)用程序代碼中的類不會被打上已經(jīng)被校驗標志,使不在同一個dex包的方法調(diào)用不會出現(xiàn)錯誤。
第五實施例
本實施例一種應(yīng)用程序的插入補丁裝置,如圖6所示,本實施例的所述裝置包括:下載模塊301、補丁插入模塊302以及類加載模塊303。
下載模塊301,用于從服務(wù)器中下載應(yīng)用程序的待更新部分的補丁。
補丁插入模塊302,用于將所述補丁插入類加載器中所述應(yīng)用程序的安裝包形成的元素組的最前面。
類加載模塊303,用于所述類加載器加載所述應(yīng)用程序插入所述補丁之后的元素組,其中,若所述插入所述補丁之后的元素組中包括不止一個同名類時,所述類加載器加載所述同名類所在元素組中排在最前面的元素中的同名類。
詳細地,所述類加載模塊303包括:
讀取單元,用于按照所述元素組中元素的排列順序依次加載所述元素組中的元素。
判斷單元,用于若所述元素中存在調(diào)用子類,則按照所述元素組中元素 的排列順序依次讀取類,判斷當(dāng)前位置的元素中是否存在所述子類。
移動單元,用于若所述判斷單元判斷為當(dāng)前位置的元素中不存在所述子類,則將讀取位置定位在所述元素組的排列所述當(dāng)前位置的下一元素。
所述讀取單元還用于若所述讀取位置所在的元素中存在所述子類則根據(jù)所述讀取位置讀取所述元素中的所述子類。
關(guān)于本實施例的其它細節(jié),可進一步地參考上述方法實施例,在此不再贅述。
根據(jù)本實施例的裝置,通過直接在原應(yīng)用程序中插入補丁;運行過程中,出現(xiàn)重名類時先加載所述補丁中的類,從而實現(xiàn)覆蓋所述應(yīng)用程序中的出現(xiàn)問題的類。實現(xiàn)快速更新應(yīng)用程序,節(jié)省人力資源以及更新成本。
第六實施例
本實施例提供一種應(yīng)用程序的插入補丁裝置,本實施例與第五實施例類似,其不同之處在于,如圖7所示,本實施例的裝置包括:下載模塊301、補丁插入模塊302,所述補丁插入模塊302包括:數(shù)組排列單元3021及第一插入單元3022以及類加載模塊303。
下載模塊301,用于從服務(wù)器中下載應(yīng)用程序的待更新部分的補丁。
補丁插入模塊302,用于將所述補丁插入類加載器中所述應(yīng)用程序的安裝包形成的元素組的最前面。
所述補丁插入模塊302包括:
第一插入單元3021,用于若所述應(yīng)用程序的代碼沒有進行拆分打包則將所述補丁以插入數(shù)組方式插入所述應(yīng)用程序的安裝包形成的元素組的最前面。
類加載模塊303,用于所述類加載器加載所述應(yīng)用程序插入所述補丁之后的元素組,其中,若所述插入所述補丁之后的元素組中包括不止一個同名類時,所述類加載器加載所述同名類所在元素組中排在最前面的元素中的同 名類。
關(guān)于本實施例的其它細節(jié),可進一步地參考上述方法實施例,在此不再贅述。
根據(jù)本實施例的裝置,若所述應(yīng)用程序沒有拆分代碼打包的程序,則不需要將所述補丁打包成指定文件,可以直接插入所述補丁在所述應(yīng)用程序的代碼形成的數(shù)組,節(jié)省對所述應(yīng)用程序的少部分更改操作時的成本。
第七實施例
本實施例提供一種應(yīng)用程序的插入補丁裝置,本實施例與第五實施例類似,其不同之處在于,如圖7所示,本實施例的裝置包括:下載模塊301、補丁插入模塊302,所述補丁插入模塊302包括數(shù)組排列單元3021及第一插入單元3022以及類加載模塊303。
下載模塊301,用于從服務(wù)器中下載應(yīng)用程序的待更新部分的補丁。
補丁插入模塊302,用于將所述補丁插入類加載器中所述應(yīng)用程序的安裝包形成的元素組的最前面。
所述補丁插入模塊302包括:
打包單元3022,用于將所述補丁打包成補入dex文件。
第二插入單元3023,用于將所述補入dex文件插入所述應(yīng)用程序的dex文件元素組的最前面。
類加載模塊303,用于所述類加載器加載所述應(yīng)用程序插入所述補丁之后的元素組,其中,若所述插入所述補丁之后的元素組中包括不止一個同名類時,所述類加載器加載所述同名類所在元素組中排在最前面的元素中的同名類。
關(guān)于本實施例的其它細節(jié),可進一步地參考上述方法實施例,在此不再贅述。
根據(jù)本實施例的裝置,基于dex拆分包,將所述補丁打包成dex文件插入 所述應(yīng)用程序組成dex文件組的隊首;調(diào)用類或者方法時先調(diào)用前面的類,從而實現(xiàn)覆蓋帶待替換的部分。節(jié)省對所述應(yīng)用程序的少部分更改操作時的成本。
第八實施例
本本實施例提供一種應(yīng)用程序的插入補丁裝置,本實施例與第五實施例類似,其不同之處在于,如圖9所示,本實施例的裝置包括:下載模塊301、補丁插入模塊302、類加載模塊303以及防校驗?zāi)K304。
下載模塊301,用于從服務(wù)器中下載應(yīng)用程序的待更新部分的補丁。
補丁插入模塊302,用于將所述補丁插入類加載器中所述應(yīng)用程序的安裝包形成的元素組的最前面。
類加載模塊303,用于所述類加載器加載所述應(yīng)用程序插入所述補丁之后的元素組,其中,若所述插入所述補丁之后的元素組中包括不止一個同名類時,所述類加載器加載所述同名類所在元素組中排在最前面的元素中的同名類。
防校驗?zāi)K304,用于所述應(yīng)用程序的代碼在編譯時,在所述應(yīng)用程序中的裝置的構(gòu)造函數(shù)中插入指定代碼,使所述應(yīng)用程序中的類顯示未校驗狀態(tài)。
關(guān)于本實施例的其它細節(jié),可進一步地參考上述方法實施例,在此不再贅述。
根據(jù)本實施例的裝置,通過將所述應(yīng)用程序在編譯時插入指定代碼,使所述應(yīng)用程序代碼中的類不會被打上已經(jīng)被校驗標志,使不在同一個dex包的方法調(diào)用不會出現(xiàn)錯誤。
此外,本發(fā)明實施例還提供一種計算機可讀存儲介質(zhì),其內(nèi)存儲有計算機可執(zhí)行指令,上述的計算機可讀存儲介質(zhì)例如為非易失性存儲器例如 光盤、硬盤、或者閃存。上述的計算機可執(zhí)行指令用于讓計算機或者類似的運算裝置完成上述的應(yīng)用程序的插入補丁方法中的各種操作。
需要說明的是,本說明書中的各個實施例采用遞進的方式描述,每個實施例重點說明的都是與其他實施例的不同之處,各個實施例之間相同相似的部分互相參見即可。對于裝置類實施例而言,由于其與方法實施例基本相似,所以描述的比較簡單,相關(guān)之處參見方法實施例的部分說明即可。
需要說明的是,在本文中,諸如第一和第二等之類的關(guān)系術(shù)語僅僅用來將一個實體或者操作與另一個實體或操作區(qū)分開來,而不一定要求或者暗示這些實體或操作之間存在任何這種實際的關(guān)系或者順序。而且,術(shù)語“包括”、“包含”或者其任何其他變體意在涵蓋非排他性的包含,從而使得包括一系列要素的過程、方法、物品或者裝置不僅包括那些要素,而且還包括沒有明確列出的其他要素,或者是還包括為這種過程、方法、物品或者裝置所固有的要素。在沒有更多限制的情況下,由語句“包括一個……”限定的要素,并不排除在包括要素的過程、方法、物品或者裝置中還存在另外的相同要素。
以上該,僅是本發(fā)明的較佳實施例而已,并非對本發(fā)明作任何形式上的限制,雖然本發(fā)明已以較佳實施例揭露如上,然而并非用以限定本發(fā)明,任何熟悉本專業(yè)的技術(shù)人員,在不脫離本發(fā)明技術(shù)方案范圍內(nèi),當(dāng)可利用上述揭示的技術(shù)內(nèi)容做出些許更動或修飾為等同變化的等效實施例,但凡是未脫離本發(fā)明技術(shù)方案內(nèi)容,依據(jù)本發(fā)明的技術(shù)實質(zhì)對以上實施例所作的任何簡單修改、等同變化與修飾,均仍屬于本發(fā)明技術(shù)方案的范圍內(nèi)。