專利名稱:插件加載方法及系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
本申請(qǐng)涉及計(jì)算機(jī)數(shù)據(jù)處理技術(shù)領(lǐng)域,特別是涉及一種插件加載方法及系統(tǒng)。
背景技術(shù):
在軟件開發(fā)中,為了方便對(duì)軟件進(jìn)行功能擴(kuò)展,往往采用插件方式進(jìn)行開發(fā),將軟件所能實(shí)現(xiàn)的一個(gè)一個(gè)功能封裝在插件中,最后將各個(gè)插件集成在軟件主程序包中,通過與主程序代碼文件一同發(fā)布實(shí)現(xiàn)插件的加載。由于現(xiàn)有的很多操作系統(tǒng),例如Android系統(tǒng),都具有開源性,很多基于這些開源性操作系統(tǒng)的終端廠商會(huì)對(duì)原生系統(tǒng)進(jìn)行適應(yīng)性的修改以實(shí)現(xiàn)終端的多樣性,滿足市場(chǎng)需求。這就可能出現(xiàn)同時(shí)存在基于不同版本修改的多種操作系統(tǒng),因?yàn)椴寮切枰诓僮飨到y(tǒng)開發(fā),所以,當(dāng)某個(gè)插件在基于某個(gè)操作系統(tǒng)的某個(gè)版本開發(fā)后,若該操作系統(tǒng)出現(xiàn)了 多種版本,那么通過現(xiàn)有的插件加載方法就無(wú)法保證該插件被加載后在該操作系統(tǒng)的其他版本上正常運(yùn)行,即可能出現(xiàn)安裝后的插件無(wú)法正常使用的情況。因此,現(xiàn)有的插件加載方法無(wú)法滿足常見的開源性的操作系統(tǒng)。
發(fā)明內(nèi)容
本申請(qǐng)?zhí)峁┮环N插件加載方法及系統(tǒng),能夠插件加載后無(wú)法正常適用以及與開源性操作系統(tǒng)無(wú)法很好適配的問題。為了解決上述問題,本申請(qǐng)公開了一種插件加載方法,包括收集操作系統(tǒng)平臺(tái)信息,所述操作系統(tǒng)平臺(tái)信息包括操作系統(tǒng)版本、安裝所述操作系統(tǒng)的終端廠商信息、終端型號(hào);將所述操作系統(tǒng)平臺(tái)信息傳給服務(wù)器;服務(wù)器依據(jù)所述操作系統(tǒng)版本、安裝所述操作系統(tǒng)的終端廠商信息、終端型號(hào)確定當(dāng)前匹配的操作系統(tǒng),并提取所述操作系統(tǒng)適配的插件;服務(wù)器返回所述插件下載地址;根據(jù)所述插件下載地址下載所述插件;加載所述下載的插件。優(yōu)選地,所述收集操作系統(tǒng)平臺(tái)信息包括在需要進(jìn)行插件加載之前收集并存儲(chǔ)在操作系統(tǒng)中,當(dāng)需要時(shí)直接提取所述操作系統(tǒng)平臺(tái)信息;或在需要進(jìn)行插件加載時(shí)實(shí)時(shí)收集。優(yōu)選地,所述服務(wù)器依據(jù)操作系統(tǒng)版本、安裝所述操作系統(tǒng)的終端廠商信息、終端型號(hào)確定當(dāng)前匹配的操作系統(tǒng),并提取所述操作系統(tǒng)適配的插件的步驟包括將所述操作系統(tǒng)版本、安裝所述操作系統(tǒng)的終端廠商信息、終端型號(hào)與預(yù)先收集的操作系統(tǒng)的特征信息進(jìn)行匹配比較,找到匹配的操作系統(tǒng);根據(jù)預(yù)先收集的操作系統(tǒng)與插件的對(duì)應(yīng)關(guān)系,確定與所述操作系統(tǒng)適配的插件。
優(yōu)選地,在所述根據(jù)所述插件下載地址下載所述插件之后還包括驗(yàn)證所述下載得到的插件的合法性,若驗(yàn)證通過,則加載所述下載的插件。優(yōu)選地,所述驗(yàn)證所述下載得到的插件的合法性包括創(chuàng)建所述插件的MD5值;使用所述插件的公鑰解密所述插件中被加密的MD5值;比較所述解密的MD5值和所述新創(chuàng)建的MD5值是否匹配,如果匹配,則驗(yàn)證通過,如果不匹配,則驗(yàn)證不通過;優(yōu)選地,所述操作系統(tǒng)為Android系統(tǒng)。優(yōu)選地,所述加載所述下載的插件的步驟之后,還包括 根據(jù)升級(jí)協(xié)議來(lái)增加新插件,刪除所述插件和/或更新所述插件。優(yōu)選地,所述增加新插件的步驟為,在所述操作系統(tǒng)平臺(tái)信息中加入新插件的結(jié)構(gòu)信息,并由客戶端下載所述插件;和/或,所述刪除插件的步驟為,將待刪除插件的狀態(tài)置為不可用;和/或,所述更新插件的步驟為,將新版本插件的版本號(hào)與下載地址置于插件的特征信息中。本申請(qǐng)實(shí)施例還公開了一種插件加載系統(tǒng),包括信息收集模塊,用于收集操作系統(tǒng)平臺(tái)信息,所述操作系統(tǒng)平臺(tái)信息包括操作系統(tǒng)版本、安裝所述操作系統(tǒng)的終端廠商信息、終端型號(hào);信息發(fā)送模塊,用于將所述操作系統(tǒng)平臺(tái)信息傳給服務(wù)器;位于服務(wù)器的匹配提取模塊,用于依據(jù)所述操作系統(tǒng)版本、安裝所述操作系統(tǒng)的終端廠商信息、終端型號(hào)確定當(dāng)前匹配的操作系統(tǒng),并提取所述操作系統(tǒng)適配的插件;位于服務(wù)器的信息接收模塊,用于返回所述插件下載地址;插件下載模塊,用于根據(jù)所述插件下載地址下載所述插件;加載模塊,用于加載所述下載的插件。優(yōu)選地,所述位于服務(wù)器的信息接收模塊包括信息匹配子模塊,用于將所述操作系統(tǒng)版本、安裝所述操作系統(tǒng)的終端廠商信息、終端型號(hào)與預(yù)先收集的操作系統(tǒng)的特征信息進(jìn)行匹配,找到匹配的操作系統(tǒng);和插件選取子模塊,用于根據(jù)預(yù)先收集的操作系統(tǒng)與插件的對(duì)應(yīng)關(guān)系,確定與所述操作系統(tǒng)適配的插件。優(yōu)選地,所述系統(tǒng)還包括驗(yàn)證模塊,用于驗(yàn)證所述插件下載模塊下載得到的插件的合法性,若驗(yàn)證通過,則加載所述下載的插件。優(yōu)選地,所述驗(yàn)證模塊包括創(chuàng)建特征值子模塊,用于創(chuàng)建所述插件的MD5值;解密特征值子模塊,用于將所述插件中被加密的MD5值使用所述插件的公鑰進(jìn)行解密;比較子模塊,用于比較所述解密的MD5值和所述新創(chuàng)建的MD5值是否匹配,如果匹配,則驗(yàn)證通過,如果不匹配,則驗(yàn)證不通過。優(yōu)選地,所述系統(tǒng)還包括
升級(jí)模塊,用于加載所述下載的插件之后,根據(jù)升級(jí)協(xié)議來(lái)增加新插件,刪除所述插件和更新所述插件。與現(xiàn)有技術(shù)相比,本申請(qǐng)包括以下優(yōu)點(diǎn)本申請(qǐng)的插件加載方法及系統(tǒng)通過將操作系統(tǒng)所在終端平臺(tái)的信息進(jìn)行收集,并發(fā)送給服務(wù)器進(jìn)行比較后,由服務(wù)器選取適合當(dāng)前操作系統(tǒng)的插件包,即插件包的選取具有針對(duì)性,為動(dòng)態(tài)過程,從而使加載的插件與加載插件的操作系統(tǒng)能夠兼容,保證加載的插件能夠正常運(yùn)行,從而更適用于各種開源性的操作系統(tǒng),減少了適配開發(fā)的工作量。當(dāng)然,實(shí)施本申請(qǐng)的任一產(chǎn)品不一定需要同時(shí)達(dá)到以上所述的所有優(yōu)點(diǎn)。
為了更清楚地說明本申請(qǐng)實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對(duì)實(shí)施例中所需要使用的附圖作簡(jiǎn)單地介紹,顯而易見地,下面描述中的附圖僅僅是本申請(qǐng)的一些實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員來(lái)講,在不付出創(chuàng)造性勞動(dòng)的前提下,還可以根據(jù)這些附圖獲 得其他的附圖。圖I是本申請(qǐng)的插件加載方法實(shí)施例一的流程圖;圖2是本申請(qǐng)的插件加載方法實(shí)施例二的流程圖;圖3是本申請(qǐng)的插件加載方法實(shí)例的流程圖;圖4是本申請(qǐng)的插件加載系統(tǒng)實(shí)施例一的結(jié)構(gòu)示意圖;圖5是本申請(qǐng)的插件加載系統(tǒng)實(shí)施例二的結(jié)構(gòu)示意圖。
具體實(shí)施例方式下面將結(jié)合本申請(qǐng)實(shí)施例中的附圖,對(duì)本申請(qǐng)實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例僅僅是本申請(qǐng)一部分實(shí)施例,而不是全部的實(shí)施例?;诒旧暾?qǐng)中的實(shí)施例,本領(lǐng)域普通技術(shù)人員所獲得的所有其他實(shí)施例,都屬于本申請(qǐng)保護(hù)的范圍。參照?qǐng)D1,示出本申請(qǐng)的一種插件加載方法實(shí)施例一,包括以下步驟步驟101,收集操作系統(tǒng)平臺(tái)信息,所述操作系統(tǒng)平臺(tái)信息包括操作系統(tǒng)版本、安裝所述操作系統(tǒng)的終端廠商信息、終端型號(hào)。操作系統(tǒng)平臺(tái)信息可以在需要進(jìn)行插件加載之前收集并存儲(chǔ)在操作系統(tǒng)中,當(dāng)需要時(shí)直接提取所述操作系統(tǒng)平臺(tái)信息即可。例如,在插件加載系統(tǒng)被安裝于當(dāng)前操作系統(tǒng)中時(shí)就進(jìn)行收集。操作系統(tǒng)平臺(tái)信息也可以在需要進(jìn)行插件加載時(shí),實(shí)時(shí)收集。操作系統(tǒng)平臺(tái)信息包括操作系統(tǒng)版本、安裝所述操作系統(tǒng)的終端廠商信息、終端型號(hào)等能夠表示當(dāng)前操作系統(tǒng)的特征信息。因?yàn)槟承┎僮飨到y(tǒng)的開源性特點(diǎn),很多操作系統(tǒng)在被使用到某些終端時(shí)已經(jīng)經(jīng)過了二次開發(fā),例如,Android系統(tǒng)。通過對(duì)操作系統(tǒng)平臺(tái)信息的收集,可以能夠準(zhǔn)確的對(duì)操作系統(tǒng)的特征進(jìn)行表述,從而確定適合當(dāng)前操作系統(tǒng)的插件。步驟102,將所述操作系統(tǒng)平臺(tái)信息傳給服務(wù)器。為了獲得配所述操作系統(tǒng)的適配插件,需要將所述操作系統(tǒng)平臺(tái)信息,即操作系統(tǒng)版本、安裝所述操作系統(tǒng)的終端廠商信息和終端型號(hào)等信息傳遞給服務(wù)器,由服務(wù)器進(jìn)行下一步的操作。步驟103,服務(wù)器依據(jù)所述操作系統(tǒng)版本、安裝所述操作系統(tǒng)的終端廠商信息、終端型號(hào)確定當(dāng)前匹配的操作系統(tǒng),并提取所述操作系統(tǒng)適配的插件。具體的,服務(wù)器中預(yù)先收集了各種可能出現(xiàn)的操作系統(tǒng)特征信息以及對(duì)應(yīng)的插件信息。通過將操作系統(tǒng)平臺(tái)信息與這些預(yù)先收集的特征信息進(jìn)行匹配比較,找到與操作系統(tǒng)平臺(tái)信息匹配的特征信息,與所述特征信息對(duì)應(yīng)的插件即為適合當(dāng)前操作系統(tǒng)的插件。步驟104,服務(wù)器返回所述插件下載地址。獲得所述操作系統(tǒng)適配的插件之后,服務(wù)器可以將插件下載地址返回給插件加載系統(tǒng)。例如,服務(wù)器可以返回插件的配置結(jié)構(gòu),其中包括了 url節(jié)點(diǎn),該url節(jié)點(diǎn)即為該插件的下載地址。步驟105,根據(jù)所述插件下載地址下載所述插件。 下載所述插件可以由插件動(dòng)態(tài)記載系統(tǒng)完成。另外,也可以由插件加載系統(tǒng)將下載地址傳遞給需要加載插件的主程序,由所述主程序根據(jù)下載地址下載所述插件。步驟106,加載所述下載的插件??梢岳斫猓虞d插件可以采用常見的加載方法,例如,采用系統(tǒng)提供的類加載器,如引導(dǎo)加載器(Bootstrap class loader)、擴(kuò)展加載器(Extensions class loader)、系統(tǒng)加載器等等。可以理解,加載插件還可以采用自定的類加載器來(lái)實(shí)現(xiàn)加載。例如,通過繼承java. lang. ClassLoader類的方式實(shí)現(xiàn)的類加載器,從而滿足特殊的需求。具體的加載過程本申請(qǐng)對(duì)此并不限制。優(yōu)選地,本申請(qǐng)采用DexClassLoader類來(lái)進(jìn)行插件的加載,在加載過程中在插件的根目錄生成與插件同名的Dex文件。優(yōu)選地,在加載過程中,會(huì)將插件中的實(shí)例賦予給主程序內(nèi)公開的接口,從而使后續(xù)對(duì)插件使用時(shí),可以直接通過該接口來(lái)調(diào)用插件的實(shí)例,從而避免使用反射機(jī)制來(lái)實(shí)現(xiàn)實(shí)例的調(diào)用,簡(jiǎn)化了調(diào)用流程。參照?qǐng)D2,示出本申請(qǐng)的插件加載方法實(shí)施例二,在實(shí)施例一的步驟105和106之間還包括如下步驟步驟201,驗(yàn)證所述下載得到的插件的合法性。因?yàn)橄螺d的插件可以能會(huì)被非法篡改,也可能在網(wǎng)絡(luò)傳輸過程中出現(xiàn)數(shù)據(jù)錯(cuò)誤,為了保證插件的正常使用,避免因?yàn)槌霈F(xiàn)異常而導(dǎo)致反復(fù)下載或加載而增加的時(shí)間成本和流程成本,可以在處理中增加驗(yàn)證插件的合法性步驟。驗(yàn)證下載得到的插件的合法性可以通過多種方法來(lái)實(shí)現(xiàn),例如,比較下載得到的插件和合法插件的特征值是否相同等等。本申請(qǐng)采用如下方式來(lái)驗(yàn)證Sll,創(chuàng)建所述插件的MD5值;S12,使用所述插件的公鑰解密所述插件中被加密的MD5值;S13,比較所述解密的MD5值和所述新創(chuàng)建的MD5值是否匹配,如果匹配,則驗(yàn)證通過,如果不匹配,則驗(yàn)證不通過。具體的,本申請(qǐng)實(shí)施例中通過MD5算法(Message Digest AlgorithmMD5,消息摘要算法第五版)計(jì)算出所述下載得到的插件的唯一 hash (哈希)值,即MD5值。MD5算法的典型應(yīng)用是對(duì)一段信息(Message)產(chǎn)生信息摘要(Message-Digest),以防止被篡改。MD5算法將整個(gè)文件當(dāng)作一個(gè)大文本信息,通過其不可逆的字符串變換算法,產(chǎn)生了這個(gè)唯一的MD5信息摘要。當(dāng)然,本領(lǐng)域技術(shù)人員根據(jù)實(shí)際情況采用其它算法計(jì)算可執(zhí)行文件的哈希值均是可行的,例如采用sha-l、RIPEMD以及Haval等算法,本申請(qǐng)對(duì)此無(wú)需加以限制。數(shù)字簽名(Digital Signature)是使用數(shù)字證書來(lái)識(shí)別軟件的發(fā)布商和使用hash算法來(lái)確保軟件的完整性一種技術(shù)。在Windows操作系統(tǒng)中,微軟認(rèn)證碼技術(shù)使用Windows受信任的根證書頒發(fā)機(jī)構(gòu)頒發(fā)的代碼簽名證書,對(duì)軟件代碼進(jìn)行數(shù)字簽名,從而保證了軟件代碼來(lái)自真實(shí)的發(fā)行者和保證軟件代碼沒有被非法篡改。軟件代碼數(shù)字簽名仍然采用PKI (Public Key Infrastructure,公鑰基礎(chǔ)設(shè)施)雙鑰技術(shù),整個(gè)數(shù)字簽名過程是,數(shù)據(jù)源發(fā)送方使用自己的私鑰對(duì)數(shù)據(jù)校驗(yàn)和或其他與數(shù)據(jù)內(nèi)容有關(guān)的變量進(jìn)行加密處理,完成對(duì)數(shù)據(jù)的合法“簽名”,數(shù)據(jù)接收方則利用對(duì)方的公鑰來(lái)解讀收到的“數(shù)字簽名”,并將解讀結(jié)果用于對(duì)數(shù)據(jù)完整性的檢驗(yàn),以確認(rèn)簽名的合法性。
舉例而言,生成數(shù)字簽名的過程為I)對(duì)要簽名的所述插件創(chuàng)建MD5值;2)使用所述插件的私鑰來(lái)加密上述MD5值;3)將被加密的MD5值和所述插件的數(shù)字證書插入到要簽名的所述插件。相應(yīng)地,數(shù)字簽名的驗(yàn)證過程為I)對(duì)要驗(yàn)證的所述插件創(chuàng)建MD5值;2)使用所述插件的公鑰來(lái)解密被加密的MD5值;3)比較解密的MD5值和新創(chuàng)建的MD5值,如果匹配說明所述插件驗(yàn)證通過,反之,則說明驗(yàn)證未通過。若驗(yàn)證通過,則可以進(jìn)行后續(xù)加載步驟,若驗(yàn)證未通過,則停止加載。優(yōu)選地,在停止加載后,還可以增加相應(yīng)的處理步驟。例如,重新請(qǐng)求服務(wù)器匹配,或者給出其它的下載地址重新下載插件等等,并重復(fù)驗(yàn)證,直到驗(yàn)證通過。在實(shí)施例一的步驟106之后,還包括以下步驟步驟202,根據(jù)升級(jí)協(xié)議來(lái)增加新插件,刪除所述插件和更新所述插件。步驟202中所述增加新插件還包括以下子步驟S21,在所述操作系統(tǒng)平臺(tái)信息中加入新插件的結(jié)構(gòu)信息,并由客戶端下載所述插件。步驟202中所述刪除插件還包括以下子步驟S22,將待刪除插件的狀態(tài)置為不可用。步驟202中所述更新插件還包括以下子步驟S23,將新版本插件的版本號(hào)與下載地址置于插件的特征信息中。因?yàn)榻K端與服務(wù)器端已經(jīng)定義了升級(jí)協(xié)議,可以根據(jù)升級(jí)協(xié)議來(lái)控制插件的增力口,刪除和更新。對(duì)于增加新插件,可以再返回終端客戶端,在所述操作系統(tǒng)平臺(tái)信息中加入新插件的結(jié)構(gòu)信息,并由客戶端下載所述插件。對(duì)于刪除所述插件,可以將待刪除插件的狀態(tài)置為不可用。例如,在接口配置中可以設(shè)置要?jiǎng)h除的結(jié)點(diǎn)中的enable結(jié)點(diǎn)為O。對(duì)于更新所述插件,可以將新版本插件的版本號(hào)與下載地址置于插件的特征信息中,更新所述插件。
參照?qǐng)D3,示出本申請(qǐng)的插件加載方法具體實(shí)例的流程圖。本實(shí)例中,以終端平臺(tái)中的Android系統(tǒng)為例進(jìn)行說明。首先,在終〗而平臺(tái)的Android系統(tǒng)中啟動(dòng)插件加載系統(tǒng)軟件。插件加載系統(tǒng)的啟動(dòng)可以根據(jù)主程序提出加載插件請(qǐng)求來(lái)啟動(dòng)。插件加載系統(tǒng)在啟動(dòng)后,會(huì)收集當(dāng)前終端平臺(tái)中Android系統(tǒng)的平臺(tái)信息,這些信息包括Android的版本,終端廠商信息,終端型號(hào)等。本步驟可以通過構(gòu)造配置接口的方式來(lái)實(shí)現(xiàn),接口中包含有數(shù)據(jù)節(jié)點(diǎn),具體包括plugins節(jié)點(diǎn)、plugin 結(jié)點(diǎn)、type 結(jié)點(diǎn)、version 結(jié)點(diǎn)、Platform 結(jié)點(diǎn)、model 結(jié)點(diǎn) sdk-version 結(jié)點(diǎn)、hardware結(jié)點(diǎn)和Host_version結(jié)點(diǎn)。其中,plugins為插件結(jié)點(diǎn),在該結(jié)點(diǎn)中包含了主程序當(dāng)前安裝過的所有插件的信息;plugin結(jié)點(diǎn)是具體的插件的信息,在plugins結(jié)點(diǎn)中可以包含多個(gè)plugin結(jié)點(diǎn)。type結(jié)點(diǎn)為該插件的類型編號(hào);version結(jié)點(diǎn)為該插件的版本號(hào);Platform結(jié)點(diǎn)是系統(tǒng)平臺(tái)的參數(shù);model結(jié)點(diǎn)為該終端的型號(hào);sdk_version結(jié)點(diǎn)為該終端的android的版本!hardware結(jié)點(diǎn)為該終端采用的解決方案;Host_version結(jié)點(diǎn)為該終端安裝的主程序的版本。插件加載系統(tǒng)在收集完Android系統(tǒng)的平臺(tái)信息后,需要將這些數(shù)據(jù)傳至云端服 務(wù)器。云端服務(wù)器根據(jù)接收的數(shù)據(jù)在數(shù)據(jù)庫(kù)中進(jìn)行比較匹配,找到與當(dāng)前數(shù)據(jù)匹配的插件,并將插件相關(guān)信息返回給插件加載系統(tǒng),例如,插件下載地址等等。本步驟的具體實(shí)現(xiàn)也可以通過構(gòu)造接口的方式來(lái)實(shí)現(xiàn)數(shù)據(jù)交互,過程如下當(dāng)服務(wù)器端得到插件請(qǐng)求后,根據(jù)platform的參數(shù)和請(qǐng)求的插件的type判斷該目前該類型插件是否需要升級(jí),并返回結(jié)果。返回的結(jié)果的數(shù)據(jù)接口的結(jié)點(diǎn)具體為plugins是所有插件的根節(jié)點(diǎn),plugin是插件的具體信息。enable結(jié)點(diǎn)為該插件是否還有效,用于終止使用特定插件。type, version與請(qǐng)求接口中的結(jié)點(diǎn)相同。must-update結(jié)點(diǎn)代表該插件必須升級(jí)才能正常使用。description結(jié)點(diǎn)為該版本結(jié)點(diǎn)的說明信息,url結(jié)點(diǎn)為該插件的下載地址。終端在接收插件下載地址后,會(huì)將下載地址轉(zhuǎn)給提出加載插件請(qǐng)求的主程序,然后由主程序根據(jù)下載地址下載所述插件。在插件被下載完成后,首先需要對(duì)其進(jìn)行合法性驗(yàn)證,以避免插件被惡意篡改,或在網(wǎng)絡(luò)傳輸過程中數(shù)據(jù)出錯(cuò)。具體步驟為創(chuàng)建所述插件的MD5值;使用所述插件的公鑰解密所述插件中被加密的MD5值;比較所述解密的MD5值和所述新創(chuàng)建的MD5值是否匹配。如果匹配,則驗(yàn)證通過,繼續(xù)后續(xù)加載步驟。如果不匹配,則驗(yàn)證不通過,返回錯(cuò)誤(ERROR),停止加載;當(dāng)驗(yàn)證該插件的合法性后,就可以通過實(shí)用反射機(jī)制加載該插件。以加載實(shí)現(xiàn)了PluginEnv接口的PluginEnvImpl類為例,一般分以下幾個(gè)步驟使用DexClassLoader類加載插件,獲取Class對(duì)象。DexClassLoader在加載過程中會(huì)在插件目錄生成同名的Dex文件;通過class實(shí)例化對(duì)象。其中,因?yàn)槭窃贏ndroid系統(tǒng)中加載的插件,其格式為在Android系統(tǒng)終端平臺(tái)能夠安裝的格式APK (Android Package),使用DexClassLoader類加載插件的具體加載過程如下首先將Apk文件復(fù)制到data/app目錄下;解壓Apk文件并掃描插件,將其中的classes, dex安裝至data/dalvik-cache目錄下;
在data/data目錄下創(chuàng)建對(duì)應(yīng)的應(yīng)用數(shù)據(jù)目錄。使用Dalvik虛擬機(jī)運(yùn)行· dex文件。在Android系統(tǒng)手機(jī)平臺(tái)上使用經(jīng)過優(yōu)化的Dalvik虛擬機(jī),它能夠運(yùn)行Java平臺(tái)應(yīng)用程序,這些應(yīng)用程序被轉(zhuǎn)換成緊湊的Dalvik可執(zhí)行格式Cdex文件),該格式適合內(nèi)存和處理速度受限的系統(tǒng)。Davlik虛擬機(jī)使用DexClassLoader通過反射機(jī)制加載dex文件并創(chuàng)建類的實(shí)例。至此插件已經(jīng)加載完畢,主程序調(diào)用功能時(shí)可以使用接口類直接調(diào)用插件內(nèi)的實(shí)例。通過前述兩個(gè)步驟可以獲取PluginEnv的實(shí)例化對(duì)象,就可以在主程序中當(dāng)做普通的Java類來(lái)使用了。當(dāng)實(shí)現(xiàn)類中構(gòu)造函數(shù)有參數(shù)時(shí),也可以通過c. getConstructors O來(lái)獲取構(gòu)造函數(shù),以此實(shí)例化類。 優(yōu)選地,還可以對(duì)插件進(jìn)行更新,例如增加、刪除和修改。因?yàn)榻K端與服務(wù)器端已經(jīng)定義了升級(jí)協(xié)議,可以根據(jù)升級(jí)協(xié)議來(lái)控制插件的增加,刪除和修改。對(duì)于增加新插件,可以再返回終端請(qǐng)求的接口 plugins結(jié)點(diǎn)中加入新的插件結(jié)構(gòu)信息,并通過終端下載運(yùn)行;對(duì)于刪除插件,在接口配置中可以設(shè)置要?jiǎng)h除的Plugin結(jié)點(diǎn)中的enable結(jié)點(diǎn)為O ;對(duì)于更新插件,在接口配置中可以設(shè)置新版本插件的版本號(hào)與下載地址即可。參照?qǐng)D4,示出本申請(qǐng)的插件加載系統(tǒng)實(shí)施例一,包括信息收集模塊10、信息發(fā)送模塊20、位于服務(wù)器的匹配提取模塊30、位于服務(wù)器的信息接收模塊40、插件下載模塊50和加載模塊60。信息收集模塊10,用于收集操作系統(tǒng)平臺(tái)信息,所述操作系統(tǒng)平臺(tái)信息包括操作系統(tǒng)版本、安裝所述操作系統(tǒng)的終端廠商信息、終端型號(hào)。優(yōu)選地,所述信息收集模塊收集的操作系統(tǒng)平臺(tái)信息包括在需要進(jìn)行插件加載之前收集并存儲(chǔ)在操作系統(tǒng)中,當(dāng)需要時(shí)直接提取所述操作系統(tǒng)平臺(tái)信息;或在需要進(jìn)行插件加載時(shí)實(shí)時(shí)收集。信息發(fā)送模塊20,用于將所述操作系統(tǒng)平臺(tái)信息傳給服務(wù)器。位于服務(wù)器的匹配提取模塊30,依據(jù)所述操作系統(tǒng)版本、安裝所述操作系統(tǒng)的終端廠商信息、終端型號(hào)確定當(dāng)前匹配的操作系統(tǒng),并提取所述操作系統(tǒng)適配的插件。優(yōu)選地,所述服務(wù)器包括信息匹配子模塊和插件選取子模塊,其中,信息匹配子模塊,用于將所述操作系統(tǒng)版本、安裝所述操作系統(tǒng)的終端廠商信息、終端型號(hào)與預(yù)先收集的操作系統(tǒng)的特征信息進(jìn)行匹配,找到匹配的操作系統(tǒng);插件選取子模塊,用于根據(jù)預(yù)先收集的操作系統(tǒng)與插件的對(duì)應(yīng)關(guān)系,確定與所述操作系統(tǒng)適配的插件。位于服務(wù)器的信息接收模塊40,用于返回所述插件下載地址;插件下載模塊50,用于根據(jù)所述插件下載地址下載所述插件;加載模塊60,用于加載所述下載的插件。參照?qǐng)D5,示出本申請(qǐng)的插件加載系統(tǒng)實(shí)施例二,該系統(tǒng)還包括驗(yàn)證模塊70,用于驗(yàn)證所述插件下載模塊下載得到的插件的合法性,若驗(yàn)證通過,則加載所述下載的插件。優(yōu)選地,驗(yàn)證模塊可以包括創(chuàng)建特征值子模塊、解密特征值子模塊和比較子模塊。其中,所述創(chuàng)建特征值子模塊,用于創(chuàng)建所述插件的MD5值。所述解密特征值子模塊,用于將所述插件中被加密的MD5值使用所述插件的公鑰進(jìn)行解密。所述比較子模塊,用于比較所述解密的MD5值和所述新創(chuàng)建的MD5值是否匹配,如果匹配,則驗(yàn)證通過,如果不匹配,則驗(yàn)證不通過。本申請(qǐng)優(yōu)選的實(shí)施例中,所述系統(tǒng)還可以包括升級(jí)模塊80,用于加載所述下載的插件之后,根據(jù)升級(jí)協(xié)議來(lái)增加新插件,刪除所述插件和更新所述插件。具體而言,所述升級(jí)模塊80中可以包括以下子模塊增加插件子模塊801,用于在所述操作系統(tǒng)平臺(tái)信息中加入新插件的結(jié)構(gòu)信息,并由客戶端下載所述插件;刪除插件子模塊802,用于將待刪除插件的狀態(tài)置為不可用;更新插件子模塊803,用于將新版本插件的版本號(hào)與下載地址置于插件的特征信息中。
本申請(qǐng)的插件加載方法及系統(tǒng)通過將操作系統(tǒng)所在終端平臺(tái)的信息進(jìn)行收集,并發(fā)送給服務(wù)器進(jìn)行比較后,由服務(wù)器選取適合當(dāng)前操作系統(tǒng)的插件包,即插件包的選取具有針對(duì)性,為動(dòng)態(tài)過程,從而使加載的插件與加載插件的操作系統(tǒng)能夠兼容,保證加載的插件能夠正常運(yùn)行,從而更適用于各種開源性的操作系統(tǒng),減少了適配開發(fā)的工作量。其次,在加載過程中,會(huì)將插件中的實(shí)例賦予給主程序內(nèi)公開的接口,從而使后續(xù)對(duì)插件使用時(shí),可以直接通過該接口來(lái)調(diào)用插件的實(shí)例,從而避免使用反射機(jī)制來(lái)實(shí)現(xiàn)實(shí)例的調(diào)用,簡(jiǎn)化了調(diào)用流程。另外,在前述插件被加載后,因?yàn)榻K端與服務(wù)器端已經(jīng)定義了升級(jí)協(xié)議,可以根據(jù)升級(jí)協(xié)議來(lái)控制插件的增加,刪除和修改。對(duì)于增加新插件,可以在所述操作系統(tǒng)平臺(tái)信息中加入新插件的結(jié)構(gòu)信息,并由客戶端下載所述插件。對(duì)于刪除插件,可以將待刪除插件的狀態(tài)置為不可用。對(duì)于更新插件,可以將新版本插件的版本號(hào)與下載地址置于插件的特征信息中。因此,本申請(qǐng)的插件加載方法及系統(tǒng)可以在不更新主程序的情況下,可以實(shí)現(xiàn)主程序在具有差異性的操作系統(tǒng)終端上的正確運(yùn)行,提高了主程序的兼容性,減少了適配開發(fā)的工作量。對(duì)于裝置實(shí)施例而言,由于其基本相似于方法實(shí)施例,所以描述得比較簡(jiǎn)單,相關(guān)之處參見方法實(shí)施例的部分說明即可。在此提供的算法和顯示不與任何特定計(jì)算機(jī)、虛擬系統(tǒng)或者其它設(shè)備固有相關(guān)。各種通用系統(tǒng)也可以與基于在此的示教一起使用。根據(jù)上面的描述,構(gòu)造這類系統(tǒng)所要求的結(jié)構(gòu)是顯而易見的。此外,本發(fā)明也不針對(duì)任何特定編程語(yǔ)言。應(yīng)當(dāng)明白,可以利用各種編程語(yǔ)言實(shí)現(xiàn)在此描述的本發(fā)明的內(nèi)容,并且上面對(duì)特定語(yǔ)言所做的描述是為了披露本發(fā)明的最佳實(shí)施方式。在此處所提供的說明書中,說明了大量具體細(xì)節(jié)。然而,能夠理解,本發(fā)明的實(shí)施例可以在沒有這些具體細(xì)節(jié)的情況下實(shí)踐。在一些實(shí)例中,并未詳細(xì)示出公知的方法、結(jié)構(gòu)和技術(shù),以便不模糊對(duì)本說明書的理解。類似地,應(yīng)當(dāng)理解,為了精簡(jiǎn)本公開并幫助理解各個(gè)發(fā)明方面中的一個(gè)或多個(gè),在上面對(duì)本發(fā)明的示例性實(shí)施例的描述中,本發(fā)明的各個(gè)特征有時(shí)被一起分組到單個(gè)實(shí)施例、圖、或者對(duì)其的描述中。然而,并不應(yīng)將該公開的方法解釋成反映如下意圖即所要求保護(hù)的本發(fā)明要求比在每個(gè)權(quán)利要求中所明確記載的特征更多的特征。更確切地說,如下面的權(quán)利要求書所反映的那樣,發(fā)明方面在于少于前面公開的單個(gè)實(shí)施例的所有特征。因此,遵循具體實(shí)施方式
的權(quán)利要求書由此明確地并入該具體實(shí)施方式
,其中每個(gè)權(quán)利要求本身都作為本發(fā)明的單獨(dú)實(shí)施例。本領(lǐng)域那些技術(shù)人員可以理解,可以對(duì)實(shí)施例中的設(shè)備中的模塊進(jìn)行自適應(yīng)性地改變并且把它們?cè)O(shè)置在與該實(shí)施例不同的一個(gè)或多個(gè)設(shè)備中??梢园褜?shí)施例中的模塊或單元或組件組合成一個(gè)模塊或單元或組件,以及此外可以把它們分成多個(gè)子模塊或子單元或子組件。除了這樣的特征和/或過程或者單元中的至少一些是相互排斥之外,可以采用任何組合對(duì)本說明書(包括伴隨的權(quán)利要求、摘要和附圖)中公開的所有特征以及如此公開的任何方法或者設(shè)備的所有過程或單元進(jìn)行組合。除非另外明確陳述,本說明書(包括伴隨的權(quán)利要求、摘要和附圖)中公開的每個(gè)特征可以由提供相同、等同或相似目的的替代特征來(lái)代替。此外,本領(lǐng)域的技術(shù)人員能夠理解,盡管在此所述的一些實(shí)施例包括其它實(shí)施例中所包括的某些特征而不是其它特征,但是不同實(shí)施例的特征的組合意味著處于本發(fā)明的范圍之內(nèi)并且形成不同的實(shí)施例。例如,在下面的權(quán)利要求書中,所要求保護(hù)的實(shí)施例的任意之一都可以以任意的組合方式來(lái)使用。
本發(fā)明的各個(gè)部件實(shí)施例可以以硬件實(shí)現(xiàn),或者以在一個(gè)或者多個(gè)處理器上運(yùn)行的軟件模塊實(shí)現(xiàn),或者以它們的組合實(shí)現(xiàn)。本領(lǐng)域的技術(shù)人員應(yīng)當(dāng)理解,可以在實(shí)踐中使用微處理器或者數(shù)字信號(hào)處理器(DSP )來(lái)實(shí)現(xiàn)根據(jù)本發(fā)明實(shí)施例的裝置中的一些或者全部部件的一些或者全部功能。本發(fā)明還可以實(shí)現(xiàn)為用于執(zhí)行這里所描述的方法的一部分或者全部的設(shè)備或者裝置程序(例如,計(jì)算機(jī)程序和計(jì)算機(jī)程序產(chǎn)品)。這樣的實(shí)現(xiàn)本發(fā)明的程序可以存儲(chǔ)在計(jì)算機(jī)可讀介質(zhì)上,或者可以具有一個(gè)或者多個(gè)信號(hào)的形式。這樣的信號(hào)可以從因特網(wǎng)網(wǎng)站上下載得到,或者在載體信號(hào)上提供,或者以任何其他形式提供。應(yīng)該注意的是上述實(shí)施例對(duì)本發(fā)明進(jìn)行說明而不是對(duì)本發(fā)明進(jìn)行限制,并且本領(lǐng)域技術(shù)人員在不脫離所附權(quán)利要求的范圍的情況下可設(shè)計(jì)出替換實(shí)施例。在權(quán)利要求中,不應(yīng)將位于括號(hào)之間的任何參考符號(hào)構(gòu)造成對(duì)權(quán)利要求的限制。單詞“包含”不排除存在未列在權(quán)利要求中的元件或步驟。位于元件之前的單詞“一”或“一個(gè)”不排除存在多個(gè)這樣的元件。本發(fā)明可以借助于包括有若干不同元件的硬件以及借助于適當(dāng)編程的計(jì)算機(jī)來(lái)實(shí)現(xiàn)。在列舉了若干裝置的單元權(quán)利要求中,這些裝置中的若干個(gè)可以是通過同一個(gè)硬件項(xiàng)來(lái)具體體現(xiàn)。單詞第一、第二、以及第三等的使用不表示任何順序??蓪⑦@些單詞解釋為名稱。
權(quán)利要求
1.一種插件加載方法,其特征在于,包括以下步驟 收集操作系統(tǒng)平臺(tái)信息,所述操作系統(tǒng)平臺(tái)信息包括操作系統(tǒng)版本、安裝所述操作系統(tǒng)的終端廠商信息、終端型號(hào); 將所述操作系統(tǒng)平臺(tái)信息傳給服務(wù)器; 服務(wù)器依據(jù)所述操作系統(tǒng)版本、安裝所述操作系統(tǒng)的終端廠商信息、終端型號(hào)確定當(dāng)前匹配的操作系統(tǒng),并提取所述操作系統(tǒng)適配的插件; 服務(wù)器返回所述插件下載地址; 根據(jù)所述插件下載地址下載所述插件; 加載所述下載的插件。
2.如權(quán)利要求I所述的插件加載方法,其特征在于,所述收集操作系統(tǒng)平臺(tái)信息包括 在需要進(jìn)行插件加載之前收集并存儲(chǔ)在操作系統(tǒng)中,當(dāng)需要時(shí)直接提取所述操作系統(tǒng)平臺(tái)息;或 在需要進(jìn)行插件加載時(shí)實(shí)時(shí)收集。
3.如權(quán)利要求I所述的插件加載方法,其特征在于,所述服務(wù)器依據(jù)操作系統(tǒng)版本、安裝所述操作系統(tǒng)的終端廠商信息、終端型號(hào)確定當(dāng)前匹配的操作系統(tǒng),并提取所述操作系統(tǒng)適配的插件的步驟包括 將所述操作系統(tǒng)版本、安裝所述操作系統(tǒng)的終端廠商信息、終端型號(hào)與預(yù)先收集的操作系統(tǒng)的特征信息進(jìn)行匹配比較,找到匹配的操作系統(tǒng); 根據(jù)預(yù)先收集的操作系統(tǒng)與插件的對(duì)應(yīng)關(guān)系,確定與所述操作系統(tǒng)適配的插件。
4.如權(quán)利要求I至3任一項(xiàng)所述的插件加載方法,其特征在于,在所述根據(jù)所述插件下載地址下載所述插件之后還包括 驗(yàn)證所述下載得到的插件的合法性,若驗(yàn)證通過,則加載所述下載的插件。
5.如權(quán)利要求4所述的插件加載方法,其特征在于,所述驗(yàn)證所述下載得到的插件的合法性包括 創(chuàng)建所述插件的MD5值; 使用所述插件的公鑰解密所述插件中被加密的MD5值; 比較所述解密的MD5值和所述新創(chuàng)建的MD5值是否匹配,如果匹配,則驗(yàn)證通過,如果不匹配,則驗(yàn)證不通過。
6.如權(quán)利要求I至3任一項(xiàng)所述的插件加載方法,其特征在于,所述操作系統(tǒng)為Android 系統(tǒng)。
7.如權(quán)利要求I至3任一項(xiàng)所述的插件加載方法,其特征在于,所述加載所述下載的插件的步驟之后,還包括 根據(jù)升級(jí)協(xié)議來(lái)增加新插件,刪除所述插件和/或更新所述插件。
8.如權(quán)利要求7所述的插件加載方法,其特征在于,所述增加新插件的步驟為,在所述操作系統(tǒng)平臺(tái)信息中加入新插件的結(jié)構(gòu)信息,并由客戶端下載所述插件; 和/或,所述刪除插件的步驟為,將待刪除插件的狀態(tài)置為不可用; 和/或,所述更新插件的步驟為,將新版本插件的版本號(hào)與下載地址置于插件的特征信息中。
9.一種插件加載系統(tǒng),其特征在于,包括信息收集模塊,用于收集操作系統(tǒng)平臺(tái)信息,所述操作系統(tǒng)平臺(tái)信息包括操作系統(tǒng)版本、安裝所述操作系統(tǒng)的終端廠商信息、終端型號(hào); 信息發(fā)送模塊,用于將所述操作系統(tǒng)平臺(tái)信息傳給服務(wù)器; 位于服務(wù)器的匹配提取模塊,用于依據(jù)所述操作系統(tǒng)版本、安裝所述操作系統(tǒng)的終端廠商信息、終端型號(hào)確定當(dāng)前匹配的操作系統(tǒng),并提取所述操作系統(tǒng)適配的插件; 位于服務(wù)器的信息接收模塊,用于返回所述插件下載地址; 插件下載模塊,用于根據(jù)所述插件下載地址下載所述插件; 加載模塊,用于加載所述下載的插件。
10.如權(quán)利要求9所述的插件加載系統(tǒng),其特征在于,所述位于服務(wù)器的信息接收模塊包括 信息匹配子模塊,用于將所述操作系統(tǒng)版本、安裝所述操作系統(tǒng)的終端廠商信息、終端型號(hào)與預(yù)先收集的操作系統(tǒng)的特征信息進(jìn)行匹配,找到匹配的操作系統(tǒng);和 插件選取子模塊,用于根據(jù)預(yù)先收集的操作系統(tǒng)與插件的對(duì)應(yīng)關(guān)系,確定與所述操作系統(tǒng)適配的插件。
11.如權(quán)利要求9所述的插件加載系統(tǒng),其特征在于,所述系統(tǒng)還包括 驗(yàn)證模塊,用于驗(yàn)證所述插件下載模塊下載得到的插件的合法性,若驗(yàn)證通過,則加載所述下載的插件。
12.如權(quán)利要求11所述的插件加載系統(tǒng),其特征在于,所述驗(yàn)證模塊包括 創(chuàng)建特征值子模塊,用于創(chuàng)建所述插件的MD5值; 解密特征值子模塊,用于將所述插件中被加密的MD5值使用所述插件的公鑰進(jìn)行解密; 比較子模塊,用于比較所述解密的MD5值和所述新創(chuàng)建的MD5值是否匹配,如果匹配,則驗(yàn)證通過,如果不匹配,則驗(yàn)證不通過。
13.如權(quán)利要求9所述的插件加載系統(tǒng),其特征在于,所述系統(tǒng)還包括 升級(jí)模塊,用于加載所述下載的插件之后,根據(jù)升級(jí)協(xié)議來(lái)增加新插件,刪除所述插件和更新所述插件。
全文摘要
本申請(qǐng)?zhí)峁┝艘环N插件加載方法及系統(tǒng),其中所述方法包括收集操作系統(tǒng)平臺(tái)信息,所述操作系統(tǒng)平臺(tái)信息包括操作系統(tǒng)版本、安裝所述操作系統(tǒng)的終端廠商信息、終端型號(hào);將所述操作系統(tǒng)平臺(tái)信息傳給服務(wù)器;服務(wù)器依據(jù)所述操作系統(tǒng)版本、安裝所述操作系統(tǒng)的終端廠商信息、終端型號(hào)確定當(dāng)前匹配的操作系統(tǒng),并提取所述操作系統(tǒng)適配的插件;服務(wù)器返回所述插件下載地址;根據(jù)所述插件下載地址下載所述插件;加載所述下載的插件。本申請(qǐng)可以使加載的插件與加載插件的操作系統(tǒng)相兼容,保證加載的插件能夠正常運(yùn)行,并且適用于各種開源性的操作系統(tǒng),減少了適配開發(fā)的工作量。
文檔編號(hào)H04L29/08GK102830992SQ20121027150
公開日2012年12月19日 申請(qǐng)日期2012年7月31日 優(yōu)先權(quán)日2012年7月31日
發(fā)明者王鑫, 張建法 申請(qǐng)人:北京奇虎科技有限公司, 奇智軟件(北京)有限公司