應(yīng)用程序插件化的實(shí)現(xiàn)方法和裝置的制造方法
【專(zhuān)利摘要】本發(fā)明提出一種應(yīng)用程序插件化的實(shí)現(xiàn)方法和裝置,該應(yīng)用程序插件化的實(shí)現(xiàn)方法包括:獲取應(yīng)用程序的功能插件對(duì)應(yīng)的動(dòng)態(tài)庫(kù)文件,所述動(dòng)態(tài)庫(kù)文件中包含預(yù)先定義的功能插件與應(yīng)用程序間的接口文件;將所述動(dòng)態(tài)庫(kù)文件加載到內(nèi)存中,并從所述動(dòng)態(tài)庫(kù)文件中獲取接口文件;根據(jù)所述接口文件加載所述功能插件,并實(shí)現(xiàn)所述應(yīng)用程序與所述功能插件之間的雙向數(shù)據(jù)通信;將所述功能插件的內(nèi)存路徑發(fā)送給所述功能插件,以使所述功能插件根據(jù)所述內(nèi)存路徑自加載插件資源。該方法能夠?qū)崿F(xiàn)應(yīng)用程序的插件化,從而可以減小APP包的大小,并且可以對(duì)功能插件進(jìn)行動(dòng)態(tài)更新,無(wú)需讓用戶更新整個(gè)APP包。
【專(zhuān)利說(shuō)明】
應(yīng)用程序插件化的實(shí)現(xiàn)方法和裝置
技術(shù)領(lǐng)域
[0001]本發(fā)明涉及互聯(lián)網(wǎng)技術(shù)領(lǐng)域,尤其涉及一種應(yīng)用程序插件化的實(shí)現(xiàn)方法和裝置。
【背景技術(shù)】
[0002]隨著移動(dòng)互聯(lián)網(wǎng)技術(shù)的發(fā)展,移動(dòng)設(shè)備的使用已很普遍。用戶可以在移動(dòng)設(shè)備上安裝應(yīng)用程序(APP),以滿足用戶各種需求。
[0003]相關(guān)技術(shù)中,在生成APP時(shí),一般是將模塊的代碼和資源打包成靜態(tài)庫(kù),加載到APP工程中進(jìn)行編譯,最終鏈接到APP包中,所有模塊的代碼和資源均是包含在APP包中。
[0004]但是,上述技術(shù)存在如下問(wèn)題:(I)隨著功能模塊的增多,APP包集成的靜態(tài)庫(kù)越多,APP包大小將隨著增大,最終甚至可能因?yàn)榘^(guò)大而無(wú)法通過(guò)移動(dòng)設(shè)備系統(tǒng)(如1S系統(tǒng))公司的審核;(2)功能模塊無(wú)法進(jìn)行代碼的動(dòng)態(tài)更新,需要用戶更新整個(gè)APP包。
【發(fā)明內(nèi)容】
[0005]本發(fā)明旨在至少在一定程度上解決相關(guān)技術(shù)中的技術(shù)問(wèn)題之一。
[0006]為此,本發(fā)明的一個(gè)目的在于提出一種應(yīng)用程序插件化的實(shí)現(xiàn)方法,該方法可以實(shí)現(xiàn)應(yīng)用程序的插件化,從而可以減小APP包的大小,并且可以對(duì)功能插件進(jìn)行動(dòng)態(tài)更新,無(wú)需讓用戶更新整個(gè)APP包。
[0007]本發(fā)明的另一個(gè)目的在于提出一種應(yīng)用程序插件化的實(shí)現(xiàn)裝置。
[0008]為達(dá)到上述目的,本發(fā)明第一方面實(shí)施例提出的應(yīng)用程序插件化的實(shí)現(xiàn)方法,包括:獲取應(yīng)用程序的功能插件對(duì)應(yīng)的動(dòng)態(tài)庫(kù)文件,所述動(dòng)態(tài)庫(kù)文件中包含預(yù)先定義的功能插件與應(yīng)用程序間的接口文件;將所述動(dòng)態(tài)庫(kù)文件加載到內(nèi)存中,并從所述動(dòng)態(tài)庫(kù)文件中獲取接口文件;根據(jù)所述接口文件加載所述功能插件,并實(shí)現(xiàn)所述應(yīng)用程序與所述功能插件之間的雙向數(shù)據(jù)通信;將所述功能插件的內(nèi)存路徑發(fā)送給所述功能插件,以使所述功能插件根據(jù)所述內(nèi)存路徑自加載插件資源。
[0009]本發(fā)明第一方面實(shí)施例提出的應(yīng)用程序插件化的實(shí)現(xiàn)方法,通過(guò)加載動(dòng)態(tài)庫(kù)文件,可以根據(jù)動(dòng)態(tài)庫(kù)文件加載功能插件、保證應(yīng)用程序與功能插件間的雙向數(shù)據(jù)通信,以及實(shí)現(xiàn)功能插件自加載插件資源,可以在應(yīng)用程序運(yùn)行時(shí)動(dòng)態(tài)加載功能插件,從而實(shí)現(xiàn)應(yīng)用程序的插件化,當(dāng)應(yīng)用程序采用插件化管理后,可以減少APP包的大小,并且可以對(duì)功能插件進(jìn)行動(dòng)態(tài)更新,無(wú)需讓用戶更新整個(gè)APP包。
[0010]為達(dá)到上述目的,本發(fā)明第二方面實(shí)施例提出的應(yīng)用程序插件化的實(shí)現(xiàn)裝置,包括:第一獲取模塊,用于獲取應(yīng)用程序的功能插件對(duì)應(yīng)的動(dòng)態(tài)庫(kù)文件,所述動(dòng)態(tài)庫(kù)文件中包含預(yù)先定義的功能插件與應(yīng)用程序間的接口文件;第二獲取模塊,用于將所述動(dòng)態(tài)庫(kù)文件加載到內(nèi)存中,并從所述動(dòng)態(tài)庫(kù)文件中獲取接口文件;加載模塊,用于根據(jù)所述接口文件加載所述功能插件,并實(shí)現(xiàn)所述應(yīng)用程序與所述功能插件之間的雙向數(shù)據(jù)通信;發(fā)送模塊,用于將所述功能插件的內(nèi)存路徑發(fā)送給所述功能插件,以使所述功能插件根據(jù)所述內(nèi)存路徑自加載插件資源。
[0011]本發(fā)明第二方面實(shí)施例提出的應(yīng)用程序插件化的實(shí)現(xiàn)裝置,通過(guò)加載動(dòng)態(tài)庫(kù)文件,可以根據(jù)動(dòng)態(tài)庫(kù)文件加載功能插件、保證應(yīng)用程序與功能插件間的雙向數(shù)據(jù)通信,以及實(shí)現(xiàn)功能插件自加載插件資源,可以在應(yīng)用程序運(yùn)行時(shí)動(dòng)態(tài)加載功能插件,從而實(shí)現(xiàn)應(yīng)用程序的插件化,當(dāng)應(yīng)用程序采用插件化管理后,可以減少APP包的大小,并且可以對(duì)功能插件進(jìn)行動(dòng)態(tài)更新,無(wú)需讓用戶更新整個(gè)APP包。
[0012]本發(fā)明附加的方面和優(yōu)點(diǎn)將在下面的描述中部分給出,部分將從下面的描述中變得明顯,或通過(guò)本發(fā)明的實(shí)踐了解到。
【附圖說(shuō)明】
[0013]本發(fā)明上述的和/或附加的方面和優(yōu)點(diǎn)從下面結(jié)合附圖對(duì)實(shí)施例的描述中將變得明顯和容易理解,其中:
[0014]圖1是本發(fā)明一個(gè)實(shí)施例提出的應(yīng)用程序插件化的實(shí)現(xiàn)方法的流程示意圖;
[0015]圖2是本發(fā)明另一個(gè)實(shí)施例提出的應(yīng)用程序插件化的實(shí)現(xiàn)方法的流程示意圖;
[0016]圖3是本發(fā)明一個(gè)實(shí)施例提出的應(yīng)用程序插件化的實(shí)現(xiàn)裝置的結(jié)構(gòu)示意圖;
[0017]圖4是本發(fā)明一個(gè)實(shí)施例提出的應(yīng)用程序插件化的實(shí)現(xiàn)裝置的結(jié)構(gòu)示意圖。
【具體實(shí)施方式】
[0018]下面詳細(xì)描述本發(fā)明的實(shí)施例,所述實(shí)施例的示例在附圖中示出,其中自始至終相同或類(lèi)似的標(biāo)號(hào)表示相同或類(lèi)似的模塊或具有相同或類(lèi)似功能的模塊。下面通過(guò)參考附圖描述的實(shí)施例是示例性的,僅用于解釋本發(fā)明,而不能理解為對(duì)本發(fā)明的限制。相反,本發(fā)明的實(shí)施例包括落入所附加權(quán)利要求書(shū)的精神和內(nèi)涵范圍內(nèi)的所有變化、修改和等同物。
[0019]圖1是本發(fā)明一個(gè)實(shí)施例提出的應(yīng)用程序插件化的實(shí)現(xiàn)方法的流程示意圖。
[0020]參見(jiàn)圖1,本實(shí)施例的方法包括:
[0021]Sll:獲取應(yīng)用程序的功能插件對(duì)應(yīng)的動(dòng)態(tài)庫(kù)文件,所述動(dòng)態(tài)庫(kù)文件中包含預(yù)先定義的功能插件與應(yīng)用程序間的接口文件。
[0022]本發(fā)明實(shí)施例中,以應(yīng)用程序是應(yīng)用于1S系統(tǒng)的應(yīng)用程序?yàn)槔?br>[0023]在開(kāi)發(fā)應(yīng)用程序時(shí),可以將至少部分的功能模塊獨(dú)立進(jìn)行開(kāi)發(fā),并以插件的形式動(dòng)態(tài)加載到APP中。這些獨(dú)立開(kāi)發(fā)的功能模塊可以稱為功能插件。
[0024]在1S系統(tǒng)中,描述功能插件的文件稱為動(dòng)態(tài)庫(kù)(framework)文件,framework文件中包含了代碼和資源文件。
[0025]在開(kāi)發(fā)APP時(shí),可以定義功能插件與APP間的通信協(xié)議接口(簡(jiǎn)稱為接口),并將定義得到的接口文件保存在動(dòng)態(tài)庫(kù)文件中。
[0026]其中,APP在需要加載功能插件時(shí),可以從本地獲取上述的動(dòng)態(tài)庫(kù)文件,或者,也可以從服務(wù)端獲取上述的動(dòng)態(tài)庫(kù)文件。具體的,在生成動(dòng)態(tài)庫(kù)文件時(shí),可以標(biāo)識(shí)版本,當(dāng)本地存在需要版本的動(dòng)態(tài)庫(kù)文件時(shí),從本地獲取上述的動(dòng)態(tài)庫(kù)文件,如果本地不存在需要版本的動(dòng)態(tài)庫(kù)文件時(shí),則從服務(wù)端獲取動(dòng)態(tài)庫(kù)文件。
[0027]進(jìn)一步的,需要版本可以具體是指最新版本。在開(kāi)發(fā)人員生成最新版本的動(dòng)態(tài)庫(kù)文件后,可以將最新版本的動(dòng)態(tài)庫(kù)文件保存在服務(wù)端。
[0028]S12:將所述動(dòng)態(tài)庫(kù)文件加載到內(nèi)存中,并從所述動(dòng)態(tài)庫(kù)文件中獲取接口文件。
[0029]在獲取到上述的動(dòng)態(tài)庫(kù)文件后,可以利用OC中的NSBundle加載機(jī)制將動(dòng)態(tài)庫(kù)文件加載到內(nèi)存中。
[0030]在將動(dòng)態(tài)庫(kù)文件加載到內(nèi)存后,可以解析該動(dòng)態(tài)庫(kù)文件,從中獲取接口文件。
[0031]S13:根據(jù)所述接口文件加載所述功能插件,并實(shí)現(xiàn)所述應(yīng)用程序與所述功能插件之間的雙向數(shù)據(jù)通信。
[0032]其中,可以從接口文件中獲取接口名稱,該接口名稱是一個(gè)字符串。
[0033]之后,可以采用反射機(jī)制,利用接口名稱動(dòng)態(tài)生成接口類(lèi),并對(duì)其實(shí)例化,得到接口實(shí)例對(duì)象。
[0034]其中,反射機(jī)制是指JAVA反射機(jī)制,JAVA反射機(jī)制是在運(yùn)行狀態(tài)中,對(duì)于任意一個(gè)類(lèi),都能夠知道這個(gè)類(lèi)的所有屬性和方法;對(duì)于任意一個(gè)對(duì)象,都能夠調(diào)用它的任意一個(gè)方法和屬性;這種動(dòng)態(tài)獲取的信息以及動(dòng)態(tài)調(diào)用對(duì)象的方法的功能稱為JAVA反射機(jī)制。
[0035]得到接口實(shí)例對(duì)象后,可以利用接口實(shí)例對(duì)象采用selector方式動(dòng)態(tài)調(diào)用APP與功能插件間接口的方法,實(shí)現(xiàn)功能插件的加載。
[0036]selector是一個(gè)對(duì)象中用來(lái)選擇方法來(lái)執(zhí)行的名字,或者是當(dāng)源代碼編譯時(shí)候用來(lái)替換名字的唯一的標(biāo)示。selector自己并不能做任何事情。它簡(jiǎn)單的標(biāo)示了一個(gè)方法。使得selector方法名稱不同于普通字符串的唯一的事情是編譯器確定selectors是獨(dú)特的。使得selector有用的是(與運(yùn)行時(shí)結(jié)合)它扮演著類(lèi)似于一個(gè)動(dòng)態(tài)函數(shù)指針,對(duì)于一個(gè)已經(jīng)給與的名字,自動(dòng)指向類(lèi)所使用的適用的方法的實(shí)現(xiàn)。
[0037]在實(shí)現(xiàn)APP與功能插件間的雙向數(shù)據(jù)通信時(shí),可以采用委托機(jī)制,在上述采用selector方式調(diào)用方法時(shí)傳遞和返回委托對(duì)象,實(shí)現(xiàn)APP與插件間的雙向數(shù)據(jù)通信。委托對(duì)象是指APP內(nèi)與功能插件進(jìn)行交互的類(lèi)對(duì)象。
[0038]委托機(jī)制(De legate)是1S系統(tǒng)中的一種協(xié)議,通過(guò)Oprotoco I的方式實(shí)現(xiàn),能夠委托由他人幫助自身完成指定的事情。
[0039]S14:將所述功能插件的內(nèi)存路徑發(fā)送給所述功能插件,以使所述功能插件根據(jù)所述內(nèi)存路徑自加載插件資源。
[0040]其中,功能插件的內(nèi)存路徑是動(dòng)態(tài)庫(kù)文件的內(nèi)存路徑,該內(nèi)存路徑可以預(yù)先指定。
[0041]在加載功能插件后,APP可以利用委托機(jī)制,將功能插件的內(nèi)存(bundle)路徑發(fā)送給功能插件,由于功能插件運(yùn)行時(shí)需要的插件資源都保存到內(nèi)存路徑對(duì)應(yīng)的內(nèi)存中,因此,功能插件獲取到內(nèi)存路徑后,可以根據(jù)該內(nèi)存路徑從對(duì)應(yīng)的內(nèi)存中獲取插件資源,實(shí)現(xiàn)插件資源的自加載,保證功能插件的成功運(yùn)行。
[0042]本實(shí)施例中,通過(guò)加載動(dòng)態(tài)庫(kù)文件,可以根據(jù)動(dòng)態(tài)庫(kù)文件加載功能插件、保證應(yīng)用程序與功能插件間的雙向數(shù)據(jù)通信,以及實(shí)現(xiàn)功能插件自加載插件資源,可以在應(yīng)用程序運(yùn)行時(shí)動(dòng)態(tài)加載功能插件,從而實(shí)現(xiàn)應(yīng)用程序的插件化,當(dāng)應(yīng)用程序采用插件化管理后,可以減少APP包的大小,并且可以對(duì)功能插件進(jìn)行動(dòng)態(tài)更新,無(wú)需讓用戶更新整個(gè)APP包。
[0043]圖2是本發(fā)明另一個(gè)實(shí)施例提出的應(yīng)用程序插件化的實(shí)現(xiàn)方法的流程示意圖。
[0044]參見(jiàn)圖2,本實(shí)施例的方法包括:
[0045]S201:定義APP與功能插件之間的通信協(xié)議接口,生成接口文件。
[0046]其中,在開(kāi)發(fā)APP時(shí),可以由開(kāi)發(fā)人員定義該接口,生成相應(yīng)的接口文件(.h文件)。
[0047]S202:創(chuàng)建包含接口文件的動(dòng)態(tài)庫(kù)文件,并標(biāo)識(shí)版本。
[0048]其中,可以在XCode中創(chuàng)建動(dòng)態(tài)庫(kù)(framework)工程,將上述生成的接口文件包含在動(dòng)態(tài)庫(kù)工程中,并在動(dòng)態(tài)庫(kù)工程中進(jìn)行插件的功能開(kāi)發(fā),生成動(dòng)態(tài)庫(kù)文件,并標(biāo)識(shí)版本。
[0049]S203:壓縮動(dòng)態(tài)庫(kù)文件并保存在服務(wù)端。
[0050]例如,將動(dòng)態(tài)庫(kù)文件壓縮成.zip格式。
[0051 ] S204: APP在需要加載功能插件時(shí),進(jìn)行版本匹配。
[0052]例如,APP確定需要加載的功能插件對(duì)應(yīng)的需要的動(dòng)態(tài)庫(kù)文件的版本,并與本地存儲(chǔ)的該功能插件對(duì)應(yīng)的動(dòng)態(tài)庫(kù)文件的版本進(jìn)行比較。
[0053]S205: APP判斷本地存儲(chǔ)的動(dòng)態(tài)庫(kù)文件是否是最新版本,若是,執(zhí)行S207,否則執(zhí)行S206o
[0054]S206:從服務(wù)端下載壓縮后的動(dòng)態(tài)庫(kù)文件,并解壓到APP的目錄中。
[0055]其中,在確定需要版本的動(dòng)態(tài)庫(kù)文件后,可以從服務(wù)端下載相應(yīng)版本的動(dòng)態(tài)庫(kù)文件。
[0056]S207:利用OC中的NSBundle加載機(jī)制將動(dòng)態(tài)庫(kù)文件加載到內(nèi)存中。
[0057]例如,在本地存在最新版本的動(dòng)態(tài)庫(kù)文件,或者,從服務(wù)端下載并解壓到APP的目錄中后,可以從本地的APP目錄中獲取最新版本的動(dòng)態(tài)庫(kù)文件,并采用上述的機(jī)制加載到內(nèi)存中。
[0058]S208:采用反射機(jī)制,利用接口名稱動(dòng)態(tài)生成接口類(lèi),并對(duì)其實(shí)例化,得到接口實(shí)例對(duì)象。
[0059]S209:利用接口實(shí)例對(duì)象采用selector方式動(dòng)態(tài)調(diào)用APP與功能插件間接口的方法,實(shí)現(xiàn)功能插件的加載。
[0060]S210:采用委托機(jī)制,在上述采用selector方式調(diào)用接口的方法時(shí)傳遞和返回委托對(duì)象,實(shí)現(xiàn)APP與插件間的雙向數(shù)據(jù)通信。
[0061]S211:利用委托機(jī)制,將功能插件的內(nèi)存(bundle)路徑發(fā)送給功能插件,實(shí)現(xiàn)功能插件的資源自加載。
[0062]本實(shí)施例中,通過(guò)將APP插件化后,可以將APP的至少部分功能模塊獨(dú)立進(jìn)行開(kāi)發(fā),并以插件的形式動(dòng)態(tài)加載到APP中,實(shí)現(xiàn)APP與插件之間從功能到資源上的深度解耦,并實(shí)現(xiàn)插件的動(dòng)態(tài)更新,極大地減小了 APP包的大小,同時(shí),又能對(duì)功能進(jìn)行動(dòng)態(tài)更新,而無(wú)需讓用戶更新APP,提升用戶體驗(yàn)。
[0063]圖3是本發(fā)明一個(gè)實(shí)施例提出的應(yīng)用程序插件化的實(shí)現(xiàn)裝置的結(jié)構(gòu)示意圖。參見(jiàn)圖3,該裝置30包括:第一獲取模塊31、第二獲取模塊32、加載模塊33和發(fā)送模塊34。
[0064]第一獲取模塊31用于獲取應(yīng)用程序的功能插件對(duì)應(yīng)的動(dòng)態(tài)庫(kù)文件,所述動(dòng)態(tài)庫(kù)文件中包含預(yù)先定義的功能插件與應(yīng)用程序間的接口文件。
[0065]本發(fā)明實(shí)施例中,以應(yīng)用程序是應(yīng)用于1S系統(tǒng)的應(yīng)用程序?yàn)槔?br>[0066]在開(kāi)發(fā)應(yīng)用程序時(shí),可以將至少部分的功能模塊獨(dú)立進(jìn)行開(kāi)發(fā),并以插件的形式動(dòng)態(tài)加載到APP中。這些獨(dú)立開(kāi)發(fā)的功能模塊可以稱為功能插件。
[0067]在1S系統(tǒng)中,描述功能插件的文件稱為動(dòng)態(tài)庫(kù)(framework)文件,framework文件中包含了代碼和資源文件。
[0068]在開(kāi)發(fā)APP時(shí),可以定義功能插件與APP間的通信協(xié)議接口(簡(jiǎn)稱為接口),并將定義得到的接口文件保存在動(dòng)態(tài)庫(kù)文件中。
[0069]其中,APP在需要加載功能插件時(shí),可以從本地獲取上述的動(dòng)態(tài)庫(kù)文件,或者,也可以從服務(wù)端獲取上述的動(dòng)態(tài)庫(kù)文件。具體的,在生成動(dòng)態(tài)庫(kù)文件時(shí),可以標(biāo)識(shí)版本,當(dāng)本地存在需要版本的動(dòng)態(tài)庫(kù)文件時(shí),從本地獲取上述的動(dòng)態(tài)庫(kù)文件,如果本地不存在需要版本的動(dòng)態(tài)庫(kù)文件時(shí),則從服務(wù)端獲取動(dòng)態(tài)庫(kù)文件。
[0070]進(jìn)一步的,需要版本可以具體是指最新版本。在開(kāi)發(fā)人員生成最新版本的動(dòng)態(tài)庫(kù)文件后,可以將最新版本的動(dòng)態(tài)庫(kù)文件保存在服務(wù)端。
[0071]第二獲取模塊32用于將所述動(dòng)態(tài)庫(kù)文件加載到內(nèi)存中,并從所述動(dòng)態(tài)庫(kù)文件中獲取接口文件。
[0072]在獲取到上述的動(dòng)態(tài)庫(kù)文件后,可以利用OC中的NSBundle加載機(jī)制將動(dòng)態(tài)庫(kù)文件加載到內(nèi)存中。
[0073]在將動(dòng)態(tài)庫(kù)文件加載到內(nèi)存后,可以解析該動(dòng)態(tài)庫(kù)文件,從中獲取接口文件。
[0074]加載模塊33用于根據(jù)所述接口文件加載所述功能插件,并實(shí)現(xiàn)所述應(yīng)用程序與所述功能插件之間的雙向數(shù)據(jù)通信。
[0075]其中,可以從接口文件中獲取接口名稱,該接口名稱是一個(gè)字符串。
[0076]之后,可以采用反射機(jī)制,利用接口名稱動(dòng)態(tài)生成接口類(lèi),并對(duì)其實(shí)例化,得到接口實(shí)例對(duì)象。
[0077]其中,反射機(jī)制是指JAVA反射機(jī)制,JAVA反射機(jī)制是在運(yùn)行狀態(tài)中,對(duì)于任意一個(gè)類(lèi),都能夠知道這個(gè)類(lèi)的所有屬性和方法;對(duì)于任意一個(gè)對(duì)象,都能夠調(diào)用它的任意一個(gè)方法和屬性;這種動(dòng)態(tài)獲取的信息以及動(dòng)態(tài)調(diào)用對(duì)象的方法的功能稱為JAVA反射機(jī)制。
[0078]得到接口實(shí)例對(duì)象后,可以利用接口實(shí)例對(duì)象采用selector方式動(dòng)態(tài)調(diào)用APP與功能插件間接口的方法,實(shí)現(xiàn)功能插件的加載。
[0079]在實(shí)現(xiàn)APP與功能插件間的雙向數(shù)據(jù)通信時(shí),可以采用委托機(jī)制,在上述采用selector方式調(diào)用方法時(shí)傳遞和返回委托對(duì)象,實(shí)現(xiàn)APP與插件間的雙向數(shù)據(jù)通信。委托對(duì)象是指APP內(nèi)與功能插件進(jìn)行交互的類(lèi)對(duì)象。
[0080]發(fā)送模塊34用于將所述功能插件的內(nèi)存路徑發(fā)送給所述功能插件,以使所述功能插件根據(jù)所述內(nèi)存路徑自加載插件資源。
[0081]其中,功能插件的內(nèi)存路徑是動(dòng)態(tài)庫(kù)文件的內(nèi)存路徑,該內(nèi)存路徑可以預(yù)先指定。
[0082]在加載功能插件后,APP可以利用委托機(jī)制,將功能插件的內(nèi)存(bundle)路徑發(fā)送給功能插件,由于功能插件運(yùn)行時(shí)需要的插件資源都保存到內(nèi)存路徑對(duì)應(yīng)的內(nèi)存中,因此,功能插件獲取到內(nèi)存路徑后,可以根據(jù)該內(nèi)存路徑從對(duì)應(yīng)的內(nèi)存中獲取插件資源,實(shí)現(xiàn)插件資源的自加載,保證功能插件的成功運(yùn)行。
[0083]一些實(shí)施例中,參見(jiàn)圖4,該裝置30還包括:
[0084]第一生成模塊35,用于生成所述接口文件。
[0085]其中,在開(kāi)發(fā)APP時(shí),可以由開(kāi)發(fā)人員定義該接口,生成相應(yīng)的接口文件(.h文件)。
[0086]第二生成模塊36,用于將所述接口文件包含在所述動(dòng)態(tài)庫(kù)文件中,并標(biāo)識(shí)所述動(dòng)態(tài)庫(kù)文件的版本。
[0087]其中,在開(kāi)發(fā)APP時(shí),可以由開(kāi)發(fā)人員定義該接口,生成相應(yīng)的接口文件(.h文件)。
[0088]保存模塊37,用于對(duì)所述動(dòng)態(tài)庫(kù)文件進(jìn)行壓縮后保存在服務(wù)端。
[0089]例如,將動(dòng)態(tài)庫(kù)文件壓縮成.zip格式。
[0090]相應(yīng)的,第一獲取模塊31包括:
[0091 ]第一單元311,用于在應(yīng)用程序需要加載所述功能插件時(shí),判斷本地是否存在需要加載的功能插件的需要版本的動(dòng)態(tài)庫(kù)文件;
[0092]第二單元312,用于如果本地存在需要版本的動(dòng)態(tài)庫(kù)文件,則在本地獲取所述動(dòng)態(tài)庫(kù)文件;
[0093]第三單元313,用于如果本地不存在需要版本的動(dòng)態(tài)庫(kù)文件,則從服務(wù)端下載需要版本的動(dòng)態(tài)庫(kù)文件,并對(duì)下載的動(dòng)態(tài)庫(kù)文件進(jìn)行解壓,以獲取解壓后的動(dòng)態(tài)庫(kù)文件。
[0094]例如,在本地存在最新版本的動(dòng)態(tài)庫(kù)文件,或者,從服務(wù)端下載并解壓到APP的目錄中后,可以從本地的APP目錄中獲取最新版本的動(dòng)態(tài)庫(kù)文件,并采用上述的機(jī)制加載到內(nèi)存中。
[0095]一些實(shí)施例中,參見(jiàn)圖4,加載模塊33包括:
[0096]第四單元331,用于從所述接口文件中獲取接口名稱;
[0097]第五單元332,用于采用反射機(jī)制,利用所述接口名稱動(dòng)態(tài)生成接口類(lèi),并進(jìn)行實(shí)例化,得到接口實(shí)例對(duì)象;
[0098]第六單元333,用于利用接口實(shí)例對(duì)象,采用selector方式動(dòng)態(tài)調(diào)用應(yīng)用程序與功能插件間接口的方法,實(shí)現(xiàn)功能插件的加載。
[0099]一些實(shí)施例中,加載模塊33包括:
[0100]第七單元334,用于利用委托機(jī)制,在調(diào)用所述接口的方法時(shí),傳遞和返回委托對(duì)象,實(shí)現(xiàn)應(yīng)用程序與所述功能插件間的雙向數(shù)據(jù)通信。
[0101 ] —些實(shí)施例中,所述發(fā)送模塊34具體用于:
[0102]利用委托機(jī)制,將功能插件的內(nèi)存路徑發(fā)送給功能插件。
[0103]可以理解的是,本實(shí)施例的裝置與方法實(shí)施例對(duì)應(yīng),具體內(nèi)容可以參見(jiàn)方法實(shí)施例中的相關(guān)描述,在此不再詳細(xì)說(shuō)明。
[0104]本實(shí)施例中,通過(guò)加載動(dòng)態(tài)庫(kù)文件,可以根據(jù)動(dòng)態(tài)庫(kù)文件加載功能插件、保證應(yīng)用程序與功能插件間的雙向數(shù)據(jù)通信,以及實(shí)現(xiàn)功能插件自加載插件資源,可以在應(yīng)用程序運(yùn)行時(shí)動(dòng)態(tài)加載功能插件,從而實(shí)現(xiàn)應(yīng)用程序的插件化,當(dāng)應(yīng)用程序采用插件化管理后,可以減少APP包的大小,并且可以對(duì)功能插件進(jìn)行動(dòng)態(tài)更新,無(wú)需讓用戶更新整個(gè)APP包。
[0105]需要說(shuō)明的是,在本發(fā)明的描述中,術(shù)語(yǔ)“第一”、“第二”等僅用于描述目的,而不能理解為指示或暗示相對(duì)重要性。此外,在本發(fā)明的描述中,除非另有說(shuō)明,“多個(gè)”的含義是指至少兩個(gè)。
[0106]流程圖中或在此以其他方式描述的任何過(guò)程或方法描述可以被理解為,表示包括一個(gè)或更多個(gè)用于實(shí)現(xiàn)特定邏輯功能或過(guò)程的步驟的可執(zhí)行指令的代碼的模塊、片段或部分,并且本發(fā)明的優(yōu)選實(shí)施方式的范圍包括另外的實(shí)現(xiàn),其中可以不按所示出或討論的順序,包括根據(jù)所涉及的功能按基本同時(shí)的方式或按相反的順序,來(lái)執(zhí)行功能,這應(yīng)被本發(fā)明的實(shí)施例所屬技術(shù)領(lǐng)域的技術(shù)人員所理解。
[0107]應(yīng)當(dāng)理解,本發(fā)明的各部分可以用硬件、軟件、固件或它們的組合來(lái)實(shí)現(xiàn)。在上述實(shí)施方式中,多個(gè)步驟或方法可以用存儲(chǔ)在存儲(chǔ)器中且由合適的指令執(zhí)行系統(tǒng)執(zhí)行的軟件或固件來(lái)實(shí)現(xiàn)。例如,如果用硬件來(lái)實(shí)現(xiàn),和在另一實(shí)施方式中一樣,可用本領(lǐng)域公知的下列技術(shù)中的任一項(xiàng)或他們的組合來(lái)實(shí)現(xiàn):具有用于對(duì)數(shù)據(jù)信號(hào)實(shí)現(xiàn)邏輯功能的邏輯門(mén)電路的離散邏輯電路,具有合適的組合邏輯門(mén)電路的專(zhuān)用集成電路,可編程門(mén)陣列(PGA),現(xiàn)場(chǎng)可編程門(mén)陣列(FPGA)等。
[0108]本技術(shù)領(lǐng)域的普通技術(shù)人員可以理解實(shí)現(xiàn)上述實(shí)施例方法攜帶的全部或部分步驟是可以通過(guò)程序來(lái)指令相關(guān)的硬件完成,所述的程序可以存儲(chǔ)于一種計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)中,該程序在執(zhí)行時(shí),包括方法實(shí)施例的步驟之一或其組合。
[0109]此外,在本發(fā)明各個(gè)實(shí)施例中的各功能單元可以集成在一個(gè)處理模塊中,也可以是各個(gè)單元單獨(dú)物理存在,也可以兩個(gè)或兩個(gè)以上單元集成在一個(gè)模塊中。上述集成的模塊既可以采用硬件的形式實(shí)現(xiàn),也可以采用軟件功能模塊的形式實(shí)現(xiàn)。所述集成的模塊如果以軟件功能模塊的形式實(shí)現(xiàn)并作為獨(dú)立的產(chǎn)品銷(xiāo)售或使用時(shí),也可以存儲(chǔ)在一個(gè)計(jì)算機(jī)可讀取存儲(chǔ)介質(zhì)中。
[0110]上述提到的存儲(chǔ)介質(zhì)可以是只讀存儲(chǔ)器,磁盤(pán)或光盤(pán)等。
[0111]在本說(shuō)明書(shū)的描述中,參考術(shù)語(yǔ)“一個(gè)實(shí)施例”、“一些實(shí)施例”、“示例”、“具體示例”、或“一些示例”等的描述意指結(jié)合該實(shí)施例或示例描述的具體特征、結(jié)構(gòu)、材料或者特點(diǎn)包含于本發(fā)明的至少一個(gè)實(shí)施例或示例中。在本說(shuō)明書(shū)中,對(duì)上述術(shù)語(yǔ)的示意性表述不一定指的是相同的實(shí)施例或示例。而且,描述的具體特征、結(jié)構(gòu)、材料或者特點(diǎn)可以在任何的一個(gè)或多個(gè)實(shí)施例或示例中以合適的方式結(jié)合。
[0112]盡管上面已經(jīng)示出和描述了本發(fā)明的實(shí)施例,可以理解的是,上述實(shí)施例是示例性的,不能理解為對(duì)本發(fā)明的限制,本領(lǐng)域的普通技術(shù)人員在本發(fā)明的范圍內(nèi)可以對(duì)上述實(shí)施例進(jìn)行變化、修改、替換和變型。
【主權(quán)項(xiàng)】
1.一種應(yīng)用程序插件化的實(shí)現(xiàn)方法,其特征在于,包括: 獲取應(yīng)用程序的功能插件對(duì)應(yīng)的動(dòng)態(tài)庫(kù)文件,所述動(dòng)態(tài)庫(kù)文件中包含預(yù)先定義的功能插件與應(yīng)用程序間的接口文件; 將所述動(dòng)態(tài)庫(kù)文件加載到內(nèi)存中,并從所述動(dòng)態(tài)庫(kù)文件中獲取接口文件; 根據(jù)所述接口文件加載所述功能插件,并實(shí)現(xiàn)所述應(yīng)用程序與所述功能插件之間的雙向數(shù)據(jù)通信; 將所述功能插件的內(nèi)存路徑發(fā)送給所述功能插件,以使所述功能插件根據(jù)所述內(nèi)存路徑自加載插件資源。2.根據(jù)權(quán)利要求1所述的方法,其特征在于,還包括: 生成所述接口文件; 將所述接口文件包含在所述動(dòng)態(tài)庫(kù)文件中,并標(biāo)識(shí)所述動(dòng)態(tài)庫(kù)文件的版本; 對(duì)所述動(dòng)態(tài)庫(kù)文件進(jìn)行壓縮后保存在服務(wù)端。3.根據(jù)權(quán)利要求2所述的方法,其特征在于,所述獲取應(yīng)用程序的功能插件對(duì)應(yīng)的動(dòng)態(tài)庫(kù)文件,包括: 在應(yīng)用程序需要加載所述功能插件時(shí),判斷本地是否存在需要加載的功能插件的需要版本的動(dòng)態(tài)庫(kù)文件; 如果本地存在需要版本的動(dòng)態(tài)庫(kù)文件,則在本地獲取所述動(dòng)態(tài)庫(kù)文件; 如果本地不存在需要版本的動(dòng)態(tài)庫(kù)文件,則從服務(wù)端下載需要版本的動(dòng)態(tài)庫(kù)文件,并對(duì)下載的動(dòng)態(tài)庫(kù)文件進(jìn)行解壓,以獲取解壓后的動(dòng)態(tài)庫(kù)文件。4.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述根據(jù)所述接口文件加載所述功能插件,包括: 從所述接口文件中獲取接口名稱; 采用反射機(jī)制,利用所述接口名稱動(dòng)態(tài)生成接口類(lèi),并進(jìn)行實(shí)例化,得到接口實(shí)例對(duì)象; 利用接口實(shí)例對(duì)象,采用selector方式動(dòng)態(tài)調(diào)用應(yīng)用程序與功能插件間接口的方法,實(shí)現(xiàn)功能插件的加載。5.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述實(shí)現(xiàn)應(yīng)用程序與所述功能插件間的雙向數(shù)據(jù)通信,包括: 利用委托機(jī)制,在調(diào)用所述接口的方法時(shí),傳遞和返回委托對(duì)象,實(shí)現(xiàn)應(yīng)用程序與所述功能插件間的雙向數(shù)據(jù)通信。6.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述將所述功能插件的內(nèi)存路徑發(fā)送給所述功能插件,包括: 利用委托機(jī)制,將功能插件的內(nèi)存路徑發(fā)送給功能插件。7.根據(jù)權(quán)利要求1-6任一項(xiàng)所述的方法,其特征在于,所述應(yīng)用程序是應(yīng)用于1S系統(tǒng)的應(yīng)用程序。8.一種應(yīng)用程序插件化的實(shí)現(xiàn)裝置,其特征在于,包括: 第一獲取模塊,用于獲取應(yīng)用程序的功能插件對(duì)應(yīng)的動(dòng)態(tài)庫(kù)文件,所述動(dòng)態(tài)庫(kù)文件中包含預(yù)先定義的功能插件與應(yīng)用程序間的接口文件; 第二獲取模塊,用于將所述動(dòng)態(tài)庫(kù)文件加載到內(nèi)存中,并從所述動(dòng)態(tài)庫(kù)文件中獲取接口文件; 加載模塊,用于根據(jù)所述接口文件加載所述功能插件,并實(shí)現(xiàn)所述應(yīng)用程序與所述功能插件之間的雙向數(shù)據(jù)通信; 發(fā)送模塊,用于將所述功能插件的內(nèi)存路徑發(fā)送給所述功能插件,以使所述功能插件根據(jù)所述內(nèi)存路徑自加載插件資源。9.根據(jù)權(quán)利要求8所述的裝置,其特征在于,還包括: 第一生成模塊,用于生成所述接口文件; 第二生成模塊,用于將所述接口文件包含在所述動(dòng)態(tài)庫(kù)文件中,并標(biāo)識(shí)所述動(dòng)態(tài)庫(kù)文件的版本; 保存模塊,用于對(duì)所述動(dòng)態(tài)庫(kù)文件進(jìn)行壓縮后保存在服務(wù)端。10.根據(jù)權(quán)利要求9所述的裝置,其特征在于,所述第一獲取模塊包括: 第一單元,用于在應(yīng)用程序需要加載所述功能插件時(shí),判斷本地是否存在需要加載的功能插件的需要版本的動(dòng)態(tài)庫(kù)文件; 第二單元,用于如果本地存在需要版本的動(dòng)態(tài)庫(kù)文件,則在本地獲取所述動(dòng)態(tài)庫(kù)文件; 第三單元,用于如果本地不存在需要版本的動(dòng)態(tài)庫(kù)文件,則從服務(wù)端下載需要版本的動(dòng)態(tài)庫(kù)文件,并對(duì)下載的動(dòng)態(tài)庫(kù)文件進(jìn)行解壓,以獲取解壓后的動(dòng)態(tài)庫(kù)文件。11.根據(jù)權(quán)利要求8所述的裝置,其特征在于,所述加載模塊包括: 第四單元,用于從所述接口文件中獲取接口名稱; 第五單元,用于采用反射機(jī)制,利用所述接口名稱動(dòng)態(tài)生成接口類(lèi),并進(jìn)行實(shí)例化,得到接口實(shí)例對(duì)象; 第六單元,用于利用接口實(shí)例對(duì)象,采用selector方式動(dòng)態(tài)調(diào)用應(yīng)用程序與功能插件間接口的方法,實(shí)現(xiàn)功能插件的加載。12.根據(jù)權(quán)利要求8所述的裝置,其特征在于,所述加載模塊包括: 第七單元,用于利用委托機(jī)制,在調(diào)用所述接口的方法時(shí),傳遞和返回委托對(duì)象,實(shí)現(xiàn)應(yīng)用程序與所述功能插件間的雙向數(shù)據(jù)通信。13.根據(jù)權(quán)利要求8所述的裝置,其特征在于,所述發(fā)送模塊具體用于: 利用委托機(jī)制,將功能插件的內(nèi)存路徑發(fā)送給功能插件。
【文檔編號(hào)】G06F9/445GK105893094SQ201610201697
【公開(kāi)日】2016年8月24日
【申請(qǐng)日】2016年3月31日
【發(fā)明人】林奕斌, 羅序斌
【申請(qǐng)人】百度在線網(wǎng)絡(luò)技術(shù)(北京)有限公司