国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

      虛擬機(jī)應(yīng)用程序的更新處理方法和裝置的制造方法

      文檔序號:8445423閱讀:1025來源:國知局
      虛擬機(jī)應(yīng)用程序的更新處理方法和裝置的制造方法
      【技術(shù)領(lǐng)域】
      [0001]本發(fā)明涉及虛擬機(jī)領(lǐng)域,具體而言,涉及一種虛擬機(jī)應(yīng)用程序的更新處理方法和
      >J-U ρ?α裝直。
      【背景技術(shù)】
      [0002]使用跨平臺語言(例如Java)開發(fā)的應(yīng)用程序通常都會運行在虛擬機(jī)上,例如SunJava 虛擬機(jī)(Java Virtual Machine,簡稱 JVM), Android 平臺的 Java 虛擬機(jī)(DalvikVirtual Machine,簡稱DalvikVM)。為了保證應(yīng)用程序的性能,或者出于代碼安全方面的考慮,將開發(fā)的應(yīng)用程序的部分模塊用虛擬機(jī)本地代碼實現(xiàn),得到動態(tài)鏈接庫,例如SO庫(Service Object,容器管理的一組對象,完成系統(tǒng)中業(yè)務(wù)功能)和DLL庫(Dynamic linkLibrary,一個包含可由多個程序同時使用的代碼和數(shù)據(jù)的庫),這些動態(tài)鏈接庫稱之為本地模塊。虛擬機(jī)通過動態(tài)加載這些本地模塊,并通過本地接口,如Java本地接口(JavaNative Interface,簡稱JNI,用于Java與本地庫之間進(jìn)行交互),實現(xiàn)虛擬機(jī)內(nèi)部運行的代碼與本地模塊之間的交互操作。
      [0003]目前常見的虛擬機(jī)都支持動態(tài)加載技術(shù)。以Android的DalvikVM為例,可以動態(tài)加載用C/C++開發(fā)的本地SO庫和用Java開發(fā)的dex可執(zhí)行文件。其中,在動態(tài)加載本地SO庫時,調(diào)用的是System.1oadO或者System.1oadLibrary O方法。由于JVM本身有一套資源回收機(jī)制,開發(fā)者在使用完成后,不需要手動卸載本地SO庫。基于上述原因,Java并沒有提供類似System, unload O的方法。正是因為Java不提供卸載本地模塊的方法,Android應(yīng)用在升級本地模塊時會遇到一些麻煩。以移動通訊終端的應(yīng)用程序,例如,手機(jī)管家程序的病毒查殺引擎為例,當(dāng)引擎(本地SO庫)需要升級時,除了在相應(yīng)的目錄下用新的SO庫替換原來的SO庫外,還需要重啟手機(jī)管家程序進(jìn)程后重新調(diào)用System.1oadO才能完成升級。
      [0004]Android的DalvikVM通過JNI與本地SO庫交互。其中在Java層加載本地SO時調(diào)用的System.1oadO方法是在DalvikVM中實現(xiàn)的,其本質(zhì)是調(diào)用Linux庫函數(shù)dlopen O實現(xiàn)加載。函數(shù)dlopen O返回本地SO庫的操作句柄,這些句柄被保存在一張handle表中,由DalvikVM統(tǒng)一管理。當(dāng)DalvikVM調(diào)用SO庫中的Native函數(shù)時,先從handle表中找到該SO庫對應(yīng)的操作句柄,然后通過調(diào)用dlsymO找到相應(yīng)的符號地址。在DalvikVM退出時,則調(diào)用dlcloseO卸載所有被加載過的SO庫。
      [0005]發(fā)明人發(fā)現(xiàn),在虛擬機(jī)中運行的應(yīng)用程序更新本地模塊時,都必須先退出該應(yīng)用程序,然后替換相應(yīng)的模塊,再重啟進(jìn)程,從而達(dá)到本地模塊更新的目的。這對于正在使用這個應(yīng)用的用戶來說非常不方便。特別是在應(yīng)用程序重啟時如果未做好數(shù)據(jù)備份,更有可能造成數(shù)據(jù)丟失甚至影響軟件的正常使用。
      [0006]針對現(xiàn)有技術(shù)中虛擬機(jī)本地運行的應(yīng)用程序更新時需要先退出該應(yīng)用程序而導(dǎo)致虛擬機(jī)本地運行的應(yīng)用程序更新不便的問題,目前尚未提出有效的解決方案。

      【發(fā)明內(nèi)容】

      [0007]本發(fā)明的主要目的在于提供一種虛擬機(jī)應(yīng)用程序的更新處理方法和裝置,以解決現(xiàn)有技術(shù)中虛擬機(jī)本地運行的應(yīng)用程序更新時需要先退出該應(yīng)用程序而導(dǎo)致虛擬機(jī)本地運行的應(yīng)用程序更新不便的問題。
      [0008]為了實現(xiàn)上述目的,根據(jù)本發(fā)明的一個方面,提供了一種虛擬機(jī)應(yīng)用程序的更新處理方法。根據(jù)本發(fā)明的虛擬機(jī)應(yīng)用程序的更新處理方法包括:在確定虛擬機(jī)中應(yīng)用程序的本地模塊需要更新時,獲取更新本地模塊所需要的更新模塊,其中,本地模塊為通過虛擬機(jī)的本地代碼實現(xiàn)的動態(tài)鏈接庫;調(diào)用應(yīng)用程序中預(yù)先加載的代理模塊;以及代理模塊通過更新模塊對本地模塊進(jìn)行更新。
      [0009]為了實現(xiàn)上述目的,根據(jù)本發(fā)明的另一方面,提供了一種虛擬機(jī)應(yīng)用程序的更新處理裝置。根據(jù)本發(fā)明的虛擬機(jī)應(yīng)用程序的更新處理裝置包括:獲取單元,用于在確定虛擬機(jī)中應(yīng)用程序的本地模塊需要更新時,獲取更新本地模塊所需要的更新模塊,其中,本地模塊為通過虛擬機(jī)的本地代碼實現(xiàn)的動態(tài)鏈接庫;調(diào)用單元,用于調(diào)用應(yīng)用程序中預(yù)先加載的代理模塊;以及更新單元,用于代理模塊通過更新模塊對本地模塊進(jìn)行更新。
      [0010]通過本發(fā)明實施例,解決了現(xiàn)有技術(shù)中虛擬機(jī)本地運行的應(yīng)用程序更新時需要先退出該應(yīng)用程序而導(dǎo)致虛擬機(jī)本地運行的應(yīng)用程序更新不便的問題,進(jìn)而達(dá)到了可以根據(jù)需要隨時更新應(yīng)用程序的本地模塊而無需退出應(yīng)用程序的效果。
      【附圖說明】
      [0011]構(gòu)成本申請的一部分的附圖用來提供對本發(fā)明的進(jìn)一步理解,本發(fā)明的示意性實施例及其說明用于解釋本發(fā)明,并不構(gòu)成對本發(fā)明的不當(dāng)限定。在附圖中:
      [0012]圖1是根據(jù)本發(fā)明第一實施例的虛擬機(jī)應(yīng)用程序的更新處理裝置的示意圖;
      [0013]圖2是根據(jù)本發(fā)明實施例的代理模塊與本地模塊之間的關(guān)系示意圖;
      [0014]圖3是根據(jù)本發(fā)明第二實施例的虛擬機(jī)應(yīng)用程序的更新處理裝置的示意圖;
      [0015]圖4是根據(jù)本發(fā)明第三實施例的虛擬機(jī)應(yīng)用程序的更新處理裝置的示意圖;
      [0016]圖5是根據(jù)本發(fā)明第一實施例的虛擬機(jī)應(yīng)用程序的更新處理方法的流程圖;
      [0017]圖6是根據(jù)本發(fā)明第二實施例的虛擬機(jī)應(yīng)用程序的更新處理方法的流程圖;以及
      [0018]圖7是根據(jù)本發(fā)明第三實施例的虛擬機(jī)應(yīng)用程序的更新處理方法的流程圖。
      【具體實施方式】
      [0019]需要說明的是,在不沖突的情況下,本申請中的實施例及實施例中的特征可以相互組合。下面將參考附圖并結(jié)合實施例來詳細(xì)說明本發(fā)明。
      [0020]為了使本技術(shù)領(lǐng)域的人員更好地理解本發(fā)明方案,下面將結(jié)合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實施例僅僅是本發(fā)明一部分的實施例,而不是全部的實施例?;诒景l(fā)明中的實施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都應(yīng)當(dāng)屬于本發(fā)明保護(hù)的范圍。
      [0021]需要說明的是,本發(fā)明的說明書和權(quán)利要求書及上述附圖中的術(shù)語“第一”、“第二”等是用于區(qū)別類似的對象,而不必用于描述特定的順序或先后次序。應(yīng)該理解這樣使用的數(shù)據(jù)在適當(dāng)情況下可以互換,以便這里描述的本發(fā)明的實施例。此外,術(shù)語“包括”和“具有”以及他們的任何變形,意圖在于覆蓋不排他的包含,例如,包含了一系列步驟或單元的過程、方法、系統(tǒng)、產(chǎn)品或設(shè)備不必限于清楚地列出的那些步驟或單元,而是可包括沒有清楚地列出的或?qū)τ谶@些過程、方法、產(chǎn)品或設(shè)備固有的其它步驟或單元。
      [0022]本發(fā)明實施例提供了一種虛擬機(jī)應(yīng)用程序的更新處理裝置,該裝置可以通過計算機(jī)設(shè)備實現(xiàn)其功能。
      [0023]圖1是根據(jù)本發(fā)明第一實施例的虛擬機(jī)應(yīng)用程序的更新處理裝置的示意圖。如圖1所示,該虛擬機(jī)應(yīng)用程序的更新處理裝置包括獲取單元10、調(diào)用單元30和更新單元50。
      [0024]獲取單元10用于在確定虛擬機(jī)中應(yīng)用程序的本地模塊需要更新時,獲取更新本地模塊所需要的更新模塊,其中,本地模塊為通過虛擬機(jī)的本地代碼實現(xiàn)的動態(tài)鏈接庫。
      [0025]為了保證應(yīng)用程序的性能或者出于代碼安全方面的考慮,將運行在虛擬機(jī)上的應(yīng)用程序的部分模塊用本地代碼實現(xiàn),得到一些動態(tài)鏈接庫,例如SO庫和DLL庫,這些動態(tài)鏈接庫可以稱為本地模塊。更新模塊可以是更新應(yīng)用程序的本地模塊所需的模塊,可以稱為新的本地模塊。
      [0026]本發(fā)明實施例中,在確定虛擬機(jī)中應(yīng)用程序的本地模塊需要更新之前,可以檢測服務(wù)器中是否存在本地模塊對應(yīng)的更新模塊,如果檢測到服務(wù)器中存在與本地模塊對應(yīng)的更新模塊,則確定虛擬機(jī)中應(yīng)用程序的本地模塊需要更新,或者在檢測出服務(wù)器中存在與本地模塊對應(yīng)的更新模塊之后,判斷是否需要更新本地模塊,當(dāng)判斷出需要更新本地模塊時,則確定虛擬機(jī)中應(yīng)用程序的本地模塊需要更新。以移動通訊終端中應(yīng)用程序如手機(jī)管家程序的病毒查殺引擎(本地SO庫)為例,在使用手機(jī)管家程序的過程中,可以檢測手機(jī)管家程序中的病毒查殺引擎是否為最新版本,當(dāng)檢測出手機(jī)管家程序中的病毒查殺引擎不是最新版本時,則確定需要更新手機(jī)管家程序中的病毒查殺引擎。
      [0027]在確定虛擬機(jī)中應(yīng)用程序的本地模塊需要更新時,虛擬機(jī)可以通過獲取單元10獲取更新本地模塊的更新模塊。具體地,首先獲取更新模塊的路徑信息,然后基于該路徑信息獲取更新模塊,以便于使用該更新模塊對本地模塊進(jìn)行更新。以移動通訊終端中應(yīng)用程序如手機(jī)管家程序的病毒查殺引擎(本地SO庫)為例,在確定需要更新手機(jī)管家程序中的病毒查殺引擎時,可以獲取最新版本的病毒查殺引擎,通過將最新版本的病毒查殺引擎替換當(dāng)前病毒查殺引擎,完成對病毒查殺引擎的更新。
      [0028]調(diào)用單元30用于調(diào)用應(yīng)用程序中預(yù)先加載的代理模塊。
      [0029]代理模塊可以是在虛擬機(jī)與被調(diào)用的本地模塊之間增加的一個模塊,代理模塊可以是通過虛擬機(jī)的本地代碼實現(xiàn)的模塊。代理模塊可以用于動態(tài)加載和卸載本地模塊,并且保存有本地模塊的操作句柄和所有的符號地址。通過預(yù)先加載該代理模塊,可以在更新本地模塊的過程中,通過代理模塊動態(tài)加載或者卸載本地模塊,并且應(yīng)用程序可以通過代理模塊實現(xiàn)本地模塊的功能,從而不影響應(yīng)用程序運行。
      [0030]代理模塊與本地模塊之間的關(guān)系如圖2所示,代理模塊和本地模塊可以通過本地(Native)代碼實現(xiàn),其中,代理模塊保存有本地模塊的操作句柄和本地模塊所有的符號地址,代理模塊中具有與本地模塊中相同的符號地址表,并通過提供1adO和unloadO兩個靜態(tài)方法,供虛擬機(jī)調(diào)用,虛擬機(jī)可以通過本地接口調(diào)用代理模塊。
      [0031]通過代理模塊可以對dlopenO和dlcloseO兩個庫函數(shù)進(jìn)行封裝,分別得到load O和unloadO兩個靜態(tài)方法供虛擬機(jī)調(diào)用。由于JVM等虛擬機(jī)本身有一套資源回收機(jī)制,開發(fā)者在使用虛擬機(jī)開發(fā)應(yīng)用程序完成后,不需要手動卸載本地SO庫?;谏鲜鲈?Java并沒有提供類似System, unload O的方法,使得在更新本地模塊時,無法對本地模塊進(jìn)行卸載,在對應(yīng)用程序的本地模塊進(jìn)行更新過程中,需要重啟應(yīng)用程序,導(dǎo)致應(yīng)用程序的本地模塊更新不便,影響用戶體驗。代理模塊通過對dlcloseO庫函數(shù)進(jìn)行封裝,得到unload O函數(shù),使得在對應(yīng)用程序的本地模塊進(jìn)行更新時,可以通過調(diào)用該unloadO函數(shù)以對本地模塊進(jìn)行卸載,以便于完成對本地模塊的更新,而不用重啟應(yīng)用程序。
      [0032]代理模塊可以采用一個全局變量保存被調(diào)用的本地模塊的操作句柄gHandle,同時維護(hù)了一個本地模塊的符號地址表,即,將本地模塊的函數(shù)對應(yīng)的符號地址存儲在一張表中,得到符號地址表,如圖2所示,該符號地址表與本地模塊中的符號地址表相同,且代理模塊的符號地址表中的符號地址與本地模塊的符號地址表中的符號地址一一
      當(dāng)前第1頁1 2 3 4 5 
      網(wǎng)友詢問留言 已有0條留言
      • 還沒有人留言評論。精彩留言會獲得點贊!
      1