對(duì)應(yīng)。其中,符號(hào)地址可以通過dlsymO方法獲得。
[0033]代理模塊為本地模塊的每個(gè)函數(shù)符號(hào)實(shí)現(xiàn)一個(gè)本地(Native)函數(shù)。Native函數(shù)從上述代理模塊中存儲(chǔ)的符號(hào)地址表中獲取本地模塊的函數(shù)對(duì)應(yīng)的函數(shù)地址,并向該函數(shù)地址傳入相應(yīng)的參數(shù),然后調(diào)用符號(hào)地址表中本地模塊的函數(shù),最后將本地模塊的函數(shù)的返回值作為Native函數(shù)的返回值,返回給虛擬機(jī)。
[0034]在本發(fā)明實(shí)施例中,在獲取到更新本地模塊所需的更新模塊之后,虛擬機(jī)可以通過調(diào)用單元30調(diào)用應(yīng)用程序中預(yù)先加載的代理模塊,具體地,可以是通過本地接口調(diào)用應(yīng)用程序中預(yù)先加載的代理模塊,以便于通過代理模塊實(shí)現(xiàn)本地模塊的更新。
[0035]在本發(fā)明實(shí)施例中,調(diào)用應(yīng)用程序中預(yù)先加載的代理模塊可以是在獲取到更新本地模塊所需的更新模塊之后,也可以是在獲取到更新本地模塊所需的更新模塊之前。在確定虛擬機(jī)中應(yīng)用程序的本地模塊需要更新時(shí),可以先通過本地接口調(diào)用應(yīng)用程序中預(yù)先加載的代理模塊,再獲取更新模塊的路徑信息,代理模塊基于該路徑信息加載更新模塊,或者是在基于路徑信息獲取到更新模塊之后,加載更新模塊。
[0036]更新單元50用于代理模塊通過更新模塊對(duì)本地模塊進(jìn)行更新。
[0037]由于代理模塊具有動(dòng)態(tài)加載和卸載本地模塊的功能,因此在調(diào)用到應(yīng)用程序中預(yù)先加載的代理模塊之后,更新單元50可以用于通過代理模塊加載更新模塊,實(shí)現(xiàn)對(duì)本地模塊的更新。
[0038]在本發(fā)明實(shí)施例中,可以是在確定虛擬機(jī)中應(yīng)用程序的本地模塊需要更新時(shí),虛擬機(jī)先通過代理模塊卸載本地模塊,然后通過代理模塊加載獲取到的更新模塊,或者代理模塊基于更新模塊的路徑信息直接加載更新模塊。由于在代理模塊可以保存本地模塊中的操作句柄和符號(hào)地址,因此在更新本地模塊的過程中,應(yīng)用程序可以基于代理模塊運(yùn)行,而無需重啟應(yīng)用程序。
[0039]根據(jù)本發(fā)明實(shí)施例,在虛擬機(jī)與本地模塊之間增加了代理模塊,在確定虛擬機(jī)中應(yīng)用程序的本地模塊需要更新時(shí),獲取更新本地模塊所需的更新模塊,并調(diào)用應(yīng)用程序中預(yù)先加載的代理模塊,該預(yù)先加載的代理模塊通過更新模塊對(duì)本地模塊進(jìn)行更新,由于代理模塊可以動(dòng)態(tài)加載和卸載本地模塊,并存有本地模塊中的操作句柄和符號(hào)地址,在應(yīng)用程序更新過程中,應(yīng)用程序可以基于代理模塊運(yùn)行,從而可以實(shí)現(xiàn)虛擬機(jī)內(nèi)的應(yīng)用程序在運(yùn)行狀態(tài)下對(duì)本地模塊進(jìn)行更新,使得虛擬機(jī)本地運(yùn)行的應(yīng)用程序更新時(shí)無需退出該應(yīng)用程序,解決了現(xiàn)有技術(shù)中虛擬機(jī)本地運(yùn)行的應(yīng)用程序更新時(shí)需要先退出該應(yīng)用程序而導(dǎo)致虛擬機(jī)本地運(yùn)行的應(yīng)用程序更新不便的問題,進(jìn)而達(dá)到了可以根據(jù)需要隨時(shí)更新應(yīng)用程序的本地模塊而無需退出應(yīng)用程序的效果。
[0040]需要說明的是,對(duì)本地模塊的更新可以是對(duì)本地模塊的升級(jí),對(duì)本地模塊的更新相當(dāng)于對(duì)本地模塊所處的應(yīng)用程序的更新或者升級(jí),均屬于本發(fā)明的保護(hù)范圍,不對(duì)本發(fā)明有不當(dāng)限定。
[0041]優(yōu)選地,更新單元50還用于在應(yīng)用程序的運(yùn)行過程中,代理模塊通過更新模塊對(duì)本地模塊進(jìn)行更新。
[0042]在確定虛擬機(jī)中應(yīng)用程序的本地模塊需要更新時(shí),可以獲取更新本地模塊所需的更新模塊,并調(diào)用應(yīng)用程序中預(yù)先加載的代理模塊,并在應(yīng)用程序的運(yùn)行過程中,預(yù)先加載的代理模塊通過更新模塊對(duì)本地模塊進(jìn)行更新。由虛擬機(jī)先通過代理模塊卸載本地模塊,然后將更新模塊的路徑傳遞給代理模塊,虛擬機(jī)再通過代理模塊加載更新模塊,實(shí)現(xiàn)對(duì)本地模塊的更新。由于代理模塊具有動(dòng)態(tài)加載和卸載本地模塊的功能,并存有本地模塊的操作句柄和符號(hào)地址,因此,可以在應(yīng)用程序的運(yùn)行過程中利用代理模塊實(shí)現(xiàn)對(duì)本地模塊的更新。
[0043]根據(jù)本發(fā)明實(shí)施例,在應(yīng)用程序的運(yùn)行過程中,代理模塊通過更新模塊對(duì)本地模塊進(jìn)行更新,從而不需要在更新本地模塊時(shí),重啟虛擬機(jī)中應(yīng)用程序,避免了由于應(yīng)用程序重啟過程中容易造成數(shù)據(jù)丟失的問題,達(dá)到了提高應(yīng)用程序數(shù)據(jù)安全性的效果。以移動(dòng)通訊終端中應(yīng)用程序如手機(jī)管家程序的病毒查殺引擎(本地SO庫)為例,當(dāng)用戶對(duì)手機(jī)管家程序的一些查毒周期、查毒方式等參數(shù)進(jìn)行設(shè)置的同時(shí),還檢測(cè)到應(yīng)用程序本地模塊需要進(jìn)行更新,由于在應(yīng)用程序運(yùn)行過程中,可以實(shí)現(xiàn)對(duì)本地模塊的更新,從而避免由于用于在設(shè)置好參數(shù)后尚未進(jìn)行保存而導(dǎo)致設(shè)置的參數(shù)丟失的問題。
[0044]本發(fā)明實(shí)施例中,由于在應(yīng)用程序的運(yùn)行過程中,代理模塊通過更新模塊對(duì)本地模塊進(jìn)行更新,實(shí)現(xiàn)虛擬機(jī)應(yīng)用程序的本地模塊的熱插拔,在更新過程中無需用戶參與交互,實(shí)現(xiàn)本地模塊在后臺(tái)靜默更新,可以很大程度地改善虛擬機(jī)應(yīng)用程序的用戶體驗(yàn)。以移動(dòng)通訊終端的即時(shí)通訊程序?yàn)槔?dāng)用戶在使用即時(shí)通訊程序進(jìn)行通信的過程中,當(dāng)確定應(yīng)用程序的本地模塊需要更新時(shí),現(xiàn)有的本地模塊的更新方式在更新本地模塊過程中,需要重啟即時(shí)通訊程序,使得用戶在使用即時(shí)通訊程序進(jìn)行通信的過程中斷,影響了用戶體驗(yàn)。通過本發(fā)明實(shí)施例的虛擬機(jī)應(yīng)用程序的更新處理方法可以使得在即時(shí)通訊程序運(yùn)行過程中,對(duì)即時(shí)通訊程序的本地模塊的更新,而用戶使用即時(shí)通訊程序的過程不受任何影響。
[0045]圖3是根據(jù)本發(fā)明第二實(shí)施例的虛擬機(jī)應(yīng)用程序的更新處理裝置的示意圖。該實(shí)施例的虛擬機(jī)應(yīng)用程序的更新處理裝置可以作為上述實(shí)施例的虛擬機(jī)應(yīng)用程序的更新處理裝置的一種優(yōu)選實(shí)施方式。如圖3所示,該虛擬機(jī)應(yīng)用程序的更新處理裝置包括獲取單元10、調(diào)用單元30、更新單元50、運(yùn)行單元70和卸載單元90。其中,獲取單元10、調(diào)用單元30、更新單元50與圖1所示的獲取單元10、調(diào)用單元30、更新單元50功能相同,這里不做贅述。
[0046]運(yùn)行單元70用于在調(diào)用應(yīng)用程序中預(yù)先加載的代理模塊之后,使得應(yīng)用程序基于代理模塊運(yùn)行。
[0047]由于代理模塊中保存有本地模塊的操作句柄和本地模塊的符號(hào)地址,因此在調(diào)用應(yīng)用程序中預(yù)先加載的代理模塊之后,在本地模塊進(jìn)行更新的過程中,通過代理模塊調(diào)用本地模塊的函數(shù)實(shí)現(xiàn)本地模塊的功能,運(yùn)行單元70使得應(yīng)用程序可以基于代理模塊運(yùn)行。
[0048]在調(diào)用應(yīng)用程序中預(yù)先加載的代理模塊之前,虛擬機(jī)可以先獲取代理模塊,加載代理模塊,然后虛擬機(jī)將被調(diào)用的本地模塊的路徑傳遞給代理模塊,代理模塊基于該路徑加載應(yīng)用程序的本地模塊,同時(shí),代理模塊獲取本地模塊的操作句柄和本地模塊所有的符號(hào)地址,并保存本地模塊的操作句柄以及將本地模塊所有的符號(hào)存儲(chǔ)到一張表中,得到符號(hào)地址表。
[0049]在調(diào)用應(yīng)用程序中預(yù)先加載的代理模塊之后,虛擬機(jī)可以通過本地接口調(diào)用代理模塊中的Native函數(shù),并由Native函數(shù)從上述代理模塊中存儲(chǔ)的符號(hào)地址表中獲取本地模塊的函數(shù)對(duì)應(yīng)的函數(shù)地址,向該函數(shù)地址傳入相應(yīng)的參數(shù),然后調(diào)用符號(hào)地址表中本地模塊的函數(shù),最后將本地模塊的函數(shù)的返回值作為Native函數(shù)的返回值,返回給虛擬機(jī),從而保證在更新本地模塊的過程中,應(yīng)用程序的正常運(yùn)行。
[0050]卸載單元90用于在應(yīng)用程序基于代理模塊運(yùn)行的過程中,通過代理模塊卸載本地模塊。
[0051]由于代理模塊對(duì)dlcloseO庫函數(shù)進(jìn)行封裝,得到unloadO函數(shù),因此在確定應(yīng)用程序中本地模塊需要進(jìn)行更新時(shí),卸載單元90可以通過調(diào)用代理模塊中的unloadO函數(shù)實(shí)現(xiàn)對(duì)本地模塊的卸載。
[0052]根據(jù)本發(fā)明實(shí)施例,由于增加了代理模塊,使得應(yīng)用程序可以在更新本地模塊時(shí),基于代理模塊運(yùn)行,并在應(yīng)用程序運(yùn)行過程中,通過代理模塊卸載本地模塊,使得應(yīng)用程序在更新本地模塊時(shí),不影響應(yīng)用程序的使用,保證應(yīng)用程序的正常運(yùn)行,同時(shí),通過增加對(duì)本地模塊的卸載功能,使得在更新本地模塊之后,不需要重啟應(yīng)用程序,相對(duì)于現(xiàn)有技術(shù)大大改善了應(yīng)用程序的用戶體驗(yàn)。
[0053]圖4是根據(jù)本發(fā)明第三實(shí)施例的虛擬機(jī)應(yīng)用程序的更新處理裝置的示意圖。該實(shí)施例的虛擬機(jī)應(yīng)用程序的更新處理裝置可以作為上述實(shí)施例的虛擬機(jī)應(yīng)用程序的更新處理裝置的一種優(yōu)選實(shí)施方式。如圖4所示,該虛擬機(jī)應(yīng)用程序的更新處理裝置包括獲取單元10、調(diào)用單元30、更新單元50、運(yùn)行單元70和卸載單元90。其中,運(yùn)行單元70包括第一調(diào)用模塊701、第一獲取模塊703、第二獲取模塊705和第二調(diào)用模塊707。獲取單元10、調(diào)用單元30、更新單元50和卸載單元90與圖3所示的獲取單元10、調(diào)用單元30、更新單元50和卸載單元90功能相同,這里不做贅述。
[0054]第一調(diào)用模塊701用于使得虛擬機(jī)通過本地接口調(diào)用代理模塊的本地函數(shù)。
[0055]代理模塊可以預(yù)先為本地模塊中的每個(gè)函數(shù)符號(hào)實(shí)現(xiàn)一個(gè)本地(Native)函數(shù),且代理模塊中保存了本地模塊的操作句柄。在調(diào)用應(yīng)用程序中預(yù)先加載的代理模塊之后,第一調(diào)用模塊701可以用于使得虛擬機(jī)可以通過本地接口調(diào)用代理模塊中的Native函數(shù)。如圖2所示,在虛擬機(jī)通過本地接口調(diào)用代理模塊的Native函數(shù)時(shí),可以先從代理模塊中預(yù)先存儲(chǔ)的操作句柄中獲取被調(diào)用的本地模塊對(duì)應(yīng)的操作句柄,以便于從符號(hào)地址表中調(diào)用相應(yīng)的本地模塊的函數(shù)。
[0056]第一獲取模塊703用于獲取預(yù)先存儲(chǔ)在代理模塊中本地模塊的函數(shù)地址的符號(hào)地址表。
[0057]由于在代理模塊中預(yù)先存儲(chǔ)了本地模塊的符號(hào)地址表,如圖2所示,代理模塊中的符號(hào)地址表與本地模塊中的符號(hào)地址表相同,且代理模塊的符號(hào)地址表中的符號(hào)地址與本地模塊的符號(hào)地址表中的符號(hào)地址一一對(duì)應(yīng)。第一獲取模塊703獲取該符號(hào)地址表,以便于從該符號(hào)地址表中獲取本地模塊的函數(shù)地址。
[0058]第二獲取模塊705用于通過代理模塊的本地函數(shù)從符號(hào)地址表中獲取本地模塊的函數(shù)地址。
[0059]由于代理模塊為本地模塊的每個(gè)函數(shù)符號(hào)實(shí)現(xiàn)一個(gè)Native函數(shù),相當(dāng)于一個(gè)Native函數(shù)對(duì)應(yīng)本地模塊中的一個(gè)函數(shù),在獲取到預(yù)先存儲(chǔ)在代理模塊中本地模塊的函數(shù)地址的符號(hào)地址表之后,第二獲取模塊705可以通過代理模塊的Native函數(shù)從代理模塊的符號(hào)地址表中獲取與Native函數(shù)對(duì)應(yīng)的本地模塊的函數(shù)地址,以便于調(diào)用該函數(shù)地址對(duì)應(yīng)的本地模塊的函數(shù)。
[0060]第二調(diào)用模塊707用于使得代理模塊通過調(diào)用本地模塊的函數(shù)地址對(duì)應(yīng)的函數(shù)以運(yùn)行應(yīng)用程序。
[0061]在獲取本地模塊的函數(shù)地址之后,基于該函數(shù)地址向其對(duì)應(yīng)的函數(shù)傳遞相應(yīng)的參數(shù),并通過調(diào)用該函數(shù)地址對(duì)應(yīng)的函數(shù),將該函數(shù)的返回值作為Native函數(shù)的返回值,返回給虛擬機(jī),從而保證了應(yīng)用程序的正常運(yùn)行。
[0062]通過本發(fā)明實(shí)施例,基于代理模塊中的Native函數(shù)實(shí)現(xiàn)對(duì)本地模塊的函數(shù)的調(diào)用,從而使得在更新本地模塊的過程中,保證應(yīng)用程序的正常運(yùn)行。
[0063]優(yōu)選地,獲取單元10包括第三獲取模塊、查找模塊和第四獲取模塊。第三獲取模塊用于獲取更新模塊的路徑信息。查找模塊用于根據(jù)更新模塊的路徑信息查找更新模塊。第四獲取模塊用于獲取查找到的更新模塊。具體地,可以是在確定虛擬機(jī)中應(yīng)用程序的本地模塊需要更新時(shí),虛擬機(jī)獲取更新模塊的路徑信息然后通過該路徑信息查找到更新模塊,如果查找到更新模塊,則獲取該更新模塊,以便于通過該更新模塊對(duì)本地模塊進(jìn)行更新。
[0064]本發(fā)明實(shí)施例還提供了一種虛擬機(jī)應(yīng)用程序的更新處理方法。該方法運(yùn)行在計(jì)算機(jī)設(shè)備上。需要說明的是,本發(fā)