欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

基于iOS平臺(tái)獲取應(yīng)用程序功能的方法和裝置與流程

文檔序號(hào):12596212閱讀:414來(lái)源:國(guó)知局
基于iOS平臺(tái)獲取應(yīng)用程序功能的方法和裝置與流程

本申請(qǐng)涉及計(jì)算機(jī)應(yīng)用程序技術(shù)領(lǐng)域,具體而言,涉及一種基于iOS平臺(tái)獲取應(yīng)用程序功能的方法和裝置。



背景技術(shù):

在軟件的插件化架構(gòu)實(shí)現(xiàn)中,有比較成熟的實(shí)現(xiàn)實(shí)例,比如eclipse的實(shí)現(xiàn)。eclipse的規(guī)范主要是基于java語(yǔ)言的架構(gòu),在其它語(yǔ)言(比如C++)環(huán)境中還沒有建立標(biāo)準(zhǔn)化的插件系統(tǒng)。

傳統(tǒng)的軟件系統(tǒng)通過(guò)網(wǎng)絡(luò)進(jìn)行軟件升級(jí)有如下幾種方案:

1)、直接下載最新的安裝包安裝。

2)、軟件系統(tǒng)自己檢測(cè)新版本,提示用戶下載并安裝。

3)、在方法2的基礎(chǔ)上,檢測(cè)本地的版本,上報(bào)服務(wù)器,服務(wù)器給出增量包的地址,然后客戶端下載服務(wù)器上的增量升級(jí)包并安裝。

方案1)、2)都是比較常用的方法,但效率比較低,即使有一點(diǎn)小的變化也得下載整個(gè)安裝包。方案3)的增量包的生成技術(shù)決定了下載的冗余度,而且上述3個(gè)方案都需要用戶協(xié)助并且下載完成安裝。

為了解決上述的問(wèn)題,現(xiàn)有技術(shù)中,對(duì)于個(gè)人計(jì)算機(jī)(Personal Computer,即PC)客戶端可以使用微內(nèi)核插件化程序應(yīng)用來(lái)實(shí)現(xiàn)軟件的自動(dòng)升級(jí)。該技術(shù)使用可擴(kuò)展的插件結(jié)構(gòu),通過(guò)插件資源描述文件描述插件之間的依賴關(guān)系,微內(nèi)核可根據(jù)插件資源配置文件嵌套加載插件資源。實(shí)現(xiàn)了自動(dòng)化插件版本判斷、插件的自動(dòng)下載及基于插件的懶加載程序架構(gòu),實(shí)現(xiàn)了系統(tǒng)升級(jí)的自動(dòng)化。但是該方案有如下缺點(diǎn):

1)、未對(duì)移動(dòng)平臺(tái)進(jìn)行說(shuō)明,而且該方案中的方法也無(wú)法直接使用在iOS平臺(tái);

2)、未對(duì)插件在使用本地資源時(shí)的資源競(jìng)爭(zhēng)問(wèn)題提出解決方案,造成不同的插件及可能在本地資源使用時(shí),發(fā)送資源競(jìng)爭(zhēng)而導(dǎo)致系統(tǒng)錯(cuò)誤。

由上分析可知,在現(xiàn)有技術(shù)中,對(duì)蘋果移動(dòng)設(shè)備操作系統(tǒng)上的應(yīng)用程序進(jìn)行升級(jí) 或者功能替換時(shí),需要重新提交整個(gè)應(yīng)用程序到蘋果應(yīng)用程序商店,進(jìn)行漫長(zhǎng)的審核,導(dǎo)致應(yīng)用程序更新效率低。

針對(duì)現(xiàn)有技術(shù)中在移動(dòng)設(shè)備操作系統(tǒng)上更新應(yīng)用程序的效率低的技術(shù)問(wèn)題,目前尚未提出有效的解決方案。



技術(shù)實(shí)現(xiàn)要素:

本申請(qǐng)實(shí)施例提供了一種基于iOS平臺(tái)獲取應(yīng)用程序功能的方法和裝置,以至少解決現(xiàn)有技術(shù)中在移動(dòng)設(shè)備操作系統(tǒng)上更新應(yīng)用程序的效率低的技術(shù)問(wèn)題。

根據(jù)本申請(qǐng)實(shí)施例的一個(gè)方面,提供了一種基于iOS平臺(tái)獲取應(yīng)用程序功能的方法,該方法包括:發(fā)起用于獲取動(dòng)態(tài)庫(kù)信息的請(qǐng)求至動(dòng)態(tài)庫(kù)信息服務(wù)器;接收動(dòng)態(tài)庫(kù)信息服務(wù)器根據(jù)請(qǐng)求返回的動(dòng)態(tài)庫(kù)信息,其中,動(dòng)態(tài)庫(kù)信息至少包括如下信息:動(dòng)態(tài)庫(kù)ID、入口視圖控制器名稱以及動(dòng)態(tài)庫(kù)下載路徑;根據(jù)動(dòng)態(tài)庫(kù)ID在應(yīng)用程序的第一沙盒路徑下建立動(dòng)態(tài)庫(kù)目錄,獲取動(dòng)態(tài)庫(kù)存儲(chǔ)路徑;按照動(dòng)態(tài)庫(kù)下載路徑從動(dòng)態(tài)庫(kù)存放服務(wù)器上下載動(dòng)態(tài)庫(kù),并將動(dòng)態(tài)庫(kù)按照動(dòng)態(tài)庫(kù)存儲(chǔ)路徑存儲(chǔ)至動(dòng)態(tài)庫(kù)目錄下;將下載得到的動(dòng)態(tài)庫(kù)加載至應(yīng)用程序中,以供應(yīng)用程序進(jìn)行調(diào)用。

根據(jù)本申請(qǐng)實(shí)施例的另一方面,還提供了一種基于iOS平臺(tái)獲取應(yīng)用程序功能的裝置,該裝置包括:發(fā)起單元,用于發(fā)起用于獲取動(dòng)態(tài)庫(kù)信息的請(qǐng)求至動(dòng)態(tài)庫(kù)信息服務(wù)器;接收單元,用于接收動(dòng)態(tài)庫(kù)信息服務(wù)器根據(jù)請(qǐng)求返回的動(dòng)態(tài)庫(kù)信息,其中,動(dòng)態(tài)庫(kù)信息至少包括如下信息:動(dòng)態(tài)庫(kù)ID、入口視圖控制器名稱以及動(dòng)態(tài)庫(kù)下載路徑;建立單元,用于根據(jù)動(dòng)態(tài)庫(kù)ID在應(yīng)用程序的第一沙盒路徑下建立動(dòng)態(tài)庫(kù)目錄,獲取動(dòng)態(tài)庫(kù)存儲(chǔ)路徑;下載單元,用于按照動(dòng)態(tài)庫(kù)下載路徑從動(dòng)態(tài)庫(kù)存放服務(wù)器上下載動(dòng)態(tài)庫(kù),并將動(dòng)態(tài)庫(kù)按照動(dòng)態(tài)庫(kù)存儲(chǔ)路徑存儲(chǔ)至動(dòng)態(tài)庫(kù)目錄下;加載單元,用于將下載得到的動(dòng)態(tài)庫(kù)加載至應(yīng)用程序中,以供應(yīng)用程序進(jìn)行調(diào)用。

采用本申請(qǐng)上述實(shí)施例,通過(guò)發(fā)起用于獲取動(dòng)態(tài)庫(kù)信息的請(qǐng)求,并接收動(dòng)態(tài)庫(kù)信息服務(wù)器根據(jù)該請(qǐng)求返回的動(dòng)態(tài)庫(kù)信息,可以根據(jù)接收到的動(dòng)態(tài)庫(kù)信息從動(dòng)態(tài)庫(kù)存放服務(wù)器中將對(duì)應(yīng)的動(dòng)態(tài)庫(kù)下載到應(yīng)用程序中;在下載好動(dòng)態(tài)庫(kù)之后,該應(yīng)用程序可以加載并調(diào)用該動(dòng)態(tài)庫(kù),從而獲取該動(dòng)態(tài)庫(kù)對(duì)應(yīng)的功能,通過(guò)從動(dòng)態(tài)庫(kù)存放服務(wù)器上下載新的動(dòng)態(tài)庫(kù)或更新已有動(dòng)態(tài)庫(kù)的方法,達(dá)到更新應(yīng)用程序功能或增加應(yīng)用程序功能的目的。在本申請(qǐng)實(shí)施例中,在對(duì)應(yīng)用程序進(jìn)行升級(jí)或者功能替換時(shí),無(wú)需重新提交整個(gè)應(yīng)用程序到蘋果應(yīng)用程序商店,進(jìn)行漫長(zhǎng)的審核,而是只需要更新或增加所需功能對(duì)應(yīng)的動(dòng)態(tài)庫(kù)即可達(dá)到更新應(yīng)用程序功能或增加應(yīng)用程序功能的目的。通過(guò)本申請(qǐng)實(shí)施例,解決了現(xiàn)有技術(shù)中在移動(dòng)設(shè)備操作系統(tǒng)上更新應(yīng)用程序的效率低的技術(shù)問(wèn)題, 達(dá)到了無(wú)需重新安裝整個(gè)應(yīng)用程序,實(shí)現(xiàn)通過(guò)動(dòng)態(tài)庫(kù)更新應(yīng)用程序功能或增加應(yīng)用程序功能的技術(shù)效果,操作簡(jiǎn)單方便、操作效率高。

附圖說(shuō)明

此處所說(shuō)明的附圖用來(lái)提供對(duì)本申請(qǐng)的進(jìn)一步理解,構(gòu)成本申請(qǐng)的一部分,本申請(qǐng)的示意性實(shí)施例及其說(shuō)明用于解釋本申請(qǐng),并不構(gòu)成對(duì)本申請(qǐng)的不當(dāng)限定。在附圖中:

圖1是根據(jù)本申請(qǐng)實(shí)施例的一種計(jì)算機(jī)終端的結(jié)構(gòu)框圖;

圖2是根據(jù)本申請(qǐng)實(shí)施例的基于iOS平臺(tái)獲取應(yīng)用程序功能的方法的流程圖;

圖3是根據(jù)本申請(qǐng)實(shí)施例的一種可選的基于iOS平臺(tái)獲取應(yīng)用程序功能的方法的時(shí)序圖;

圖4是根據(jù)本申請(qǐng)實(shí)施例的一種可選的沙盒分配方法的時(shí)序圖;以及

圖5是根據(jù)本申請(qǐng)實(shí)施例的基于iOS平臺(tái)獲取應(yīng)用程序功能的裝置的示意圖。

具體實(shí)施方式

為了使本技術(shù)領(lǐng)域的人員更好地理解本申請(qǐng)方案,下面將結(jié)合本申請(qǐng)實(shí)施例中的附圖,對(duì)本申請(qǐng)實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例僅僅是本申請(qǐng)一部分的實(shí)施例,而不是全部的實(shí)施例?;诒旧暾?qǐng)中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都應(yīng)當(dāng)屬于本申請(qǐng)保護(hù)的范圍。

需要說(shuō)明的是,本申請(qǐng)的說(shuō)明書和權(quán)利要求書及上述附圖中的術(shù)語(yǔ)“第一”、“第二”等是用于區(qū)別類似的對(duì)象,而不必用于描述特定的順序或先后次序。應(yīng)該理解這樣使用的數(shù)據(jù)在適當(dāng)情況下可以互換,以便這里描述的本申請(qǐng)的實(shí)施例能夠以除了在這里圖示或描述的那些以外的順序?qū)嵤4送猓g(shù)語(yǔ)“包括”和“具有”以及他們的任何變形,意圖在于覆蓋不排他的包含,例如,包含了一系列步驟或單元的過(guò)程、方法、系統(tǒng)、產(chǎn)品或設(shè)備不必限于清楚地列出的那些步驟或單元,而是可包括沒有清楚地列出的或?qū)τ谶@些過(guò)程、方法、產(chǎn)品或設(shè)備固有的其它步驟或單元。

首先,在對(duì)本申請(qǐng)實(shí)施例進(jìn)行描述的過(guò)程中出現(xiàn)的部分名詞或術(shù)語(yǔ)適用于如下解釋:

iOS 8:第八代蘋果移動(dòng)設(shè)備操作系統(tǒng),是美國(guó)蘋果公司為iPhone、iPad、iPod touch 等設(shè)備開發(fā)的移動(dòng)操作系統(tǒng)。

動(dòng)態(tài)庫(kù)(framework):即動(dòng)態(tài)鏈接庫(kù),在本申請(qǐng)中是指在iOS系統(tǒng)(如iOS 8)中使用的后綴為.framework的動(dòng)態(tài)鏈接庫(kù)。

沙盒(sandbox):由蘋果公司在iOS系統(tǒng)(如iOS 8)上應(yīng)用的沙盒機(jī)制,iOS應(yīng)用程序只能在為該程序創(chuàng)建的文件系統(tǒng)中讀取文件,不可以去其他地方訪問(wèn),此區(qū)域被稱為沙盒。

API:Application Programming Interface,即應(yīng)用程序編程接口,是一些預(yù)先定義的函數(shù),目的是提供應(yīng)用程序與開發(fā)人員基于某軟件或硬件得以訪問(wèn)一組例程的能力,而又無(wú)需訪問(wèn)源碼,或理解內(nèi)部工作機(jī)制的細(xì)節(jié)。

hook:即鉤子,鉤子實(shí)際上是一個(gè)處理消息的程序段,通過(guò)系統(tǒng)調(diào)用,把它掛入系統(tǒng)。每當(dāng)特定的消息發(fā)出,在沒有到達(dá)目的窗口前,鉤子程序就先捕獲該消息,亦即鉤子函數(shù)先得到控制權(quán)。這時(shí)鉤子函數(shù)即可以加工處理(改變)該消息,也可以不作處理而繼續(xù)傳遞該消息,還可以強(qiáng)制結(jié)束消息的傳遞。

API hook:Application Programming Interface Hook,即應(yīng)用程序編程接口鉤子技術(shù),是一種對(duì)API執(zhí)行結(jié)果進(jìn)行hook,可以改變API執(zhí)行結(jié)果的技術(shù)。

Fishhook:是facebook提供的一個(gè)動(dòng)態(tài)修改鏈接Mach-O符號(hào)表的開源工具。

Mach-O:為Mach Object文件格式的縮寫,也是用于iOS可執(zhí)行文件、目標(biāo)代碼、動(dòng)態(tài)庫(kù)以及內(nèi)核轉(zhuǎn)儲(chǔ)的文件格式。

實(shí)施例1:

根據(jù)本發(fā)明實(shí)施例,還提供了一種基于iOS平臺(tái)獲取應(yīng)用程序功能的方法的實(shí)施例,需要說(shuō)明的是,在附圖的流程圖示出的步驟可以在諸如一組計(jì)算機(jī)可執(zhí)行指令的計(jì)算機(jī)系統(tǒng)中執(zhí)行,并且,雖然在流程圖中示出了邏輯順序,但是在某些情況下,可以以不同于此處的順序執(zhí)行所示出或描述的步驟。

本申請(qǐng)實(shí)施例一所提供的方法實(shí)施例可以在移動(dòng)終端、計(jì)算機(jī)終端或者類似的運(yùn)算裝置中執(zhí)行。以運(yùn)行在計(jì)算機(jī)終端上為例,圖1是根據(jù)本申請(qǐng)實(shí)施例的一種計(jì)算機(jī)終端的結(jié)構(gòu)框圖。如圖1所示,用于基于iOS平臺(tái)獲取應(yīng)用程序功能的計(jì)算機(jī)終端10可以包括一個(gè)或多個(gè)(圖中僅示出一個(gè))處理器102(處理器102可以包括但不限于微處理器MCU或可編程邏輯器件FPGA等的處理裝置)、用于存儲(chǔ)數(shù)據(jù)的存儲(chǔ)器104、以及用于通信功能的傳輸裝置106。本領(lǐng)域普通技術(shù)人員可以理解,圖1所示的結(jié)構(gòu)僅為示意,其并不對(duì)上述電子裝置的結(jié)構(gòu)造成限定。例如,計(jì)算機(jī)終端10還可包括比 圖1中所示更多或者更少的組件,或者具有與圖1所示不同的配置。

存儲(chǔ)器104可用于存儲(chǔ)應(yīng)用程序軟件的軟件程序以及模塊,如本發(fā)明實(shí)施例中的基于iOS平臺(tái)獲取應(yīng)用程序功能的方法對(duì)應(yīng)的程序指令/模塊,處理器102通過(guò)運(yùn)行存儲(chǔ)在存儲(chǔ)器104內(nèi)的軟件程序以及模塊,從而執(zhí)行各種功能應(yīng)用以及數(shù)據(jù)處理,即實(shí)現(xiàn)上述的應(yīng)用程序的漏洞檢測(cè)方法。存儲(chǔ)器104可包括高速隨機(jī)存儲(chǔ)器,還可包括非易失性存儲(chǔ)器,如一個(gè)或者多個(gè)磁性存儲(chǔ)裝置、閃存、或者其他非易失性固態(tài)存儲(chǔ)器。在一些實(shí)例中,存儲(chǔ)器104可進(jìn)一步包括相對(duì)于處理器102遠(yuǎn)程設(shè)置的存儲(chǔ)器,這些遠(yuǎn)程存儲(chǔ)器可以通過(guò)網(wǎng)絡(luò)連接至計(jì)算機(jī)終端10。上述網(wǎng)絡(luò)的實(shí)例包括但不限于互聯(lián)網(wǎng)、企業(yè)內(nèi)部網(wǎng)、局域網(wǎng)、移動(dòng)通信網(wǎng)及其組合。

傳輸裝置106用于經(jīng)由一個(gè)網(wǎng)絡(luò)接收或者發(fā)送數(shù)據(jù)。上述的網(wǎng)絡(luò)具體實(shí)例可包括計(jì)算機(jī)終端10的通信供應(yīng)商提供的無(wú)線網(wǎng)絡(luò)。在一個(gè)實(shí)例中,傳輸裝置106包括一個(gè)網(wǎng)絡(luò)適配器(Network Interface Controller,NIC),其可通過(guò)基站與其他網(wǎng)絡(luò)設(shè)備相連從而可與互聯(lián)網(wǎng)進(jìn)行通訊。在一個(gè)實(shí)例中,傳輸裝置106可以為射頻(Radio Frequency,RF)模塊,其用于通過(guò)無(wú)線方式與互聯(lián)網(wǎng)進(jìn)行通訊。

在上述運(yùn)行環(huán)境下,本申請(qǐng)?zhí)峁┝巳鐖D2所示的基于iOS平臺(tái)獲取應(yīng)用程序功能的方法。圖2是根據(jù)本發(fā)明實(shí)施例一的基于iOS平臺(tái)獲取應(yīng)用程序功能的方法的流程圖,該方法可以包括如下步驟:

步驟S202,發(fā)起用于獲取動(dòng)態(tài)庫(kù)信息的請(qǐng)求至動(dòng)態(tài)庫(kù)信息服務(wù)器。

本申請(qǐng)上述步驟S202中,應(yīng)用程序可以作為應(yīng)用程序客戶端安裝在終端中,應(yīng)用程序可以根據(jù)不同的需求(如更新應(yīng)用程序功能的需求或增加應(yīng)用程序功能的需求等),向存放有動(dòng)態(tài)庫(kù)信息的動(dòng)態(tài)庫(kù)信息服務(wù)器發(fā)起請(qǐng)求,以獲取應(yīng)用程序所需動(dòng)態(tài)庫(kù)的動(dòng)態(tài)庫(kù)信息。

步驟S204,接收動(dòng)態(tài)庫(kù)信息服務(wù)器根據(jù)請(qǐng)求返回的動(dòng)態(tài)庫(kù)信息。其中,動(dòng)態(tài)庫(kù)信息至少可以包括如下信息:動(dòng)態(tài)庫(kù)ID、入口視圖控制器名稱以及動(dòng)態(tài)庫(kù)下載路徑。

本申請(qǐng)上述步驟S204中,動(dòng)態(tài)庫(kù)信息服務(wù)器可以根據(jù)接收到的應(yīng)用程序發(fā)起的請(qǐng)求,將對(duì)應(yīng)的動(dòng)態(tài)庫(kù)信息返回至應(yīng)用程序中。具體地,動(dòng)態(tài)庫(kù)信息可以保存于動(dòng)態(tài)庫(kù)信息服務(wù)器中。應(yīng)用程序在需要下載動(dòng)態(tài)庫(kù)時(shí),向動(dòng)態(tài)庫(kù)信息服務(wù)器發(fā)起用于獲取該動(dòng)態(tài)庫(kù)對(duì)應(yīng)的動(dòng)態(tài)庫(kù)信息的請(qǐng)求,動(dòng)態(tài)庫(kù)信息服務(wù)器根據(jù)接收到的請(qǐng)求將對(duì)應(yīng)的動(dòng)態(tài)庫(kù)信息(如上述的動(dòng)態(tài)庫(kù)ID、入口視圖控制器名稱(如入口ViewController名稱)和動(dòng)態(tài)庫(kù)的下載路徑)返回至應(yīng)用程序。

步驟S206,根據(jù)動(dòng)態(tài)庫(kù)ID在應(yīng)用程序的第一沙盒路徑下建立動(dòng)態(tài)庫(kù)目錄,獲取 動(dòng)態(tài)庫(kù)存儲(chǔ)路徑。其中,在一種可選實(shí)施例中,上述動(dòng)態(tài)庫(kù)目錄可以包括系統(tǒng)文件目錄(如Documents目錄)、臨時(shí)緩存目錄(如tmp目錄)和資源庫(kù)目錄(如Library目錄)等。

具體地,可以根據(jù)動(dòng)態(tài)庫(kù)ID在應(yīng)用程序的第一沙盒路徑(如,iOS 8為應(yīng)用程序分配的系統(tǒng)沙盒路徑,即應(yīng)用程序沙盒路徑)下建立該動(dòng)態(tài)庫(kù)的動(dòng)態(tài)庫(kù)目錄,在建立好動(dòng)態(tài)庫(kù)目錄之后,從該動(dòng)態(tài)庫(kù)目錄中獲取動(dòng)態(tài)庫(kù)存儲(chǔ)路徑,以便后續(xù)存儲(chǔ)動(dòng)態(tài)庫(kù)及其相關(guān)資源(如,加載動(dòng)態(tài)庫(kù)所需的圖片資源等),由于動(dòng)態(tài)庫(kù)ID是唯一的,不同動(dòng)態(tài)庫(kù)所對(duì)應(yīng)的動(dòng)態(tài)庫(kù)目錄不同,也就是說(shuō)不同的動(dòng)態(tài)庫(kù)的存儲(chǔ)位置均不同,不會(huì)存在將不同動(dòng)態(tài)庫(kù)存儲(chǔ)至同一位置的情況??蛇x的,建立好以后的目錄如下:

Documents目錄:應(yīng)用程序沙盒路徑/Documents/Plugins/動(dòng)態(tài)庫(kù)ID/Documents;

tmp目錄:應(yīng)用程序沙盒路徑/Documents/Plugins/動(dòng)態(tài)庫(kù)ID/tmp;

Library目錄:應(yīng)用程序沙盒路徑/Documents/Plugins/動(dòng)態(tài)庫(kù)ID/Library。

步驟S208,按照動(dòng)態(tài)庫(kù)下載路徑從動(dòng)態(tài)庫(kù)存放服務(wù)器上下載動(dòng)態(tài)庫(kù),并將動(dòng)態(tài)庫(kù)按照動(dòng)態(tài)庫(kù)存儲(chǔ)路徑存儲(chǔ)至動(dòng)態(tài)庫(kù)目錄下。

具體地,按照動(dòng)態(tài)庫(kù)下載路徑完成從動(dòng)態(tài)庫(kù)存放服務(wù)器上下載對(duì)應(yīng)的動(dòng)態(tài)庫(kù),并將下載好的動(dòng)態(tài)庫(kù)按照動(dòng)態(tài)庫(kù)存儲(chǔ)路徑存儲(chǔ)至動(dòng)態(tài)庫(kù)目錄所指示的存儲(chǔ)位置。

作為一個(gè)可選的實(shí)施例,步驟S208,按照動(dòng)態(tài)庫(kù)下載路徑從動(dòng)態(tài)庫(kù)存放服務(wù)器上下載動(dòng)態(tài)庫(kù),并將動(dòng)態(tài)庫(kù)按照動(dòng)態(tài)庫(kù)存儲(chǔ)路徑存儲(chǔ)至動(dòng)態(tài)庫(kù)目錄下可以包括:從動(dòng)態(tài)庫(kù)存放服務(wù)器上下載動(dòng)態(tài)庫(kù)的壓縮文件;將下載到的動(dòng)態(tài)庫(kù)的壓縮文件保存至動(dòng)態(tài)庫(kù)目錄下的第一目錄中;將第一目錄中保存的動(dòng)態(tài)庫(kù)的壓縮文件進(jìn)行解壓縮,生成動(dòng)態(tài)庫(kù);將解壓縮得到的動(dòng)態(tài)庫(kù)保存至動(dòng)態(tài)庫(kù)目錄的第二目錄中。

具體地,根據(jù)動(dòng)態(tài)庫(kù)下載路徑,從動(dòng)態(tài)庫(kù)存放服務(wù)器上下載動(dòng)態(tài)庫(kù)對(duì)應(yīng)的壓縮文件,并將下載得到的壓縮文件存儲(chǔ)至動(dòng)態(tài)庫(kù)目錄下的第一目錄(如上述實(shí)施例中的tmp目錄)下;將保存至第一目錄的壓縮文件解壓縮得到動(dòng)態(tài)庫(kù),并將解壓縮得到的動(dòng)態(tài)庫(kù)移動(dòng)至動(dòng)態(tài)庫(kù)目錄的第二目錄(如上述實(shí)施例中的Library目錄)下,即完成對(duì)動(dòng)態(tài)庫(kù)的下載并將下載好的動(dòng)態(tài)庫(kù)存儲(chǔ)至動(dòng)態(tài)庫(kù)目錄。

步驟S210,將下載得到的動(dòng)態(tài)庫(kù)加載至應(yīng)用程序中,以供應(yīng)用程序進(jìn)行調(diào)用。

本申請(qǐng)上述步驟S208可以實(shí)現(xiàn),在下載好動(dòng)態(tài)庫(kù)之后,可以在應(yīng)用程序中加載該動(dòng)態(tài)庫(kù),因此可實(shí)現(xiàn)在對(duì)動(dòng)態(tài)庫(kù)進(jìn)行調(diào)用之后,可以獲取對(duì)應(yīng)的動(dòng)態(tài)庫(kù)功能,從而達(dá)到更新應(yīng)用程序功能或者增加應(yīng)用程序功能的目的。

其中,動(dòng)態(tài)庫(kù)可以為自定義動(dòng)態(tài)庫(kù),并可以作為功能插件動(dòng)態(tài)加載到應(yīng)用程序中,使應(yīng)用程序調(diào)用該動(dòng)態(tài)庫(kù),以獲取相應(yīng)的動(dòng)態(tài)庫(kù)功能。

采用本申請(qǐng)上述實(shí)施例,通過(guò)發(fā)起用于獲取動(dòng)態(tài)庫(kù)信息的請(qǐng)求,并接收動(dòng)態(tài)庫(kù)信息服務(wù)器根據(jù)該請(qǐng)求返回的動(dòng)態(tài)庫(kù)信息,可以根據(jù)接收到的動(dòng)態(tài)庫(kù)信息從動(dòng)態(tài)庫(kù)存放服務(wù)器中將對(duì)應(yīng)的動(dòng)態(tài)庫(kù)下載到應(yīng)用程序中;在下載好動(dòng)態(tài)庫(kù)之后,該應(yīng)用程序可以加載并調(diào)用該動(dòng)態(tài)庫(kù),從而獲取該動(dòng)態(tài)庫(kù)對(duì)應(yīng)的功能,通過(guò)從動(dòng)態(tài)庫(kù)存放服務(wù)器上下載新的動(dòng)態(tài)庫(kù)或更新已有動(dòng)態(tài)庫(kù)的方法,達(dá)到更新應(yīng)用程序功能或增加應(yīng)用程序功能的目的。在本申請(qǐng)實(shí)施例中,在對(duì)應(yīng)用程序進(jìn)行升級(jí)或者功能替換時(shí),無(wú)需重新提交整個(gè)應(yīng)用程序到蘋果應(yīng)用程序商店,進(jìn)行漫長(zhǎng)的審核,而是只需要更新或增加所需功能對(duì)應(yīng)的動(dòng)態(tài)庫(kù)即可達(dá)到更新應(yīng)用程序功能或增加應(yīng)用程序功能的目的。通過(guò)本申請(qǐng)實(shí)施例,解決了現(xiàn)有技術(shù)中在移動(dòng)設(shè)備操作系統(tǒng)上更新應(yīng)用程序的效率低的技術(shù)問(wèn)題,達(dá)到了無(wú)需重新安裝整個(gè)應(yīng)用程序,實(shí)現(xiàn)通過(guò)動(dòng)態(tài)庫(kù)更新應(yīng)用程序功能或增加應(yīng)用程序功能的技術(shù)效果,操作簡(jiǎn)單方便、操作效率高。

需要說(shuō)明的是,本申請(qǐng)實(shí)施例中的動(dòng)態(tài)庫(kù)可以為iOS 8所支持的動(dòng)態(tài)庫(kù)。

具體地,通過(guò)iOS 8支持的動(dòng)態(tài)庫(kù)編譯(如,Xcode6編譯技術(shù))和調(diào)用方式,開發(fā)人員根據(jù)不同需求開發(fā)不同功能的動(dòng)態(tài)庫(kù)(如,開發(fā)人員可以自定義動(dòng)態(tài)的功能,從而滿足不同行業(yè)的業(yè)務(wù)需求),通過(guò)網(wǎng)絡(luò)按需將動(dòng)態(tài)庫(kù)下載到應(yīng)用程序中,再由應(yīng)用程序進(jìn)行加載調(diào)用,達(dá)到iOS 8應(yīng)用程序開發(fā)的目的。

通過(guò)本申請(qǐng)上述實(shí)施例,利用iOS 8支持的動(dòng)態(tài)庫(kù),對(duì)iOS 8上的應(yīng)用程序進(jìn)行更新功能或增加功能的操作,方便快捷、操作效率高。

根據(jù)本申請(qǐng)上述實(shí)施例,步驟S208,將下載得到的動(dòng)態(tài)庫(kù)加載至應(yīng)用程序中可以包括如下步驟:

步驟S1,根據(jù)動(dòng)態(tài)庫(kù)目錄獲取資源目錄。

具體地,根據(jù)上述的動(dòng)態(tài)庫(kù)目錄(如,動(dòng)態(tài)庫(kù)目錄中存儲(chǔ)有動(dòng)態(tài)庫(kù)的Library目錄)獲取資源目錄(如bunld)。其中,bunld中存放有加載動(dòng)態(tài)庫(kù)所需的動(dòng)態(tài)庫(kù)本身的所有可用的資源文件,如,動(dòng)態(tài)庫(kù)顯示界面的圖片、xib文件(用于直觀的展現(xiàn)出動(dòng)態(tài)庫(kù)運(yùn)行時(shí)視圖的外觀)、數(shù)據(jù)文件等。

在一個(gè)可選的實(shí)施例中,bunld=[NSBundle bundleWithPath:Path],用于根據(jù)指定路徑(如上述實(shí)施例中的動(dòng)態(tài)庫(kù)目錄)獲取所需的資源文件。

步驟S3,基于資源目錄和入口視圖控制器名稱創(chuàng)建入口視圖控制器。

在一種可選實(shí)施例中,可以利用資源目錄(如bunld)和入口視圖控制器名稱(如入口ViewController名稱)創(chuàng)建入口視圖控制器(如,入口ViewController)。

可選地,可以通過(guò)如下程序?qū)崿F(xiàn)入口視圖控制器的創(chuàng)建:

其中,NSClassFromString()為iOS系統(tǒng)(如iOS 8)提供的API,其作用為根據(jù)類名獲得相應(yīng)的類;self.rootViewControllerName為入口視圖控制器名稱;那么ClassrootClass=NSClassFromString(self.rootViewControllerName)為根據(jù)入口視圖控制器名稱獲得對(duì)應(yīng)的入口視圖控制器類。

UIViewController為iOS系統(tǒng)(如iOS 8)提供的基礎(chǔ)視圖控制器類,上述的入口視圖控制器類即為其子類;initWithNibName:bundle:為iOS系統(tǒng)(如iOS 8)提供的用視圖控制器名稱和資源目錄創(chuàng)建視圖控制器的方法;rootViewController為一個(gè)UIViewController的一個(gè)實(shí)例對(duì)象指針,可以指向任何UIViewController的子類實(shí)例對(duì)象,在本申請(qǐng)上述實(shí)施例中指向要?jiǎng)?chuàng)建的入口視圖控制器;因此,rootViewController=[[rootClass alloc]initWithNibName:self.rootViewControllerName bundle:self.bundle]為用入口視圖控制器名稱和資源目錄創(chuàng)建一個(gè)入口視圖控制器實(shí)例,并將其放到rootViewController指向的地址。

在該實(shí)施例中,將入口視圖控制器放入rootViewController指向的地址之后,就完成了入口視圖控制器的創(chuàng)建。

步驟S5,在應(yīng)用程序的界面上展示入口視圖控制器對(duì)應(yīng)的根視圖控制器,以完成動(dòng)態(tài)庫(kù)的加載。

具體地,將入口視圖控制器對(duì)應(yīng)的根視圖控制器(如上述的rootViewController)展示在應(yīng)用程序的界面上,以完成動(dòng)態(tài)庫(kù)的加載,以使應(yīng)用程序可以調(diào)用動(dòng)態(tài)庫(kù)的相關(guān)功能。

在本申請(qǐng)上述實(shí)施例中,為實(shí)現(xiàn)對(duì)應(yīng)用程序功能的更新或增加操作,在下載對(duì)應(yīng) 的動(dòng)態(tài)庫(kù)之后,應(yīng)用程序需要加載該動(dòng)態(tài)庫(kù)以將其作為功能插件在應(yīng)用程序上展示出來(lái),從而實(shí)現(xiàn)應(yīng)用程序?qū)υ搫?dòng)態(tài)庫(kù)進(jìn)行調(diào)用。

在本申請(qǐng)上述實(shí)施例中,在將下載得到的動(dòng)態(tài)庫(kù)加載至應(yīng)用程序中之后,上述的方法還可以包括:步驟S212,調(diào)用動(dòng)態(tài)庫(kù)對(duì)應(yīng)的動(dòng)態(tài)庫(kù)功能,該步驟S212可以包括:

步驟S2121,檢測(cè)應(yīng)用程序是否觸發(fā)運(yùn)行動(dòng)態(tài)庫(kù)。具體地,檢測(cè)應(yīng)用程序是否觸發(fā)運(yùn)行該動(dòng)態(tài)庫(kù)(如上述實(shí)施例中的功能插件),并在檢測(cè)到應(yīng)用程序觸發(fā)了運(yùn)行動(dòng)態(tài)庫(kù)的情況下,執(zhí)行步驟S2122。

步驟S2122,調(diào)用動(dòng)態(tài)庫(kù)對(duì)應(yīng)的系統(tǒng)文件路徑接口。具體地,當(dāng)應(yīng)用程序調(diào)用動(dòng)態(tài)庫(kù)時(shí),動(dòng)態(tài)庫(kù)需要訪問(wèn)本地資源以實(shí)現(xiàn)動(dòng)態(tài)庫(kù)的功能。為了達(dá)到上述目的,應(yīng)用程序通過(guò)調(diào)用系統(tǒng)文件路徑接口獲得訪問(wèn)資源所需的訪問(wèn)路徑,即調(diào)用系統(tǒng)文件路徑接口獲取動(dòng)態(tài)庫(kù)訪問(wèn)資源所需的沙盒路徑。

但是,在通常情況下應(yīng)用程序調(diào)用系統(tǒng)文件路徑接口時(shí)返回的是應(yīng)用程序所對(duì)應(yīng)的第一沙盒路徑。在這種情況下,若應(yīng)用程序同時(shí)調(diào)用兩個(gè)或多個(gè)不同的動(dòng)態(tài)庫(kù),則將控制每個(gè)動(dòng)態(tài)庫(kù)都按照第一沙盒路徑訪問(wèn)資源,這樣就導(dǎo)致不同動(dòng)態(tài)庫(kù)在訪問(wèn)資源時(shí)發(fā)生資源競(jìng)爭(zhēng)而導(dǎo)致系統(tǒng)錯(cuò)誤。為了解決該問(wèn)題,需要在系統(tǒng)文件路徑接口將第一沙盒路徑返回至應(yīng)用程序之前,對(duì)系統(tǒng)文件路徑接口將要返回的第一沙盒路徑進(jìn)行hook攔截。

步驟S2123,使用系統(tǒng)文件路徑接口獲取第一沙盒路徑,對(duì)第一沙盒路徑進(jìn)行攔截,并讀取第一沙盒路徑下已經(jīng)創(chuàng)建的動(dòng)態(tài)庫(kù)目錄,得到攔截后的訪問(wèn)路徑。具體地,通過(guò)API hook技術(shù)對(duì)系統(tǒng)文件路徑接口的調(diào)用結(jié)果(即上述的第一沙盒路徑)進(jìn)行攔截,并將讀取第一沙盒路徑下已經(jīng)創(chuàng)建的該動(dòng)態(tài)庫(kù)的動(dòng)態(tài)庫(kù)目錄,使用該動(dòng)態(tài)庫(kù)目錄替換調(diào)用結(jié)果中的第一沙盒路徑,作為攔截后的訪問(wèn)路徑保存至調(diào)用結(jié)果中。即,將該調(diào)用結(jié)果的第一沙盒路徑重新定義為動(dòng)態(tài)庫(kù)的唯一沙盒路徑(即上述的動(dòng)態(tài)庫(kù)目錄),由于動(dòng)態(tài)庫(kù)目錄是根據(jù)唯一的動(dòng)態(tài)庫(kù)ID創(chuàng)建的,因此每個(gè)動(dòng)態(tài)庫(kù)所對(duì)應(yīng)的動(dòng)態(tài)庫(kù)目錄均是唯一的,即為每個(gè)動(dòng)態(tài)庫(kù)分配了獨(dú)立的沙盒路徑,避免了應(yīng)用程序同時(shí)調(diào)用多個(gè)動(dòng)態(tài)庫(kù)時(shí)不同動(dòng)態(tài)庫(kù)獲取到相同的路徑(即第一沙盒路徑)而導(dǎo)致不同動(dòng)態(tài)庫(kù)在訪問(wèn)本地資源時(shí)發(fā)生沖突的問(wèn)題。

在一個(gè)可選的實(shí)施例中,攔截后的訪問(wèn)路徑可以為:應(yīng)用程序沙盒路徑/Documents/Plugins/動(dòng)態(tài)庫(kù)ID/。

步驟S2124,將攔截后的訪問(wèn)路徑返回至應(yīng)用程序。具體地,將API hook攔截后得到的調(diào)用結(jié)果返回至應(yīng)用程序,即將動(dòng)態(tài)庫(kù)目錄返回至應(yīng)用程序作為動(dòng)態(tài)庫(kù)訪問(wèn)資 源時(shí)的訪問(wèn)路徑,而不是返回第一沙盒路徑。

步驟S2125,控制動(dòng)態(tài)庫(kù)按照攔截后的訪問(wèn)路徑訪問(wèn)資源,以調(diào)用動(dòng)態(tài)庫(kù)的功能。具體地,將與動(dòng)態(tài)庫(kù)對(duì)應(yīng)的唯一的動(dòng)態(tài)庫(kù)目錄作為訪問(wèn)路徑返回至應(yīng)用程序,由應(yīng)用程序控制動(dòng)態(tài)庫(kù)按照該唯一的訪問(wèn)路徑訪問(wèn)資源,解決了現(xiàn)有技術(shù)中各個(gè)動(dòng)態(tài)庫(kù)在使用本地資源時(shí)的資源競(jìng)爭(zhēng)問(wèn)題。

在上述實(shí)施例中,當(dāng)應(yīng)用程序沒有運(yùn)行任何動(dòng)態(tài)庫(kù)時(shí),應(yīng)用程序調(diào)用系統(tǒng)文件路徑接口將返回第一沙盒路徑(如實(shí)際的應(yīng)用程序沙盒路徑);當(dāng)應(yīng)用程序運(yùn)行動(dòng)態(tài)庫(kù)時(shí),調(diào)用系統(tǒng)文件路徑接口將返回?cái)r截后重新定義的訪問(wèn)路徑(即正在運(yùn)行的動(dòng)態(tài)庫(kù)所對(duì)應(yīng)的動(dòng)態(tài)庫(kù)目錄):應(yīng)用程序沙盒路徑/Documents/Plugins/動(dòng)態(tài)庫(kù)ID/。由于動(dòng)態(tài)庫(kù)ID是唯一的,因此得到的訪問(wèn)路徑(即動(dòng)態(tài)庫(kù)目錄)也是唯一的,即為每個(gè)動(dòng)態(tài)庫(kù)分配了獨(dú)立的沙盒路徑,避免了不同動(dòng)態(tài)庫(kù)在訪問(wèn)本地資源時(shí)由于資源訪問(wèn)沖突而導(dǎo)致系統(tǒng)錯(cuò)誤的問(wèn)題。

通過(guò)本申請(qǐng)上述實(shí)施例,為了避免動(dòng)態(tài)庫(kù)在使用本地資源時(shí)產(chǎn)生資源競(jìng)爭(zhēng)而導(dǎo)致系統(tǒng)錯(cuò)誤的問(wèn)題,通過(guò)對(duì)系統(tǒng)文件路徑接口進(jìn)行API hook攔截,為不同的動(dòng)態(tài)庫(kù)分配唯一且獨(dú)立的訪問(wèn)路徑,使得每個(gè)動(dòng)態(tài)庫(kù)只能訪問(wèn)自己被分配的沙盒(即動(dòng)態(tài)庫(kù)目錄所指示的存儲(chǔ)區(qū)域),從而實(shí)現(xiàn)動(dòng)態(tài)庫(kù)之間在訪問(wèn)本地資源時(shí)互不干擾的效果。

下面結(jié)合圖3,以在應(yīng)用程序的更新操作的應(yīng)用場(chǎng)景為例,本申請(qǐng)上述實(shí)施例可以提供的一種可選方案如下所示。該方法可以包括如下步驟:

步驟S301,應(yīng)用程序20向動(dòng)態(tài)庫(kù)信息服務(wù)器40發(fā)送動(dòng)態(tài)庫(kù)信息請(qǐng)求。

步驟S302,動(dòng)態(tài)庫(kù)信息服務(wù)器40根據(jù)請(qǐng)求將動(dòng)態(tài)庫(kù)信息返回應(yīng)用程序20。

其中,動(dòng)態(tài)庫(kù)信息包括動(dòng)態(tài)庫(kù)ID、入口視圖控制器名稱以及動(dòng)態(tài)庫(kù)下載路徑。

步驟S303,應(yīng)用程序20根據(jù)動(dòng)態(tài)庫(kù)ID生成動(dòng)態(tài)庫(kù)目錄。

其中,動(dòng)態(tài)庫(kù)目錄可以包括系統(tǒng)文件目錄(如Documents目錄)、臨時(shí)緩存目錄(如tmp目錄)和資源庫(kù)目錄(如Library目錄)。

步驟S304,應(yīng)用程序20根據(jù)動(dòng)態(tài)庫(kù)下載路徑請(qǐng)求從動(dòng)態(tài)庫(kù)存放服務(wù)器60上下載對(duì)應(yīng)的動(dòng)態(tài)庫(kù)。

步驟S305,動(dòng)態(tài)庫(kù)存放服務(wù)器60將動(dòng)態(tài)庫(kù)的壓縮文件發(fā)送至應(yīng)用程序20。

步驟S306,應(yīng)用程序20將壓縮文件保存至tmp目錄并解壓得到動(dòng)態(tài)庫(kù)。

步驟S307,應(yīng)用程序20將動(dòng)態(tài)庫(kù)移動(dòng)至Library目錄。

步驟S308,應(yīng)用程序20加載下載好的動(dòng)態(tài)庫(kù)。

步驟S309,應(yīng)用程序20調(diào)用動(dòng)態(tài)庫(kù),進(jìn)入動(dòng)態(tài)庫(kù)功能。

步驟S310,動(dòng)態(tài)庫(kù)21調(diào)用結(jié)束,返回應(yīng)用程序20。

在該實(shí)施例中,動(dòng)態(tài)庫(kù)為iOS 8所支持的動(dòng)態(tài)庫(kù)。

通過(guò)本申請(qǐng)上述實(shí)施例,利用iOS 8支持的動(dòng)態(tài)庫(kù),在對(duì)應(yīng)用程序進(jìn)行升級(jí)或者功能替換時(shí),無(wú)需重新提交整個(gè)應(yīng)用程序到蘋果應(yīng)用程序商店,進(jìn)行漫長(zhǎng)的審核,而是只需要更新或增加所需功能對(duì)應(yīng)的動(dòng)態(tài)庫(kù)即可達(dá)到更新應(yīng)用程序功能或增加應(yīng)用程序功能的目的,方便快捷,大大提高了應(yīng)用程序更新效率。

下面結(jié)合圖4,以分別獲取兩個(gè)動(dòng)態(tài)庫(kù)A或B的沙盒路徑為例,對(duì)本申請(qǐng)上述實(shí)施例一種確定沙盒路徑的方案進(jìn)行詳細(xì)介紹如下。如圖4所示,該方法可以包括如下步驟:

步驟S401,將正在運(yùn)行的動(dòng)態(tài)庫(kù)設(shè)置為動(dòng)態(tài)庫(kù)A。

步驟S402,進(jìn)入動(dòng)態(tài)庫(kù)A子線程以獲取動(dòng)態(tài)庫(kù)A的沙盒路徑。

步驟S403,將動(dòng)態(tài)庫(kù)A的沙盒路徑返回至應(yīng)用程序20,以供應(yīng)用程序控制動(dòng)態(tài)庫(kù)A按照返回的動(dòng)態(tài)庫(kù)A的沙盒路徑訪問(wèn)本地資源。其中,動(dòng)態(tài)庫(kù)A的沙盒路徑即本申請(qǐng)上述實(shí)施例中的第二沙盒路徑。

步驟S404,將正在運(yùn)行的動(dòng)態(tài)庫(kù)設(shè)置為動(dòng)態(tài)庫(kù)B。

步驟S405,進(jìn)入動(dòng)態(tài)庫(kù)B子線程以獲取動(dòng)態(tài)庫(kù)B的沙盒路徑。

步驟S406,將動(dòng)態(tài)庫(kù)B的沙盒路徑返回應(yīng)用程序,以供應(yīng)用程序控制動(dòng)態(tài)庫(kù)B按照返回的動(dòng)態(tài)庫(kù)B的沙盒路徑訪問(wèn)本地資源。其中,動(dòng)態(tài)庫(kù)B的沙盒路徑即本申請(qǐng)上述實(shí)施例中的第二沙盒路徑。

在該實(shí)施例中,若不執(zhí)行API hook攔截操作,那么動(dòng)態(tài)庫(kù)A和動(dòng)態(tài)庫(kù)B將返回相同的沙盒路徑(即應(yīng)用程序沙盒路徑),這將導(dǎo)致動(dòng)態(tài)庫(kù)A和動(dòng)態(tài)庫(kù)B在訪問(wèn)本地資源時(shí)發(fā)生沖突。通過(guò)本申請(qǐng)上述實(shí)施例,為正在運(yùn)行的動(dòng)態(tài)庫(kù)A和動(dòng)態(tài)庫(kù)B分別分配了獨(dú)立的訪問(wèn)路徑,避免了動(dòng)態(tài)庫(kù)A和動(dòng)態(tài)庫(kù)B訪問(wèn)本地資源時(shí)的沖突。

此處需要說(shuō)明的是,在一個(gè)可選的實(shí)施例中,需要進(jìn)行API hook的系統(tǒng)文件路徑接口可以包括如下三類:

1、沙盒相關(guān)API:API:NSString*NSHomeDirectory(void),用于返回當(dāng)前用戶主 目錄的路徑;NSString*NSTemporaryDirectory(void),用于返回可用于創(chuàng)建臨時(shí)文件的路徑目錄;NSArray*NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory directory,NSSearchPathDomainMask domainMask,BOOL expandTilde),用于用戶查找特定的目錄,如:NSDocumentationDirectory,NSUserDirectory等等。

2、線程相關(guān)API:pthread_exit,用于終止調(diào)用它的線程并返回一個(gè)指向某個(gè)對(duì)象的指針;pthread_create,是操作系統(tǒng)(如iOS 8系統(tǒng))的創(chuàng)建線程的函數(shù);dispatch_group_async可以監(jiān)聽一組任務(wù)是否完成,完成后得到通知執(zhí)行其他的操作;dispatch_async的功能是將代碼塊(如block)發(fā)送到指定線程去執(zhí)行,當(dāng)前線程不會(huì)等待,會(huì)繼續(xù)向下執(zhí)行。

3、資源相關(guān)API:[NSBundle mainBundle]是使用類方法創(chuàng)建一個(gè)NSBundle對(duì)象;[NSBundle allBundles]是使用NSBundle獲取所有的bundle信息(由于iOS 8安全沙盒機(jī)制的限制,此處所指的所有的獲取的資源,是應(yīng)用程序的資源)。

對(duì)上述三類API進(jìn)行分析可知,按照編譯語(yǔ)言可以將上述三類API重新分為兩類:C類型API和OC類型API。下面將分別針對(duì)C類型API和OC類型API的hook進(jìn)行說(shuō)明。

1、對(duì)于C類型API的hook:

根據(jù)蘋果文檔介紹,對(duì)于C類型API,通過(guò)fishhook可以重新鏈接/替換本地符號(hào),以實(shí)現(xiàn)對(duì)C類型API的hook。

具體地,蘋果的mach-o結(jié)構(gòu)中的__DATA區(qū)有兩個(gè)section和動(dòng)態(tài)符號(hào)鏈接相關(guān):__nl_symbol_ptr和__la_symbol_ptr。其中,__nl_symbol_ptr為一個(gè)指針數(shù)組,直接對(duì)應(yīng)non-lazy綁定數(shù)據(jù);__la_symbol_ptr也是一個(gè)指針數(shù)組,通過(guò)dyld_stub_binder輔助鏈接。<mach-o/loader.h>的section頭提供符號(hào)表的偏移量。

其中,符號(hào)表中每一個(gè)結(jié)構(gòu)都是一個(gè)nlist結(jié)構(gòu)體,其中包含字符表偏移量。通過(guò)字符表偏移量最終確定函數(shù)指針。在hook C類型API時(shí),通過(guò)對(duì)間接符號(hào)表的偏移量進(jìn)行修改,可以提供一個(gè)假的nlist結(jié)構(gòu)體,從而達(dá)到hook的目的。

2、對(duì)于OC類型API的hook:

iOS系統(tǒng)(例如iOS 8)提供了強(qiáng)大的運(yùn)行時(shí)技術(shù),可以動(dòng)態(tài)修改selector字符串和對(duì)應(yīng)的函數(shù)實(shí)現(xiàn)如下內(nèi)容,從而實(shí)現(xiàn)對(duì)OC類型API的hook操作:

Method originalMethod=class_getClassMethod(class,originalSelector);

Method swizzledMethod=class_getClassMethod(class,swizzledSelector);

method_exchangeImplementations(originalMethod,swizzledMethod)。

通過(guò)本申請(qǐng)上述實(shí)施例,可以實(shí)現(xiàn)必要的系統(tǒng)文件路徑API hook,使每個(gè)動(dòng)態(tài)庫(kù)都有獨(dú)立的沙盒路徑,以確保動(dòng)態(tài)庫(kù)之間本地資源的獨(dú)立使用。

需要說(shuō)明的是,在附圖的流程圖示出的步驟可以在諸如一組計(jì)算機(jī)可執(zhí)行指令的計(jì)算機(jī)系統(tǒng)中執(zhí)行,并且,雖然在流程圖中示出了邏輯順序,但是在某些情況下,可以以不同于此處的順序執(zhí)行所示出或描述的步驟。

實(shí)施例2:

圖5是根據(jù)本申請(qǐng)實(shí)施例的基于iOS平臺(tái)獲取應(yīng)用程序功能的裝置的示意圖,如圖5所示,該裝置可以包括:發(fā)起單元51、接收單元53、建立單元55、下載單元57以及加載單元59。

其中,發(fā)起單元51用于發(fā)起用于獲取動(dòng)態(tài)庫(kù)信息的請(qǐng)求至動(dòng)態(tài)庫(kù)信息服務(wù)器。具體地,應(yīng)用程序可以作為應(yīng)用程序客戶端安裝在終端中,應(yīng)用程序可以根據(jù)不同的需求(如更新應(yīng)用程序功能的需求或增加應(yīng)用程序功能的需求等),向存放有動(dòng)態(tài)庫(kù)信息的動(dòng)態(tài)庫(kù)信息服務(wù)器發(fā)起請(qǐng)求,以獲取應(yīng)用程序所需動(dòng)態(tài)庫(kù)的動(dòng)態(tài)庫(kù)信息。

接收單元53用于接收動(dòng)態(tài)庫(kù)信息服務(wù)器根據(jù)請(qǐng)求返回的動(dòng)態(tài)庫(kù)信息,其中,動(dòng)態(tài)庫(kù)信息至少包括如下信息:動(dòng)態(tài)庫(kù)ID、入口視圖控制器名稱以及動(dòng)態(tài)庫(kù)下載路徑。

具體地,動(dòng)態(tài)庫(kù)信息服務(wù)器可以根據(jù)接收到的應(yīng)用程序發(fā)起的請(qǐng)求,將對(duì)應(yīng)的動(dòng)態(tài)庫(kù)信息返回至應(yīng)用程序中。具體地,動(dòng)態(tài)庫(kù)信息可以保存于動(dòng)態(tài)庫(kù)信息服務(wù)器中。應(yīng)用程序在需要下載動(dòng)態(tài)庫(kù)時(shí),向動(dòng)態(tài)庫(kù)信息服務(wù)器發(fā)起用于獲取該動(dòng)態(tài)庫(kù)對(duì)應(yīng)的動(dòng)態(tài)庫(kù)信息的請(qǐng)求,動(dòng)態(tài)庫(kù)信息服務(wù)器根據(jù)接收到的請(qǐng)求將對(duì)應(yīng)的動(dòng)態(tài)庫(kù)信息(如上述的動(dòng)態(tài)庫(kù)ID、入口視圖控制器名稱(如入口ViewController名稱)和動(dòng)態(tài)庫(kù)的下載路徑)返回至應(yīng)用程序。

建立單元55用于根據(jù)動(dòng)態(tài)庫(kù)ID在應(yīng)用程序的第一沙盒路徑下建立動(dòng)態(tài)庫(kù)目錄,獲取動(dòng)態(tài)庫(kù)存儲(chǔ)路徑。其中,在一種可選實(shí)施例中,上述動(dòng)態(tài)庫(kù)目錄可以包括系統(tǒng)文件目錄(如Documents目錄)、臨時(shí)緩存目錄(如tmp目錄)和資源庫(kù)目錄(如Library目錄)等。

具體地,可以根據(jù)動(dòng)態(tài)庫(kù)ID在應(yīng)用程序的第一沙盒路徑(如,iOS 8為應(yīng)用程序分配的系統(tǒng)沙盒路徑,即應(yīng)用程序沙盒路徑)下建立該動(dòng)態(tài)庫(kù)的動(dòng)態(tài)庫(kù)目錄,在建立好動(dòng)態(tài)庫(kù)目錄之后,從該動(dòng)態(tài)庫(kù)目錄中獲取動(dòng)態(tài)庫(kù)存儲(chǔ)路徑,以便后續(xù)存儲(chǔ)動(dòng)態(tài)庫(kù)及其相關(guān)資源(如,加載動(dòng)態(tài)庫(kù)所需的圖片資源等),由于動(dòng)態(tài)庫(kù)ID是唯一的,不同動(dòng) 態(tài)庫(kù)所對(duì)應(yīng)的動(dòng)態(tài)庫(kù)目錄不同,也就是說(shuō)不同的動(dòng)態(tài)庫(kù)的存儲(chǔ)位置均不同,不會(huì)存在將不同動(dòng)態(tài)庫(kù)存儲(chǔ)至同一位置的情況??蛇x的,建立好以后的目錄如下:

Documents目錄:應(yīng)用程序沙盒路徑/Documents/Plugins/動(dòng)態(tài)庫(kù)ID/Documents;

tmp目錄:應(yīng)用程序沙盒路徑/Documents/Plugins/動(dòng)態(tài)庫(kù)ID/tmp;

Library目錄:應(yīng)用程序沙盒路徑/Documents/Plugins/動(dòng)態(tài)庫(kù)ID/Library。

下載單元57用于按照動(dòng)態(tài)庫(kù)下載路徑從動(dòng)態(tài)庫(kù)存放服務(wù)器上下載動(dòng)態(tài)庫(kù),并將動(dòng)態(tài)庫(kù)按照動(dòng)態(tài)庫(kù)存儲(chǔ)路徑存儲(chǔ)至動(dòng)態(tài)庫(kù)目錄下。

具體地,按照動(dòng)態(tài)庫(kù)下載路徑完成從動(dòng)態(tài)庫(kù)存放服務(wù)器上下載對(duì)應(yīng)的動(dòng)態(tài)庫(kù),并將下載好的動(dòng)態(tài)庫(kù)按照動(dòng)態(tài)庫(kù)存儲(chǔ)路徑存儲(chǔ)至動(dòng)態(tài)庫(kù)目錄所指示的存儲(chǔ)位置。

作為一個(gè)可選的實(shí)施例,下載單元57可以包括:下載模塊,用于從動(dòng)態(tài)庫(kù)存放服務(wù)器上下載動(dòng)態(tài)庫(kù)的壓縮文件;第一保存模塊,用于將下載到的動(dòng)態(tài)庫(kù)的壓縮文件保存至動(dòng)態(tài)庫(kù)目錄下的第一目錄中;解壓縮模塊,用于將第一目錄中保存的動(dòng)態(tài)庫(kù)的壓縮文件進(jìn)行解壓縮,生成動(dòng)態(tài)庫(kù);第二保存模塊,用于將解壓縮得到的動(dòng)態(tài)庫(kù)保存至動(dòng)態(tài)庫(kù)目錄的第二目錄中。

具體地,根據(jù)動(dòng)態(tài)庫(kù)下載路徑,從動(dòng)態(tài)庫(kù)存放服務(wù)器上下載動(dòng)態(tài)庫(kù)對(duì)應(yīng)的壓縮文件,并將下載得到的壓縮文件存儲(chǔ)至動(dòng)態(tài)庫(kù)目錄下的第一目錄(如上述實(shí)施例中的tmp目錄)下;將保存至第一目錄的壓縮文件解壓縮得到動(dòng)態(tài)庫(kù),并將解壓縮得到的動(dòng)態(tài)庫(kù)移動(dòng)至動(dòng)態(tài)庫(kù)目錄的第二目錄(如上述實(shí)施例中的Library目錄)下,即完成對(duì)動(dòng)態(tài)庫(kù)的下載并將下載好的動(dòng)態(tài)庫(kù)存儲(chǔ)至動(dòng)態(tài)庫(kù)目錄。

加載單元59用于將下載得到的動(dòng)態(tài)庫(kù)加載至應(yīng)用程序中,以供應(yīng)用程序進(jìn)行調(diào)用。

具體地,在下載好動(dòng)態(tài)庫(kù)之后,可以在應(yīng)用程序中加載該動(dòng)態(tài)庫(kù),因此可實(shí)現(xiàn)在對(duì)動(dòng)態(tài)庫(kù)進(jìn)行調(diào)用之后,可以獲取對(duì)應(yīng)的動(dòng)態(tài)庫(kù)功能,從而達(dá)到更新應(yīng)用程序功能或者增加應(yīng)用程序功能的目的。

其中,動(dòng)態(tài)庫(kù)可以為自定義動(dòng)態(tài)庫(kù),并可以作為功能插件動(dòng)態(tài)加載到應(yīng)用程序中,使應(yīng)用程序調(diào)用該動(dòng)態(tài)庫(kù),以獲取相應(yīng)的動(dòng)態(tài)庫(kù)功能。

采用本申請(qǐng)上述實(shí)施例,通過(guò)發(fā)起用于獲取動(dòng)態(tài)庫(kù)信息的請(qǐng)求,并接收動(dòng)態(tài)庫(kù)信息服務(wù)器根據(jù)該請(qǐng)求返回的動(dòng)態(tài)庫(kù)信息,可以根據(jù)接收到的動(dòng)態(tài)庫(kù)信息從動(dòng)態(tài)庫(kù)存放服務(wù)器中將對(duì)應(yīng)的動(dòng)態(tài)庫(kù)下載到應(yīng)用程序中;在下載好動(dòng)態(tài)庫(kù)之后,該應(yīng)用程序可以加載并調(diào)用該動(dòng)態(tài)庫(kù),從而獲取該動(dòng)態(tài)庫(kù)對(duì)應(yīng)的功能,通過(guò)從動(dòng)態(tài)庫(kù)存放服務(wù)器上下 載新的動(dòng)態(tài)庫(kù)或更新已有動(dòng)態(tài)庫(kù)的方法,達(dá)到更新應(yīng)用程序功能或增加應(yīng)用程序功能的目的。在本申請(qǐng)實(shí)施例中,在對(duì)應(yīng)用程序進(jìn)行升級(jí)或者功能替換時(shí),無(wú)需重新提交整個(gè)應(yīng)用程序到蘋果應(yīng)用程序商店,進(jìn)行漫長(zhǎng)的審核,而是只需要更新或增加所需功能對(duì)應(yīng)的動(dòng)態(tài)庫(kù)即可達(dá)到更新應(yīng)用程序功能或增加應(yīng)用程序功能的目的。通過(guò)本申請(qǐng)實(shí)施例,解決了現(xiàn)有技術(shù)中在移動(dòng)設(shè)備操作系統(tǒng)上更新應(yīng)用程序的效率低的技術(shù)問(wèn)題,達(dá)到了無(wú)需重新安裝整個(gè)應(yīng)用程序,實(shí)現(xiàn)通過(guò)動(dòng)態(tài)庫(kù)更新應(yīng)用程序功能或增加應(yīng)用程序功能的技術(shù)效果,操作簡(jiǎn)單方便、操作效率高。

需要說(shuō)明的是,本申請(qǐng)實(shí)施例中的動(dòng)態(tài)庫(kù)可以為iOS 8所支持的動(dòng)態(tài)庫(kù)。

具體地,通過(guò)iOS 8支持的動(dòng)態(tài)庫(kù)編譯(如,Xcode6編譯技術(shù))和調(diào)用方式,開發(fā)人員根據(jù)不同需求開發(fā)不同功能的動(dòng)態(tài)庫(kù)(如,開發(fā)人員可以自定義動(dòng)態(tài)的功能,從而滿足不同行業(yè)的業(yè)務(wù)需求),通過(guò)網(wǎng)絡(luò)按需將動(dòng)態(tài)庫(kù)下載到應(yīng)用程序中,再由應(yīng)用程序進(jìn)行加載調(diào)用,達(dá)到iOS 8應(yīng)用程序開發(fā)的目的。

通過(guò)本申請(qǐng)上述實(shí)施例,利用iOS 8支持的動(dòng)態(tài)庫(kù),對(duì)iOS 8上的應(yīng)用程序進(jìn)行更新功能或增加功能的操作,方便快捷、操作效率高。

根據(jù)本申請(qǐng)上述實(shí)施例,加載單元59可以包括:獲取模塊、創(chuàng)建模塊和展示模塊。

其中,獲取模塊用于根據(jù)動(dòng)態(tài)庫(kù)目錄獲取資源目錄。具體地,根據(jù)上述的動(dòng)態(tài)庫(kù)目錄(如,動(dòng)態(tài)庫(kù)目錄中存儲(chǔ)有動(dòng)態(tài)庫(kù)的Library目錄)獲取資源目錄(如bunld)。其中,bunld中存放有加載動(dòng)態(tài)庫(kù)所需的動(dòng)態(tài)庫(kù)本身的所有可用的資源文件,如,動(dòng)態(tài)庫(kù)顯示界面的圖片、xib文件(用于直觀的展現(xiàn)出動(dòng)態(tài)庫(kù)運(yùn)行時(shí)視圖的外觀)、數(shù)據(jù)文件等。

在一個(gè)可選的實(shí)施例中,bunld=[NSBundle bundleWithPath:Path],用于根據(jù)指定路徑(如上述實(shí)施例中的動(dòng)態(tài)庫(kù)目錄)獲取所需的資源文件。

創(chuàng)建模塊用于基于資源目錄和入口視圖控制器名稱創(chuàng)建入口視圖控制器。在一種可選實(shí)施例中,可以利用資源目錄(如bunld)和入口視圖控制器名稱(如入口ViewController名稱)創(chuàng)建入口視圖控制器(如,入口ViewController)。

可選地,可以通過(guò)如下程序?qū)崿F(xiàn)入口視圖控制器的創(chuàng)建:

其中,NSClassFromString()為iOS系統(tǒng)(如iOS 8)提供的API,其作用為根據(jù)類名獲得相應(yīng)的類;self.rootViewControllerName為入口視圖控制器名稱;那么Class rootClass=NSClassFromString(self.rootViewControllerName)為根據(jù)入口視圖控制器名稱獲得對(duì)應(yīng)的入口視圖控制器類。

UIViewController為iOS系統(tǒng)(如iOS 8)提供的基礎(chǔ)視圖控制器類,上述的入口視圖控制器類即為其子類;initWithNibName:bundle:為iOS系統(tǒng)(如iOS 8)提供的用視圖控制器名稱和資源目錄創(chuàng)建視圖控制器的方法;rootViewController為一個(gè)UIViewController的一個(gè)實(shí)例對(duì)象指針,可以指向任何UIViewController的子類實(shí)例對(duì)象,在本申請(qǐng)上述實(shí)施例中指向要?jiǎng)?chuàng)建的入口視圖控制器;因此,rootViewController=[[rootClass alloc]initWithNibName:self.rootViewControllerName bundle:self.bundle]為用入口視圖控制器名稱和資源目錄創(chuàng)建一個(gè)入口視圖控制器實(shí)例,并將其放到rootViewController指向的地址。

在該實(shí)施例中,將入口視圖控制器放入rootViewController指向的地址之后,就完成了入口視圖控制器的創(chuàng)建。

展示模塊用于在應(yīng)用程序的界面上展示入口視圖控制器對(duì)應(yīng)的根視圖控制器,以完成動(dòng)態(tài)庫(kù)的加載。

具體地,將入口視圖控制器對(duì)應(yīng)的根視圖控制器(如上述的rootViewController)展示在應(yīng)用程序的界面上,以完成動(dòng)態(tài)庫(kù)的加載,以使應(yīng)用程序可以調(diào)用動(dòng)態(tài)庫(kù)的相關(guān)功能。

在本申請(qǐng)上述實(shí)施例中,為實(shí)現(xiàn)對(duì)應(yīng)用程序功能的更新或增加操作,在下載對(duì)應(yīng)的動(dòng)態(tài)庫(kù)之后,應(yīng)用程序需要加載該動(dòng)態(tài)庫(kù)以將其作為功能插件在應(yīng)用程序上展示出來(lái),從而實(shí)現(xiàn)應(yīng)用程序?qū)υ搫?dòng)態(tài)庫(kù)進(jìn)行調(diào)用。

在本申請(qǐng)上述實(shí)施例中,上述的裝置還可以包括:調(diào)用單元,用于在將下載得到的動(dòng)態(tài)庫(kù)加載至應(yīng)用程序中之后,調(diào)用動(dòng)態(tài)庫(kù)對(duì)應(yīng)的動(dòng)態(tài)庫(kù)功能,其中,調(diào)用單元可以包括:檢測(cè)模塊、調(diào)用模塊、攔截模塊、讀取模塊、返回模塊以及控制模塊。

其中,檢測(cè)模塊用于檢測(cè)應(yīng)用程序是否觸發(fā)運(yùn)行動(dòng)態(tài)庫(kù)。具體地,檢測(cè)應(yīng)用程序是否觸發(fā)運(yùn)行該動(dòng)態(tài)庫(kù)(如上述實(shí)施例中的功能插件)。

調(diào)用模塊用于在檢測(cè)到應(yīng)用程序觸發(fā)運(yùn)行動(dòng)態(tài)庫(kù)的情況下,調(diào)用動(dòng)態(tài)庫(kù)對(duì)應(yīng)的系統(tǒng)文件路徑接口。具體地,當(dāng)應(yīng)用程序調(diào)用動(dòng)態(tài)庫(kù)時(shí),動(dòng)態(tài)庫(kù)需要訪問(wèn)本地資源以實(shí)現(xiàn)動(dòng)態(tài)庫(kù)的功能。為了達(dá)到上述目的,應(yīng)用程序通過(guò)調(diào)用系統(tǒng)文件路徑接口獲得訪問(wèn)資源所需的訪問(wèn)路徑,即調(diào)用系統(tǒng)文件路徑接口獲取動(dòng)態(tài)庫(kù)訪問(wèn)資源所需的沙盒路徑。

但是,在通常情況下應(yīng)用程序調(diào)用系統(tǒng)文件路徑接口時(shí)返回的是應(yīng)用程序所對(duì)應(yīng)的第一沙盒路徑。在這種情況下,若應(yīng)用程序同時(shí)調(diào)用兩個(gè)或多個(gè)不同的動(dòng)態(tài)庫(kù),則將控制每個(gè)動(dòng)態(tài)庫(kù)都按照第一沙盒路徑訪問(wèn)資源,這樣就導(dǎo)致不同動(dòng)態(tài)庫(kù)在訪問(wèn)資源時(shí)發(fā)生資源競(jìng)爭(zhēng)而導(dǎo)致系統(tǒng)錯(cuò)誤。為了解決該問(wèn)題,需要在系統(tǒng)文件路徑接口將第一沙盒路徑返回至應(yīng)用程序之前,對(duì)系統(tǒng)文件路徑接口將要返回的第一沙盒路徑進(jìn)行hook攔截。

攔截模塊用于使用系統(tǒng)文件路徑接口獲取第一沙盒路徑,對(duì)第一沙盒路徑進(jìn)行攔截;讀取模塊用于讀取第一沙盒路徑下已經(jīng)創(chuàng)建的動(dòng)態(tài)庫(kù)目錄,得到攔截后的訪問(wèn)路徑。

具體地,通過(guò)API hook技術(shù)對(duì)系統(tǒng)文件路徑接口的調(diào)用結(jié)果(即上述的第一沙盒路徑)進(jìn)行攔截,并將讀取第一沙盒路徑下已經(jīng)創(chuàng)建的該動(dòng)態(tài)庫(kù)的動(dòng)態(tài)庫(kù)目錄,使用該動(dòng)態(tài)庫(kù)目錄替換調(diào)用結(jié)果中的第一沙盒路徑,作為攔截后的訪問(wèn)路徑保存至調(diào)用結(jié)果中。即,將該調(diào)用結(jié)果的第一沙盒路徑重新定義為動(dòng)態(tài)庫(kù)的唯一沙盒路徑(即上述的動(dòng)態(tài)庫(kù)目錄),由于動(dòng)態(tài)庫(kù)目錄是根據(jù)唯一的動(dòng)態(tài)庫(kù)ID創(chuàng)建的,因此每個(gè)動(dòng)態(tài)庫(kù)所對(duì)應(yīng)的動(dòng)態(tài)庫(kù)目錄均是唯一的,即為每個(gè)動(dòng)態(tài)庫(kù)分配了獨(dú)立的沙盒路徑,避免了應(yīng)用程序同時(shí)調(diào)用多個(gè)動(dòng)態(tài)庫(kù)時(shí)不同動(dòng)態(tài)庫(kù)獲取到相同的路徑(即第一沙盒路徑)而導(dǎo)致不同動(dòng)態(tài)庫(kù)在訪問(wèn)本地資源時(shí)發(fā)生沖突的問(wèn)題。

在一個(gè)可選的實(shí)施例中,攔截后的訪問(wèn)路徑可以為:應(yīng)用程序沙盒路徑/Documents/Plugins/動(dòng)態(tài)庫(kù)ID/。

返回模塊用于將攔截后的訪問(wèn)路徑返回至應(yīng)用程序。具體地,將API hook攔截后得到的調(diào)用結(jié)果返回至應(yīng)用程序,即將動(dòng)態(tài)庫(kù)目錄返回至應(yīng)用程序作為動(dòng)態(tài)庫(kù)訪問(wèn)資源時(shí)的訪問(wèn)路徑,而不是返回第一沙盒路徑。

控制模塊用于控制動(dòng)態(tài)庫(kù)按照攔截后的訪問(wèn)路徑訪問(wèn)資源,以調(diào)用動(dòng)態(tài)庫(kù)的功能。具體地,將與動(dòng)態(tài)庫(kù)對(duì)應(yīng)的唯一的動(dòng)態(tài)庫(kù)目錄作為訪問(wèn)路徑返回至應(yīng)用程序,由應(yīng)用程序控制動(dòng)態(tài)庫(kù)按照該唯一的訪問(wèn)路徑訪問(wèn)資源,解決了現(xiàn)有技術(shù)中各個(gè)動(dòng)態(tài)庫(kù)在使用本地資源時(shí)的資源競(jìng)爭(zhēng)問(wèn)題。

在上述實(shí)施例中,當(dāng)應(yīng)用程序沒有運(yùn)行任何動(dòng)態(tài)庫(kù)時(shí),應(yīng)用程序調(diào)用系統(tǒng)文件路 徑接口將返回第一沙盒路徑(如實(shí)際的應(yīng)用程序沙盒路徑);當(dāng)應(yīng)用程序運(yùn)行動(dòng)態(tài)庫(kù)時(shí),調(diào)用系統(tǒng)文件路徑接口將返回?cái)r截后重新定義的訪問(wèn)路徑(即正在運(yùn)行的動(dòng)態(tài)庫(kù)所對(duì)應(yīng)的動(dòng)態(tài)庫(kù)目錄):應(yīng)用程序沙盒路徑/Documents/Plugins/動(dòng)態(tài)庫(kù)ID/。由于動(dòng)態(tài)庫(kù)ID是唯一的,因此得到的訪問(wèn)路徑(即動(dòng)態(tài)庫(kù)目錄)也是唯一的,即為每個(gè)動(dòng)態(tài)庫(kù)分配了獨(dú)立的沙盒路徑,避免了不同動(dòng)態(tài)庫(kù)在訪問(wèn)本地資源時(shí)由于資源訪問(wèn)沖突而導(dǎo)致系統(tǒng)錯(cuò)誤的問(wèn)題。

通過(guò)本申請(qǐng)上述實(shí)施例,為了避免動(dòng)態(tài)庫(kù)在使用本地資源時(shí)產(chǎn)生資源競(jìng)爭(zhēng)而導(dǎo)致系統(tǒng)錯(cuò)誤的問(wèn)題,通過(guò)對(duì)系統(tǒng)文件路徑接口進(jìn)行API hook攔截,為不同的動(dòng)態(tài)庫(kù)分配唯一且獨(dú)立的訪問(wèn)路徑,使得每個(gè)動(dòng)態(tài)庫(kù)只能訪問(wèn)自己被分配的沙盒(即動(dòng)態(tài)庫(kù)目錄所指示的存儲(chǔ)區(qū)域),從而實(shí)現(xiàn)動(dòng)態(tài)庫(kù)之間在訪問(wèn)本地資源時(shí)互不干擾的效果。

本實(shí)施例中所提供的各個(gè)模塊與方法實(shí)施例對(duì)應(yīng)步驟所提供的使用方法相同、應(yīng)用場(chǎng)景也可以相同。當(dāng)然,需要注意的是,上述模塊涉及的方案可以不限于方法實(shí)施例中的內(nèi)容和場(chǎng)景,且上述模塊可以運(yùn)行在計(jì)算機(jī)終端或移動(dòng)終端,可以通過(guò)軟件或硬件實(shí)現(xiàn)。

上述本申請(qǐng)實(shí)施例序號(hào)僅僅為了描述,不代表實(shí)施例的優(yōu)劣。

在本申請(qǐng)的上述實(shí)施例中,對(duì)各個(gè)實(shí)施例的描述都各有側(cè)重,某個(gè)實(shí)施例中沒有詳述的部分,可以參見其他實(shí)施例的相關(guān)描述。

在本申請(qǐng)所提供的幾個(gè)實(shí)施例中,應(yīng)該理解到,所揭露的技術(shù)內(nèi)容,可通過(guò)其它的方式實(shí)現(xiàn)。其中,以上所描述的裝置實(shí)施例僅僅是示意性的,例如所述單元的劃分,可以為一種邏輯功能劃分,實(shí)際實(shí)現(xiàn)時(shí)可以有另外的劃分方式,例如多個(gè)單元或組件可以結(jié)合或者可以集成到另一個(gè)系統(tǒng),或一些特征可以忽略,或不執(zhí)行。另一點(diǎn),所顯示或討論的相互之間的耦合或直接耦合或通信連接可以是通過(guò)一些接口,單元或模塊的間接耦合或通信連接,可以是電性或其它的形式。

以上所述僅是本申請(qǐng)的優(yōu)選實(shí)施方式,應(yīng)當(dāng)指出,對(duì)于本技術(shù)領(lǐng)域的普通技術(shù)人員來(lái)說(shuō),在不脫離本申請(qǐng)?jiān)淼那疤嵯拢€可以做出若干改進(jìn)和潤(rùn)飾,這些改進(jìn)和潤(rùn)飾也應(yīng)視為本申請(qǐng)的保護(hù)范圍。

當(dāng)前第1頁(yè)1 2 3 
網(wǎng)友詢問(wèn)留言 已有0條留言
  • 還沒有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1
文登市| 湘潭市| 台中市| 禄丰县| 三门峡市| 英山县| 大名县| 剑川县| 大余县| 石河子市| 鹤壁市| 龙胜| 呼伦贝尔市| 亳州市| 隆回县| 凤翔县| 耒阳市| 柯坪县| 古丈县| 陇南市| 长治县| 龙井市| 诸城市| 甘德县| 都江堰市| 陇西县| 迁西县| 丹巴县| 鞍山市| 东丰县| 隆安县| 梅州市| 运城市| 宁德市| 五指山市| 来安县| 临清市| 慈利县| 平凉市| 泽州县| 祁东县|