本發(fā)明涉及互聯(lián)網(wǎng)領(lǐng)域,具體提供了一種應(yīng)用程序打包方法、裝置及終端設(shè)備。
背景技術(shù):
目前,安卓開(kāi)發(fā)工具androdstudio在應(yīng)用程序打包過(guò)程中,由于安卓虛擬機(jī)機(jī)制的緣故,其方法數(shù)被定義在65535個(gè),如果函數(shù)個(gè)數(shù)超過(guò)65535個(gè),虛擬機(jī)就無(wú)法正常加載dex文件。因此也就會(huì)導(dǎo)致安卓應(yīng)用程序報(bào)錯(cuò)。谷歌公司為了解決這個(gè)問(wèn)題,在應(yīng)用程序打包時(shí),引入了multidex的解決方案。multidex解決方案的做法是將超過(guò)65535個(gè)方法的dex文件,分成多個(gè)dex文件,然后在應(yīng)用程序啟動(dòng)的時(shí)候再依次加載合并回去,繞過(guò)了安卓虛擬機(jī)不能加載65535個(gè)方案,multidex的引入,雖然解決了方法數(shù)超過(guò)65535個(gè),但卻不能滿(mǎn)足業(yè)務(wù)擴(kuò)展需求,因?yàn)閙ultidex不能根據(jù)業(yè)務(wù)包名單獨(dú)自由分包。因此不能滿(mǎn)足安卓組件化業(yè)務(wù)所需的將特定功能代碼分成特定dex文件的需求。
技術(shù)實(shí)現(xiàn)要素:
有鑒于此,本發(fā)明實(shí)施例的目的在于提供一種應(yīng)用程序打包方法、裝置及終端設(shè)備,旨在實(shí)現(xiàn)安卓特定業(yè)務(wù)代碼在打包時(shí)可以分成特定dex文件的解決方案。
為了達(dá)到上述的目的,本發(fā)明實(shí)施例采用的技術(shù)方案如下所述:
第一方面,本發(fā)明實(shí)施例提供了一種應(yīng)用程序打包方法,所述方法包括:獲取java文件轉(zhuǎn)換為dex文件過(guò)程中產(chǎn)生的壓縮文件;解壓所述壓縮文件得到解壓文件,所述解壓文件包括指定文件;從所述解壓文件中選中指定文件;將所述指定文件轉(zhuǎn)換成dex文件;將所述dex文件壓入應(yīng)用文件以得到所述應(yīng)用程序。
第二方面,本發(fā)明實(shí)施例提供了一種應(yīng)用程序打包裝置,所述裝置包括獲取模塊、解壓模塊、選擇模塊以及打包模塊。其中獲取模塊用于獲取java文件轉(zhuǎn)換為dex文件過(guò)程中產(chǎn)生的壓縮文件;解壓模塊用于解壓所述壓縮文件得到解壓文件,所述解壓文件包括指定文件;選擇模塊用于從所述解壓文件中選中指定文件;轉(zhuǎn)換模塊用于將所述指定文件轉(zhuǎn)換成dex文件;打包模塊用于將所述dex文件壓入應(yīng)用文件以得到所述應(yīng)用程序。
第三方面,本發(fā)明實(shí)施例提供了一種終端設(shè)備,包括處理器、存儲(chǔ)器以及應(yīng)用程序打包裝置。所述應(yīng)用程序打包裝置安裝于所述存儲(chǔ)器中并包括一個(gè)或多個(gè)由所述處理器執(zhí)行的軟件功能模塊,所述應(yīng)用程序打包裝置包括獲取模塊、解壓模塊、選擇模塊以及打包模塊。其中獲取模塊用于獲取java文件轉(zhuǎn)換為dex文件過(guò)程中產(chǎn)生的壓縮文件;解壓模塊用于解壓所述壓縮文件得到解壓文件,所述解壓文件包括指定文件;選擇模塊用于從所述解壓文件中選中指定文件;轉(zhuǎn)換模塊用于將所述指定文件轉(zhuǎn)換成dex文件;打包模塊用于將所述dex文件壓入應(yīng)用文件以得到所述應(yīng)用程序。
本發(fā)明實(shí)施例提供的應(yīng)用程序打包方法、裝置及終端設(shè)備,該應(yīng)用程序打包方法包括:獲取java文件轉(zhuǎn)換為dex文件過(guò)程中產(chǎn)生的壓縮文件;解壓所述壓縮文件得到解壓文件,所述解壓文件包括指定文件;從所述解壓文件中選中指定文件;將所述指定文件轉(zhuǎn)換成dex文件;將所述dex文件壓入應(yīng)用文件以得到所述應(yīng)用程序。本發(fā)明提供的應(yīng)用程序打包方法、裝置及終端設(shè)備在安卓應(yīng)用程序打包過(guò)程中,將特定包名的模塊單獨(dú)打包成dex文件,將部分獨(dú)立的業(yè)務(wù)打包成dex文件,在用戶(hù)用到該業(yè)務(wù)時(shí)再去加載,不必啟動(dòng)時(shí)立刻去加載,避免啟動(dòng)時(shí)間長(zhǎng)的問(wèn)題,有著更好的業(yè)務(wù)模式,為動(dòng)態(tài)加載方案提供基礎(chǔ)的打包支持。
為使本發(fā)明的上述目的、特征和優(yōu)點(diǎn)能更明顯易懂,下文特舉較佳實(shí)施例,并配合所附附圖,作詳細(xì)說(shuō)明如下。
附圖說(shuō)明
為了更清楚地說(shuō)明本發(fā)明實(shí)施例的技術(shù)方案,下面將對(duì)實(shí)施例中所需要使用的附圖作簡(jiǎn)單地介紹,應(yīng)當(dāng)理解,以下附圖僅示出了本發(fā)明的某些實(shí)施例,因此不應(yīng)被看作是對(duì)范圍的限定,對(duì)于本領(lǐng)域普通技術(shù)人員來(lái)講,在不付出創(chuàng)造性勞動(dòng)的前提下,還可以根據(jù)這些附圖獲得其他相關(guān)的附圖。
圖1是本發(fā)明實(shí)施例提供的終端設(shè)備的方框示意圖。
圖2是本發(fā)明實(shí)施例提供的應(yīng)用程序打包方法的流程圖。
圖3是現(xiàn)有技術(shù)中對(duì)dex文件的拆分示意圖。
圖4是本發(fā)明實(shí)施例對(duì)dex文件的拆分示意圖。
圖5是本發(fā)明實(shí)施例提供的應(yīng)用程序打包裝置110的功能模塊架構(gòu)示意圖。
圖標(biāo):100-終端設(shè)備;110-應(yīng)用程序打包裝置;111-獲取模塊;112-解壓模塊;113-選擇模塊;114-轉(zhuǎn)換模塊;115-打包模塊;116-注冊(cè)模塊;117-壓縮模塊;120-存儲(chǔ)器;130-處理器。
具體實(shí)施方式
為使本發(fā)明實(shí)施例的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚,下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例。通常在此處附圖中描述和示出的本發(fā)明實(shí)施例的組件可以以各種不同的配置來(lái)布置和設(shè)計(jì)。
因此,以下對(duì)在附圖中提供的本發(fā)明的實(shí)施例的詳細(xì)描述并非旨在限制要求保護(hù)的本發(fā)明的范圍,而是僅僅表示本發(fā)明的選定實(shí)施例?;诒景l(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒(méi)有作出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。
應(yīng)注意到:相似的標(biāo)號(hào)和字母在下面的附圖中表示類(lèi)似項(xiàng),因此,一旦某一項(xiàng)在一個(gè)附圖中被定義,則在隨后的附圖中不需要對(duì)其進(jìn)行進(jìn)一步定義和解釋。
本發(fā)明實(shí)施例提供的應(yīng)用程序打包方法及裝置應(yīng)用于終端設(shè)備。該終端設(shè)備可以是,但不限于,個(gè)人電腦(personalcomputer,pc)、服務(wù)器。
請(qǐng)參照?qǐng)D1,是該終端設(shè)備100的方框示意圖。該終端設(shè)備100包括應(yīng)用程序打包裝置110、存儲(chǔ)器120和處理器130。
存儲(chǔ)器120、處理器130相互之間直接或間接地電性連接,以實(shí)現(xiàn)數(shù)據(jù)的傳輸或交互。例如,這些元件相互之間可通過(guò)一條或多條通訊總線(xiàn)或信號(hào)線(xiàn)實(shí)現(xiàn)電性連接。應(yīng)用程序打包裝置110包括至少一個(gè)可以軟件或固件(firmware)的形式存儲(chǔ)于存儲(chǔ)器120中或固化在終端設(shè)備100的操作系統(tǒng)(operatingsystem,os)中的軟件功能模塊。處理器130用于執(zhí)行所述存儲(chǔ)器120中存儲(chǔ)的可執(zhí)行模塊,例如應(yīng)用程序打包裝置110所包括的軟件功能模塊及計(jì)算機(jī)程序等。
其中,存儲(chǔ)器120可以是,但不限于,隨機(jī)存取存儲(chǔ)器(randomaccessmemory,ram),只讀存儲(chǔ)器(readonlymemory,rom),可編程只讀存儲(chǔ)器(programmableread-onlymemory,prom),可擦除只讀存儲(chǔ)器(erasableprogrammableread-onlymemory,eprom),電可擦除只讀存儲(chǔ)器(electricerasableprogrammableread-onlymemory,eeprom)等。其中,存儲(chǔ)器120用于存儲(chǔ)程序,處理器130在接收到執(zhí)行指令后,執(zhí)行該程序。處理器130以及其他可能的組件對(duì)存儲(chǔ)器120的訪(fǎng)問(wèn)可在存儲(chǔ)控制器140的控制下進(jìn)行。
處理器130可能是一種集成電路芯片,具有信號(hào)的處理能力。上述的處理器130可以是通用處理器,包括中央處理器(centralprocessingunit,cpu)、網(wǎng)絡(luò)處理器(networkprocessor,np)等;還可以是數(shù)字信號(hào)處理器(dsp))、專(zhuān)用集成電路(asic)、現(xiàn)成可編程門(mén)陣列(fpga)或者其他可編程邏輯器件、分立門(mén)或者晶體管邏輯器件、分立硬件組件??梢詫?shí)現(xiàn)或者執(zhí)行本發(fā)明實(shí)施例中的公開(kāi)的各方法、步驟及邏輯框圖。通用處理器可以是微處理器或者該處理器也可以是任何常規(guī)的處理器等。
本發(fā)明實(shí)施例提供的應(yīng)用程序打包方法應(yīng)用于終端設(shè)備100,請(qǐng)參照?qǐng)D2,該應(yīng)用程序打包方法包括以下步驟:
步驟s101,獲取java文件轉(zhuǎn)換為dex文件過(guò)程中產(chǎn)生的壓縮文件。
打包工具在將java代碼文件優(yōu)化為dex文件前,需先生成jar壓縮文件,jar壓縮文件為java代碼編譯后的可執(zhí)行代碼集合文件,jar壓縮文件生成后再打包成dex文件。本發(fā)明實(shí)施例中,打包工具為gradle打包工具,通過(guò)編寫(xiě)插件,使用命令,強(qiáng)行將需要被轉(zhuǎn)換為dex文件的jar壓縮文件提取出來(lái),如main.jar、proguard.jar,提取命令可為task.dofirst。
步驟s102,解壓所述壓縮文件得到解壓文件,所述解壓文件包括指定文件。
解壓后的文件中,包括多個(gè)功能代碼,這些功能代碼具有各自特定的功能,在組件化業(yè)務(wù)中,需要用到的功能代碼通過(guò)內(nèi)置或者在線(xiàn)下發(fā),起到降低包體的目的。本發(fā)明實(shí)施例中,指定文件為需要單獨(dú)轉(zhuǎn)換為dex文件的功能代碼。
步驟s103,從所述解壓文件中選中指定文件。
步驟s104,將所述指定文件轉(zhuǎn)換為dex文件。
在本實(shí)施例中,通過(guò)gradle工具將指定文件轉(zhuǎn)換為dex文件,在轉(zhuǎn)換過(guò)程中,按照預(yù)定的包路徑進(jìn)行轉(zhuǎn)換,方便后期選取特定業(yè)務(wù),包路徑通過(guò)預(yù)先注冊(cè)得到。具體的,將指定文件按照預(yù)定的包路徑放入預(yù)設(shè)的文件夾中,再重新壓縮指定文件,通過(guò)gradle工具將壓縮文件轉(zhuǎn)換為dex文件。
步驟s105,將所述dex文件壓入應(yīng)用文件以得到所述應(yīng)用程序。
當(dāng)需要單獨(dú)打包為dex文件的功能代碼全部轉(zhuǎn)換為dex文件之后,將轉(zhuǎn)換得到的dex文件壓入應(yīng)用文件中,得到應(yīng)用程序。該應(yīng)用文件為gradle工具生成的應(yīng)用程序包。
在本實(shí)施例中,對(duì)于非指定文件(功能代碼中除指定文件外的文件),會(huì)被壓縮回解壓前的壓縮文件中,然后再通過(guò)gradle工具進(jìn)行對(duì)壓縮文件打包以生成應(yīng)用文件。
步驟s106,對(duì)所述應(yīng)用程序進(jìn)行簽名校驗(yàn)。
通過(guò)上述步驟,即完成應(yīng)用程序的打包過(guò)程,打包后的應(yīng)用程序包括多個(gè)dex文件,每一個(gè)dex文件具有單獨(dú)的功能業(yè)務(wù),在后期用戶(hù)需要用到某一業(yè)務(wù)時(shí),再去加載與該業(yè)務(wù)對(duì)應(yīng)的dex文件,不需要在啟動(dòng)時(shí)立即去加載,避免了啟動(dòng)時(shí)間長(zhǎng)的問(wèn)題。為使本發(fā)明實(shí)施例更易理解,請(qǐng)參照?qǐng)D3,是現(xiàn)有技術(shù)中,將超過(guò)65535個(gè)方法的dex文件分成多個(gè)dex文件的示意圖。其中,dex文件被拆分成dex1、dex2、dex3…dex文件中的功能業(yè)務(wù)被打亂,可能融合在拆分出來(lái)的多個(gè)dex中,例如,對(duì)于功能業(yè)務(wù)1,融合在dex1和dex2中,功能業(yè)務(wù)2融合在dex2和dex3中,要實(shí)現(xiàn)功能業(yè)務(wù)1和功能業(yè)務(wù)2,需要依次加載dex1、dex2和dex3,這無(wú)疑將增加啟動(dòng)時(shí)間。本發(fā)明實(shí)施例提供的應(yīng)用程序打包方法打包的應(yīng)用程序請(qǐng)參照?qǐng)D4,由于在打包過(guò)程中,各個(gè)功能業(yè)務(wù)根據(jù)需要單獨(dú)打包轉(zhuǎn)換為dex文件,所以每個(gè)需要用到的功能業(yè)務(wù)為單獨(dú)的dex文件,其中,dex文件被拆分成dex1’、dex2’、dex3’…功能業(yè)務(wù)1被打包在dex1’中,功能業(yè)務(wù)2被打包在dex2’中,例如,在用戶(hù)需要使用功能業(yè)務(wù)2時(shí),只需要加載dex2’即可,無(wú)需先加載dex1’,再加載dex2’,也無(wú)需加載dex3’,節(jié)約了啟動(dòng)時(shí)間,滿(mǎn)足組件化業(yè)務(wù)的需求,實(shí)現(xiàn)動(dòng)態(tài)加載方案。
請(qǐng)參照?qǐng)D5,是本發(fā)明實(shí)施例提供的應(yīng)用程序打包裝置110的功能模塊架構(gòu)示意圖,該應(yīng)用程序打包裝置110包括獲取模塊111、解壓模塊112、選擇模塊113、轉(zhuǎn)換模塊114和打包模塊115。
其中,獲取模塊111用于獲取java文件轉(zhuǎn)換為dex文件過(guò)程中產(chǎn)生的壓縮文件。
在本實(shí)施例中,獲取模塊111可用于執(zhí)行步驟s101。打包工具在將java代碼文件優(yōu)化為dex文件前,需先生成jar壓縮文件,jar壓縮文件為java代碼編譯后的可執(zhí)行代碼集合文件,jar壓縮文件生成后再打包成dex文件。本發(fā)明實(shí)施例中,打包工具為gradle打包工具,通過(guò)編寫(xiě)插件,使用命令,強(qiáng)行將需要被轉(zhuǎn)換為dex文件的jar壓縮文件提取出來(lái),如main.jar、proguard.jar,提取命令可為task.dofirst。
解壓模塊112用于解壓所述壓縮文件得到解壓文件。
在本實(shí)施例中,解壓模塊112可用于執(zhí)行步驟s102。解壓后的文件中,包括多個(gè)功能代碼,這些功能代碼具有各自特定的功能,在組件化業(yè)務(wù)中,需要用到的功能代碼通過(guò)內(nèi)置或者在線(xiàn)下發(fā),起到降低包體的目的。本發(fā)明實(shí)施例中,指定文件為需要單獨(dú)轉(zhuǎn)換為dex文件的功能代碼。
選擇模塊113用于從所述解壓文件中選中指定文件。
在本實(shí)施例中,選擇模塊113可用于執(zhí)行步驟s103。
轉(zhuǎn)換模塊114用于將所述指定文件轉(zhuǎn)換成dex文件。
在本實(shí)施例中,轉(zhuǎn)換模塊114可用于執(zhí)行步驟s104。在本實(shí)施例中,通過(guò)gradle工具將指定文件轉(zhuǎn)換為dex文件,在轉(zhuǎn)換過(guò)程中,按照預(yù)定的包路徑進(jìn)行轉(zhuǎn)換,方便后期選取特定業(yè)務(wù),包路徑通過(guò)預(yù)先注冊(cè)得到。具體的,將指定文件按照預(yù)定的包路徑放入預(yù)設(shè)的文件夾中,再重新壓縮指定文件,通過(guò)gradle工具將壓縮文件轉(zhuǎn)換為dex文件。本發(fā)明實(shí)施例提供的應(yīng)用程序打包裝置110還包括注冊(cè)模塊116,用于注冊(cè)包路徑。
打包模塊115用于將所述dex文件壓入應(yīng)用文件以得到所述應(yīng)用程序。
在本實(shí)施例中,打包模塊115可用于執(zhí)行步驟s105。當(dāng)需要單獨(dú)打包為dex文件的功能代碼全部轉(zhuǎn)換為dex文件之后,將轉(zhuǎn)換得到的dex文件壓入應(yīng)用文件中,得到應(yīng)用程序。該應(yīng)用文件為gradle工具生成的應(yīng)用程序包。
進(jìn)一步地,該應(yīng)用程序打包裝置110還包括壓縮模塊117,對(duì)于非指定文件(功能代碼中除指定文件外的文件),會(huì)被壓縮回解壓前的壓縮文件中,然后再通過(guò)gradle工具進(jìn)行對(duì)壓縮文件打包以生成應(yīng)用文件。壓縮模塊117用于將非指定文件壓縮回所述壓縮文件中。
該應(yīng)用程序打包裝置110還包括簽名模塊118,用于對(duì)所述應(yīng)用程序進(jìn)行簽名校驗(yàn)。
綜上所述,本發(fā)明實(shí)施例提供了一種應(yīng)用程序打包方法、裝置及終端設(shè)備。該應(yīng)用程序打包方法包括:獲取java文件轉(zhuǎn)換為dex文件過(guò)程中產(chǎn)生的壓縮文件;解壓所述壓縮文件得到解壓文件,所述解壓文件包括指定文件;從所述解壓文件中選中指定文件;將所述指定文件轉(zhuǎn)換成dex文件;將所述dex文件壓入應(yīng)用文件以得到所述應(yīng)用程序。本發(fā)明提供的應(yīng)用程序打包方法、裝置及終端設(shè)備在安卓應(yīng)用程序打包過(guò)程中,將特定包名的模塊單獨(dú)打包成dex文件,將部分獨(dú)立的業(yè)務(wù)打包成dex文件,在用戶(hù)用到該業(yè)務(wù)時(shí)再去加載,不必啟動(dòng)時(shí)立刻去加載,避免啟動(dòng)時(shí)間長(zhǎng)的問(wèn)題,有著更好的業(yè)務(wù)模式,為動(dòng)態(tài)加載方案提供基礎(chǔ)的打包支持。
在本申請(qǐng)所提供的幾個(gè)實(shí)施例中,應(yīng)該理解到,所揭露的裝置和方法,也可以通過(guò)其它的方式實(shí)現(xiàn)。以上所描述的裝置實(shí)施例僅僅是示意性的,例如,附圖中的流程圖和框圖顯示了根據(jù)本發(fā)明的多個(gè)實(shí)施例的裝置、方法和計(jì)算機(jī)程序產(chǎn)品的可能實(shí)現(xiàn)的體系架構(gòu)、功能和操作。在這點(diǎn)上,流程圖或框圖中的每個(gè)方框可以代表一個(gè)模塊、程序段或代碼的一部分,所述模塊、程序段或代碼的一部分包含一個(gè)或多個(gè)用于實(shí)現(xiàn)規(guī)定的邏輯功能的dex指令。也應(yīng)當(dāng)注意,在有些作為替換的實(shí)現(xiàn)方式中,方框中所標(biāo)注的功能也可以以不同于附圖中所標(biāo)注的順序發(fā)生。例如,兩個(gè)連續(xù)的方框?qū)嶋H上可以基本并行地執(zhí)行,它們有時(shí)也可以按相反的順序執(zhí)行,這依所涉及的功能而定。也要注意的是,框圖和/或流程圖中的每個(gè)方框、以及框圖和/或流程圖中的方框的組合,可以用執(zhí)行規(guī)定的功能或動(dòng)作的專(zhuān)用的基于硬件的系統(tǒng)來(lái)實(shí)現(xiàn),或者可以用專(zhuān)用硬件與計(jì)算機(jī)指令的組合來(lái)實(shí)現(xiàn)。
另外,在本發(fā)明各個(gè)實(shí)施例中的各功能模塊可以集成在一起形成一個(gè)獨(dú)立的部分,也可以是各個(gè)模塊單獨(dú)存在,也可以?xún)蓚€(gè)或兩個(gè)以上模塊集成形成一個(gè)獨(dú)立的部分。
所述功能如果以軟件功能模塊的形式實(shí)現(xiàn)并作為獨(dú)立的產(chǎn)品銷(xiāo)售或使用時(shí),可以存儲(chǔ)在一個(gè)計(jì)算機(jī)可讀取存儲(chǔ)介質(zhì)中?;谶@樣的理解,本發(fā)明的技術(shù)方案本質(zhì)上或者說(shuō)對(duì)現(xiàn)有技術(shù)做出貢獻(xiàn)的部分或者該技術(shù)方案的部分可以以軟件產(chǎn)品的形式體現(xiàn)出來(lái),該計(jì)算機(jī)軟件產(chǎn)品存儲(chǔ)在一個(gè)存儲(chǔ)介質(zhì)中,包括若干指令用以使得一臺(tái)計(jì)算機(jī)設(shè)備(可以是個(gè)人計(jì)算機(jī),服務(wù)器,或者網(wǎng)絡(luò)設(shè)備等)執(zhí)行本發(fā)明各個(gè)實(shí)施例所述方法的全部或部分步驟。而前述的存儲(chǔ)介質(zhì)包括:u盤(pán)、移動(dòng)硬盤(pán)、只讀存儲(chǔ)器(rom,read-onlymemory)、隨機(jī)存取存儲(chǔ)器(ram,randomaccessmemory)、磁碟或者光盤(pán)等各種可以存儲(chǔ)程序代碼的介質(zhì)。需要說(shuō)明的是,在本文中,諸如第一和第二等之類(lèi)的關(guān)系術(shù)語(yǔ)僅僅用來(lái)將一個(gè)實(shí)體或者操作與另一個(gè)實(shí)體或操作區(qū)分開(kāi)來(lái),而不一定要求或者暗示這些實(shí)體或操作之間存在任何這種實(shí)際的關(guān)系或者順序。而且,術(shù)語(yǔ)“包括”、“包含”或者其任何其他變體意在涵蓋非排他性的包含,從而使得包括一系列要素的過(guò)程、方法、物品或者設(shè)備不僅包括那些要素,而且還包括沒(méi)有明確列出的其他要素,或者是還包括為這種過(guò)程、方法、物品或者設(shè)備所固有的要素。在沒(méi)有更多限制的情況下,由語(yǔ)句“包括一個(gè)……”限定的要素,并不排除在包括所述要素的過(guò)程、方法、物品或者設(shè)備中還存在另外的相同要素。
以上所述僅為本發(fā)明的優(yōu)選實(shí)施例而已,并不用于限制本發(fā)明,對(duì)于本領(lǐng)域的技術(shù)人員來(lái)說(shuō),本發(fā)明可以有各種更改和變化。凡在本發(fā)明的精神和原則之內(nèi),所作的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。應(yīng)注意到:相似的標(biāo)號(hào)和字母在下面的附圖中表示類(lèi)似項(xiàng),因此,一旦某一項(xiàng)在一個(gè)附圖中被定義,則在隨后的附圖中不需要對(duì)其進(jìn)行進(jìn)一步定義和解釋。