動(dòng)態(tài)加載安卓類的方法
【專利摘要】本發(fā)明涉及智能終端計(jì)算。本發(fā)明針對(duì)現(xiàn)有技術(shù)中在Android的Dalvik虛擬機(jī)中,只能調(diào)用本地靜態(tài)方法,無(wú)法像Java中那樣方便的實(shí)現(xiàn)動(dòng)態(tài)加載類的問(wèn)題,提供一種動(dòng)態(tài)加載安卓類的方法,首先,系統(tǒng)設(shè)定動(dòng)態(tài)加載入口;然后,系統(tǒng)通過(guò)配置動(dòng)態(tài)加載環(huán)境,并通過(guò)安卓中的Dex類加載器實(shí)現(xiàn)安卓類的動(dòng)態(tài)加載;最后,系統(tǒng)通過(guò)讀取動(dòng)態(tài)加載入口配置實(shí)現(xiàn)應(yīng)用跳轉(zhuǎn),并使用反射來(lái)啟動(dòng)加載類。通過(guò)安卓中的Dex類加載器實(shí)現(xiàn)安卓類的動(dòng)態(tài)加載,可以動(dòng)態(tài)加載含有Android類的Dalvik字節(jié)碼,實(shí)現(xiàn)插件式軟件架構(gòu)的開發(fā),可以以此實(shí)現(xiàn)自定義控件、動(dòng)態(tài)加載應(yīng)用甚至是應(yīng)用加密等功能。適用于動(dòng)態(tài)加載安卓類的方法。
【專利說(shuō)明】動(dòng)態(tài)加載安卓類的方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及智能終端計(jì)算,特別涉及動(dòng)態(tài)加載安卓類的方法。
【背景技術(shù)】
[0002]安卓,(以下簡(jiǎn)稱Android)是一種基于Linux的自由開放源代碼的操作系統(tǒng),最初由Andy Rubin開發(fā),2005年8月被Google收購(gòu)注資。2007年11月,Google聯(lián)合軟硬件開發(fā)商及電信運(yùn)營(yíng)商組建開放手機(jī)聯(lián)盟。至2012年11止,Android已占據(jù)全球智能手機(jī)操作市場(chǎng)76%份額,在中國(guó)市場(chǎng)占有率為90%。
[0003]Android應(yīng)用開發(fā)具有簡(jiǎn)潔易上手的特點(diǎn),在一般情況下,其常規(guī)的開發(fā)方式與代碼結(jié)構(gòu)就能夠滿足大多數(shù)開發(fā)需求。但是,在某些情況下,需要一種插件式軟件架構(gòu)的開發(fā),以實(shí)現(xiàn)自定義控件、動(dòng)態(tài)加載插件甚至是應(yīng)用加密等功能,使得我們可以靈活的加載執(zhí)行的類。
[0004]在標(biāo)準(zhǔn)的Java虛擬機(jī)中,類加載可以從Class文件中讀取,也可是其他二進(jìn)制流,從而將對(duì)應(yīng)類加載到內(nèi)存中,供程序運(yùn)行調(diào)用,通常會(huì)使用繼承自加載器(以下簡(jiǎn)稱ClassLoader)的類加載器。然而在Android的Dalvik虛擬機(jī)中,這種方式只能調(diào)用本地靜態(tài)方法,無(wú)法像Java中那樣方便的實(shí)現(xiàn)動(dòng)態(tài)加載類。
【發(fā)明內(nèi)容】
[0005]本發(fā)明所要解決的技術(shù)問(wèn)題,就是提供一種動(dòng)態(tài)加載安卓類的方法,以達(dá)到可以動(dòng)態(tài)加載并執(zhí)行另外一個(gè)單獨(dú)存在的Dalvik字節(jié)碼文件的效果。
[0006]本發(fā)明解決所述技術(shù)問(wèn)題,采用的技術(shù)方案是,動(dòng)態(tài)加載安卓類的方法,包括以下幾個(gè)步驟:
[0007]步驟1、系統(tǒng)設(shè)定動(dòng)態(tài)加載入口;
[0008]步驟2、系統(tǒng)通過(guò)配置動(dòng)態(tài)加載環(huán)境,并通過(guò)安卓中的Dex類加載器實(shí)現(xiàn)安卓類的動(dòng)態(tài)加載;
[0009]步驟3、系統(tǒng)通過(guò)讀取動(dòng)態(tài)加載入口配置實(shí)現(xiàn)應(yīng)用跳轉(zhuǎn),并使用反射來(lái)啟動(dòng)加載類。
[0010]具體的,所述步驟I中,系統(tǒng)設(shè)定動(dòng)態(tài)加載入口,包括配置加載Dalvik字節(jié)碼文件的類信息及待加載Dalvik字節(jié)碼文件的類信息,所述加載Dalvik字節(jié)碼文件,計(jì)為A,所述待加載Dalvik字節(jié)碼文件,計(jì)為B。
[0011]進(jìn)一步的,所述配置文件A的類信息,包括修改安卓配置文件中應(yīng)用標(biāo)簽下name屬性為文件A的應(yīng)用類名。
[0012]進(jìn)一步的,所述配置文件B的類信息,包括在安卓配置文件中的應(yīng)用標(biāo)簽后插入meta-data標(biāo)簽,所述meta-data有兩個(gè)屬性,分別為name和value,其中name值設(shè)定為C,value值為文件B的應(yīng)用類名。
[0013]進(jìn)一步的,所述步驟2包括以下步驟:[0014]步驟21、配置動(dòng)態(tài)加載環(huán)境;配置動(dòng)態(tài)加載環(huán)境,即利用Java反射機(jī)制,調(diào)用安卓系統(tǒng)啟動(dòng)進(jìn)程及當(dāng)前運(yùn)行進(jìn)程的方法;
[0015]步驟22、配置Dex類加載器的相關(guān)參數(shù),包括文件B的路徑及其庫(kù)文件路徑,修改系統(tǒng)組件類加載器的父元素為Dex類加載器,實(shí)現(xiàn)動(dòng)態(tài)加載文件B中的安卓類。
[0016]進(jìn)一步的,所述步驟21中,通過(guò)利用Java反射機(jī)制,調(diào)用安卓系統(tǒng)啟動(dòng)進(jìn)程及當(dāng)前運(yùn)行進(jìn)程的方法配置動(dòng)態(tài)加載環(huán)境。
[0017]進(jìn)一步的,所述步驟3包括以下步驟:
[0018]步驟301:系統(tǒng)讀取動(dòng)態(tài)加載入口配置,返回meta-data標(biāo)簽下name屬性值為C的value值,返回值,計(jì)為D ;
[0019]步驟302:系統(tǒng)配置當(dāng)前進(jìn)程、應(yīng)用及應(yīng)用類信息;
[0020]步驟303:系統(tǒng)獲取文件A的應(yīng)用類;
[0021]步驟304:系統(tǒng)讀取當(dāng)前進(jìn)程的應(yīng)用列表;
[0022]步驟305:系統(tǒng)在當(dāng)前進(jìn)程的應(yīng)用列表中移除文件A的應(yīng)用類;
[0023]步驟306:系統(tǒng)創(chuàng)建文件B的應(yīng)用類信息;
[0024]步驟307:系統(tǒng)利用D值加載文件B的應(yīng)用類信息;
[0025]步驟308:系統(tǒng)獲取文件B的應(yīng)用類;
[0026]步驟309:系統(tǒng)創(chuàng)建文件B進(jìn)程的容器映射;
[0027]步驟310:系統(tǒng)創(chuàng)建迭代器遍歷B進(jìn)程的容器映射;
[0028]步驟311:系統(tǒng)啟動(dòng)文件B的應(yīng)用類。
[0029]本發(fā)明的有益效果是,通過(guò)安卓中的Dex類加載器實(shí)現(xiàn)安卓類的動(dòng)態(tài)加載,可以動(dòng)態(tài)加載含有Android類的Dalvik字節(jié)碼,實(shí)現(xiàn)插件式軟件架構(gòu)的開發(fā),可以以此實(shí)現(xiàn)自定義控件、動(dòng)態(tài)加載應(yīng)用甚至是應(yīng)用加密等功能。
【專利附圖】
【附圖說(shuō)明】
[0030]圖1為本發(fā)明動(dòng)態(tài)加載安卓類的方法實(shí)施例的流程圖;
[0031]圖2為本發(fā)明動(dòng)態(tài)加載安卓類的方法實(shí)施例的反射使用加載類流程圖。
【具體實(shí)施方式】
[0032]下面結(jié)合附圖及實(shí)施例詳細(xì)描述本發(fā)明的技術(shù)方案:
[0033]本發(fā)明針對(duì)現(xiàn)有技術(shù)中在Android的Dalvik虛擬機(jī)中,只能調(diào)用本地靜態(tài)方法,無(wú)法像Java中那樣方便的實(shí)現(xiàn)動(dòng)態(tài)加載類的問(wèn)題,提供一種動(dòng)態(tài)加載安卓類的方法,首先,系統(tǒng)設(shè)定動(dòng)態(tài)加載入口 ;然后,系統(tǒng)通過(guò)配置動(dòng)態(tài)加載環(huán)境,并通過(guò)安卓中的Dex類加載器實(shí)現(xiàn)安卓類的動(dòng)態(tài)加載;最后,系統(tǒng)通過(guò)讀取動(dòng)態(tài)加載入口配置實(shí)現(xiàn)應(yīng)用跳轉(zhuǎn),并使用反射來(lái)啟動(dòng)加載類。通過(guò)安卓中的Dex類加載器實(shí)現(xiàn)安卓類的動(dòng)態(tài)加載,可以動(dòng)態(tài)加載含有Android類的Dalvik字節(jié)碼,實(shí)現(xiàn)插件式軟件架構(gòu)的開發(fā),可以以此實(shí)現(xiàn)自定義控件、動(dòng)態(tài)加載應(yīng)用甚至是應(yīng)用加密等功能。
[0034]實(shí)施例
[0035]為了更好的闡述和理解本發(fā)明的思想,本例以流程圖的方式進(jìn)行進(jìn)一步的闡述。
[0036]本例提供一種動(dòng)態(tài)加載Android類的方案,可以動(dòng)態(tài)加載含有Android類的Dalvik字節(jié)碼,如圖1所示,具體包括以下步驟:
[0037]步驟1、設(shè)定動(dòng)態(tài)加載入口:
[0038]Android系統(tǒng)中的程序是由不同組件構(gòu)成的,系統(tǒng)僅在其需要時(shí)才會(huì)啟動(dòng)該程序組件,因此動(dòng)態(tài)加載必須在系統(tǒng)啟動(dòng)組件之前完成入口的設(shè)定,而應(yīng)用作為整個(gè)應(yīng)用的上下文,會(huì)被系統(tǒng)第一時(shí)間調(diào)用,通過(guò)修改Android安裝包中安卓配置文件可以實(shí)現(xiàn)動(dòng)態(tài)加載入口的設(shè)定,為方便描述,假設(shè)加載Dalvik字節(jié)碼文件為A,待加載Dalvik字節(jié)碼文件為B0
[0039]具體的,其中修改步驟如下:
[0040]步驟101:配置文件A的類信息,修改安卓配置文件中應(yīng)用標(biāo)簽下name屬性為文件A中的應(yīng)用類名。
[0041]步驟102:配置文件B的類信息,在應(yīng)用標(biāo)簽后插入meta-data標(biāo)簽,meta-data有兩個(gè)屬性,分別為name和value,其中name值設(shè)定為C, value值為文件B中的應(yīng)用類名。
[0042]步驟2、動(dòng)態(tài)加載Android類:
[0043]通過(guò)配置動(dòng)態(tài)加載環(huán)境,并通過(guò)Android中的Dex類加載器的方法實(shí)現(xiàn)Android類的動(dòng)態(tài)加載,其中具體步驟如下:
[0044]步驟201:配置動(dòng)態(tài)加載環(huán)境,即當(dāng)前活動(dòng)進(jìn)程的相關(guān)配置;
[0045]步驟202:配置Dex類加載器方法相關(guān)參數(shù),包括文件B的路徑及其Iib文件路徑,修改系統(tǒng)組件類加載器的父元素為Dex類加載器,實(shí)現(xiàn)動(dòng)態(tài)加載文件B中的Android類。
[0046]步驟3、通過(guò)反射啟動(dòng)加載類:
[0047]動(dòng)態(tài)加載后的Android類并不能直接使用,通過(guò)讀取入口配置實(shí)現(xiàn)應(yīng)用跳轉(zhuǎn),并使用反射來(lái)啟動(dòng)加載類,如圖2所示,其中具體步驟如下:
[0048]步驟301:系統(tǒng)讀取動(dòng)態(tài)加載入口配置,返回meta-data標(biāo)簽下name屬性值為C的value值,返回值,計(jì)為D ;
[0049]步驟302:系統(tǒng)配置當(dāng)前進(jìn)程、應(yīng)用及應(yīng)用類信息;
[0050]步驟303:系統(tǒng)獲取文件A的應(yīng)用類;
[0051]步驟304:系統(tǒng)讀取當(dāng)前進(jìn)程的應(yīng)用列表;
[0052]步驟305:系統(tǒng)在當(dāng)前進(jìn)程的應(yīng)用列表中移除文件A的應(yīng)用類;
[0053]步驟306:系統(tǒng)創(chuàng)建文件B的應(yīng)用類信息;
[0054]步驟307:系統(tǒng)利用D值加載文件B的應(yīng)用類信息;
[0055]步驟308:系統(tǒng)獲取文件B的應(yīng)用類;
[0056]步驟309:系統(tǒng)創(chuàng)建文件B進(jìn)程的容器映射;
[0057]步驟310:系統(tǒng)創(chuàng)建迭代器遍歷B進(jìn)程的容器映射;
[0058]步驟311:系統(tǒng)啟動(dòng)文件B的應(yīng)用類。
[0059]本方法在Android平臺(tái)下實(shí)現(xiàn)了插件式的軟件開發(fā)架構(gòu),可對(duì)Android類進(jìn)行動(dòng)態(tài)加載并執(zhí)行,可以根據(jù)開發(fā)需求靈活實(shí)現(xiàn)自定義控件、動(dòng)態(tài)加載代碼甚至是應(yīng)用加密等功能。
【權(quán)利要求】
1.動(dòng)態(tài)加載安卓類的方法,其特征在于,包括以下幾個(gè)步驟: 步驟1、系統(tǒng)設(shè)定動(dòng)態(tài)加載入口 ; 步驟2、系統(tǒng)通過(guò)配置動(dòng)態(tài)加載環(huán)境,并通過(guò)安卓中的Dex類加載器實(shí)現(xiàn)安卓類的動(dòng)態(tài)加載; 步驟3、系統(tǒng)通過(guò)讀取動(dòng)態(tài)加載入口配置實(shí)現(xiàn)應(yīng)用跳轉(zhuǎn),并使用反射來(lái)啟動(dòng)加載類。
2.根據(jù)權(quán)利要求1所述的動(dòng)態(tài)加載安卓類的方法,其特征在于,所述步驟I中,系統(tǒng)設(shè)定動(dòng)態(tài)加載入口,包括配置加載Dalvik字節(jié)碼文件的類信息及待加載Dalvik字節(jié)碼文件的類信息,所述加載Dalvik字節(jié)碼文件,計(jì)為A,所述待加載Dalvik字節(jié)碼文件,計(jì)為B。
3.根據(jù)權(quán)利要求2所述的動(dòng)態(tài)加載安卓類的方法,其特征在于,所述配置文件A的類信息,包括修改安卓配置文件中應(yīng)用標(biāo)簽下name屬性為文件A的應(yīng)用類名。
4.根據(jù)權(quán)利要求2所述的動(dòng)態(tài)加載安卓類的方法,其特征在于,所述配置文件B的類信息,包括在安卓配置文件中的應(yīng)用標(biāo)簽后插入meta-data標(biāo)簽,所述meta-data有兩個(gè)屬性,分別為name和value,其中name值設(shè)定為C, value值為文件B的應(yīng)用類名。
5.根據(jù)權(quán)利要求2所述的動(dòng)態(tài)加載安卓類的方法,其特征在于,所述步驟2包括以下步驟: 步驟21、配置動(dòng)態(tài)加載環(huán)境;配置動(dòng)態(tài)加載環(huán)境,即利用Java反射機(jī)制,調(diào)用安卓系統(tǒng)啟動(dòng)進(jìn)程及當(dāng)前運(yùn)行進(jìn)程的方法; 步驟22、配置Dex類加載器的相關(guān)參數(shù),包括文件B的路徑及其庫(kù)文件路徑,修改系統(tǒng)組件類加載器的父元素為Dex類加載器,實(shí)現(xiàn)動(dòng)態(tài)加載文件B中的安卓類。
6.根據(jù)權(quán)利要求5所述的動(dòng)態(tài)加載安卓類的方法,其特征在于,所述步驟21中,通過(guò)利用Java反射機(jī)制,調(diào)用安卓系統(tǒng)啟動(dòng)進(jìn)程及當(dāng)前運(yùn)行進(jìn)程的方法配置動(dòng)態(tài)加載環(huán)境。
7.根據(jù)權(quán)利要求2所述的動(dòng)態(tài)加載安卓類的方法,其特征在于,所述步驟3包括以下步驟: 步驟301:系統(tǒng)讀取動(dòng)態(tài)加載入口配置,返回meta-data標(biāo)簽下name屬性值為C的value值,返回值,計(jì)為D ; 步驟302:系統(tǒng)配置當(dāng)前進(jìn)程、應(yīng)用及應(yīng)用類信息; 步驟303:系統(tǒng)獲取文件A的應(yīng)用類; 步驟304:系統(tǒng)讀取當(dāng)前進(jìn)程的應(yīng)用列表; 步驟305:系統(tǒng)在當(dāng)前進(jìn)程的應(yīng)用列表中移除文件A的應(yīng)用類; 步驟306:系統(tǒng)創(chuàng)建文件B的應(yīng)用類信息; 步驟307:系統(tǒng)利用D值加載文件B的應(yīng)用類信息; 步驟308:系統(tǒng)獲取文件B的應(yīng)用類; 步驟309:系統(tǒng)創(chuàng)建文件B進(jìn)程的容器映射; 步驟310:系統(tǒng)創(chuàng)建迭代器遍歷B進(jìn)程的容器映射; 步驟311:系統(tǒng)啟動(dòng)文件B的應(yīng)用類。
【文檔編號(hào)】G06F9/445GK103970563SQ201410150636
【公開日】2014年8月6日 申請(qǐng)日期:2014年4月15日 優(yōu)先權(quán)日:2014年4月15日
【發(fā)明者】譚源泉, 張 浩, 康紅娟, 王艷艷 申請(qǐng)人:四川長(zhǎng)虹電器股份有限公司