安卓系統(tǒng)Activity插件的創(chuàng)建、調(diào)用方法及系統(tǒng)的制作方法
【專利摘要】一種安卓系統(tǒng)Activity插件的創(chuàng)建方法和系統(tǒng),通過(guò)建立Context子類的信息接口,并將其覆蓋獲取資源的類方法,通過(guò)Context子類返回dex格式文件的資源,從而實(shí)現(xiàn)可以動(dòng)態(tài)的增加Activity插件的功能,而且可以使用Android資源類來(lái)查找資源。本發(fā)明還公開(kāi)了一種基于上述安卓系統(tǒng)Activity插件的調(diào)用方法和系統(tǒng),利用動(dòng)態(tài)代理攔截方式修改啟動(dòng)的Activity為Activity插件容器,使得Activity插件之間可以互相調(diào)用,且能夠調(diào)用未注冊(cè)Activity插件。
【專利說(shuō)明】安卓系統(tǒng)Activity插件的創(chuàng)建、調(diào)用方法及系統(tǒng)
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及Android系統(tǒng)開(kāi)發(fā)領(lǐng)域,特別是涉及一種安卓系統(tǒng)Activity插件的創(chuàng)建方法和系統(tǒng)。
【背景技術(shù)】
[0002]現(xiàn)如今Android系統(tǒng)已經(jīng)普遍運(yùn)用到生活當(dāng)中,Android系統(tǒng)以其操作簡(jiǎn)單且方便快捷而越來(lái)越為人們所接受。
[0003]—般的安卓系統(tǒng)Activity插件的創(chuàng)建方法和系統(tǒng),通過(guò)Java反射機(jī)制替換全局類加載到自定義的dalvik.system.DexClassLoader,從而在程序運(yùn)行過(guò)程中改變Activity的具體實(shí)現(xiàn)。
[0004]但是這種方式也有局限性,首先在項(xiàng)目中開(kāi)發(fā)的Activity必須和項(xiàng)目的Manifest, xml中指定的類名相同,并且由于Manifest, xml是安裝包的固有屬性,無(wú)法在運(yùn)行時(shí)改變,所以無(wú)法動(dòng)態(tài)的增加Activity插件,且Android資源類也找不到。
【發(fā)明內(nèi)容】
[0005]基于此,有必要針對(duì)無(wú)法動(dòng)態(tài)增加Activity插件的問(wèn)題,提供一種安卓系統(tǒng)Activity插件的創(chuàng)建方法和系統(tǒng)。
[0006]—種安卓系統(tǒng)Activity插件的創(chuàng)建方法,包括步驟:
[0007]根據(jù)選擇的dex格式文件建立覆蓋獲取資源的類方法的Context子類,并將所述Context子類實(shí)例化生成Context實(shí)例;
[0008]通過(guò)反射加載預(yù)定的Activity類,并將所述Activity類實(shí)例化生成Activity實(shí)例;
[0009]將所述Context子類實(shí)例化生成的實(shí)例替換所述Activity實(shí)例的成員變量mBase ;
[0010]將Activity插件容器中所有的Activity事件轉(zhuǎn)發(fā)至所述Activity實(shí)例中,得到Activity 插件。
[0011]—種安卓系統(tǒng)Activity插件的創(chuàng)建系統(tǒng),包括子類處理單元、活動(dòng)類實(shí)例化單元、實(shí)例替換單元和事件轉(zhuǎn)發(fā)單元;
[0012]所述子類處理單元用于根據(jù)選擇的dex格式文件建立覆蓋獲取資源的類方法的Context子類,并將所述Context子類實(shí)例化生成Context實(shí)例;
[0013]所述活動(dòng)類實(shí)例化單元用于通過(guò)反射加載預(yù)定的Activity類,并將所述Activity類實(shí)例化生成Activity實(shí)例;
[0014]所述實(shí)例替換單元用于將所述Context子類實(shí)例化生成的實(shí)例替換所述Activity實(shí)例的成員變量mBase ;
[0015]所述事件轉(zhuǎn)發(fā)單元用于將Activity插件容器中所有的Activity事件轉(zhuǎn)發(fā)至所述Activity實(shí)例中,得到Activity插件。[0016]—種安卓系統(tǒng)Activity插件的調(diào)用方法,包括所述的安卓系統(tǒng)Activity插件的創(chuàng)建方法,以及啟動(dòng)Activity插件容器,利用動(dòng)態(tài)代理攔截系統(tǒng)類ActivityManager的實(shí)現(xiàn)接口獲取啟動(dòng)Activity的Intent參數(shù);其中,所述Activity插件容器存儲(chǔ)有所述創(chuàng)建的Activity插件;
[0017]將預(yù)先獲取的Activity插件的參數(shù)替換啟動(dòng)Activity的Intent參數(shù),然后啟動(dòng)所述Activity插件容器中Activity插件。
[0018]—種安卓系統(tǒng)Activity插件的調(diào)用系統(tǒng),包括上述安卓系統(tǒng)Activity插件的創(chuàng)建系統(tǒng)、Activity插件容器啟動(dòng)單元、Intent參數(shù)采集單元和參數(shù)替換處理單元;
[0019]所述安卓系統(tǒng)Activity插件的創(chuàng)建系統(tǒng)用于創(chuàng)建Activity插件;
[0020]所述Activity插件容器啟動(dòng)單元用于啟動(dòng)Activity插件容器;
[0021]所述Intent參數(shù)采集單元用于利用動(dòng)態(tài)代理攔截系統(tǒng)類ActivityManager的實(shí)現(xiàn)接口獲取啟動(dòng)Activity的Intent參數(shù);
[0022]所述參數(shù)替換處理單元用于將預(yù)先獲取的Activity插件的參數(shù)替換啟動(dòng)Activity的Intent參數(shù),然后啟動(dòng)所述Activity插件容器中Activity插件。
[0023]上述安卓系統(tǒng)Activity插件的創(chuàng)建方法和系統(tǒng),根據(jù)選擇的dex格式文件建立覆蓋獲取資源的類方法的Context子類,并將所述Context子類實(shí)例化生成Context實(shí)例,通過(guò)反射加載預(yù)定的Activity類,并將所述Activity類實(shí)例化生成Activity實(shí)例,將所述Context子類實(shí)例化生成的實(shí)例替換所述Activity實(shí)例的Context,最后將Activity插件容器中所有的Activity事件轉(zhuǎn)發(fā)至所述Activity實(shí)例中,得到Activity插件。通過(guò)建立Context子類的信息接口,并將其覆蓋獲取資源的類方法,通過(guò)Context子類返回dex格式文件的資源,從而實(shí)現(xiàn)可以動(dòng)態(tài)的增加Activity插件的功能,而且可以使用Android資源類來(lái)查找資源。
[0024]上述安卓系統(tǒng)Activity插件的調(diào)用方法和系統(tǒng),通過(guò)動(dòng)態(tài)代理攔截系統(tǒng)類ActivityManager的實(shí)現(xiàn)接口獲取啟動(dòng)Activity的Intent參數(shù),將預(yù)先獲取的Activity插件的參數(shù)替換啟動(dòng)Activity的Intent參數(shù),這種利用動(dòng)態(tài)代理攔截方式修改啟動(dòng)的Activity為Activity插件容器,使得Activity插件之間可以互相調(diào)用,且能夠調(diào)用未注冊(cè)Activity 插件。
【專利附圖】
【附圖說(shuō)明】
[0025]圖1為安卓系統(tǒng)Activity插件的創(chuàng)建方法其中一個(gè)實(shí)施例的方法流程圖;
[0026]圖2為安卓系統(tǒng)Activity插件的創(chuàng)建方法其中另一個(gè)實(shí)施例的方法流程圖;
[0027]圖3為安卓系統(tǒng)Activity插件的創(chuàng)建系統(tǒng)其中一個(gè)實(shí)施例的方法流程圖;
[0028]圖4為安卓系統(tǒng)Activity插件的創(chuàng)建系統(tǒng)其中另一個(gè)實(shí)施例的方法流程圖;
【具體實(shí)施方式】
[0029]如圖1所示,一種安卓系統(tǒng)Activity插件的創(chuàng)建方法,包括步驟:
[0030]步驟S110,根據(jù)選擇的dex格式文件建立覆蓋獲取資源的類方法的Context子類,并將所述Context子類實(shí)例化生成Context實(shí)例。
[0031]在本實(shí)施例中,可以實(shí)現(xiàn)自定義的Context,所述Context為上下文,即在Android代表應(yīng)用環(huán)境的全局信息接口,通過(guò)所述Context覆蓋其中獲取資源的類方法用以返回dex格式文件的資源。所述Context子類為ContextThemeWrapper的子類,即實(shí)現(xiàn) ContextThemeWrapper 的子類,覆蓋其中的 getAssets、getResources、getTheme、getClassLoader等類方法,并通過(guò)AssetManager從插件APK中提取資源,所述AssetManager為資源管理類,用于根據(jù)文件名來(lái)查找資源。在本實(shí)施例中,ContextThemeffrapper只是在ContextWrapper的基礎(chǔ)上加入了主題Theme相關(guān)的一些內(nèi)容,對(duì)于Activity來(lái)說(shuō)需要處理一些主題Theme相關(guān)的東西。ContextWrapper是對(duì)Context的簡(jiǎn)單封裝,getAssets用于返回AssetManager實(shí)例,getResources用于返回Resources實(shí)例,Resources是一個(gè)資源類,通過(guò)該實(shí)例可以獲得指定的資源,如圖片、音樂(lè)、動(dòng)畫等。getTheme用于返回Theme實(shí)例,getClassLoader用于返回DexClassLoader生成ClassLoader實(shí)例。所述getClassLoader為Dex格式文件的類加載器,所述ClassLoader為類加載器。
[0032]步驟S120,通過(guò)反射加載預(yù)定的Activity類,并將所述Activity類實(shí)例化生成Activity 實(shí)例。
[0033]在本實(shí)施例中,所述反射為JAVA反射機(jī)制,所述JAVA反射機(jī)制是在運(yùn)行狀態(tài)中,對(duì)于任意一個(gè)類,都能夠知道這個(gè)類的所有屬性和方法,對(duì)于任意一個(gè)實(shí)例,都能夠調(diào)用它的任意一個(gè)方法的動(dòng)態(tài)獲取信息以及動(dòng)態(tài)調(diào)用實(shí)例的方法。
[0034]步驟S130,將所述Context子類實(shí)例化生成的實(shí)例替換所述Activity實(shí)例的成員變量mBase。所述成員變量mBase為ContextWrapper中的一個(gè)變量,作用是在當(dāng)前Context實(shí)例的類方法被調(diào)用時(shí),可以轉(zhuǎn)化為調(diào)用mBase指向的Context實(shí)例的相同類方法。所述Activity 是 ContextThemeffrapper 的子類,所述 ContextThemeffrapper 是 Contextffrapper的子類。
[0035]步驟S140,將Activity插件容器中所有的Activity事件轉(zhuǎn)發(fā)至所述Activity實(shí)例中,得到Activity插件。在本實(shí)施例中,可以模擬Activity的生存期,即容器中的所有Activity事件都轉(zhuǎn)發(fā)到插件Activity實(shí)例中。
[0036]在本實(shí)施例中,所述安卓系統(tǒng)即Android系統(tǒng)。所述Activity為Android系統(tǒng)四大組件之一,是Android應(yīng)用程序的一個(gè)用戶接口,用戶和應(yīng)用程序直接進(jìn)行交互的接口。Activity實(shí)際上也是一個(gè)各種控件的一個(gè)容器,可以把控件擺放進(jìn)去。本實(shí)施例中,在Activity插件容器中將建立的ContextThemeWrapper子類覆蓋獲取資源的類方法,并通過(guò)實(shí)例替換的形式將所述ContextThemeWrapper子類實(shí)例化生成的實(shí)例替換所述Activity插件容器中的預(yù)定的Activity類生成的Activity實(shí)例。
[0037]在一個(gè)具體的實(shí)施例中,可以通過(guò)DexClassLoader加載dex格式文件得到ClassLoader實(shí)例,通過(guò)創(chuàng)建一個(gè)AssetManager實(shí)例用于加載dex格式文件的資源,通過(guò)AssetManager實(shí)例創(chuàng)建一個(gè)Resources實(shí)例,進(jìn)一步派生一個(gè)Context的子類,重寫父類方法getAssets并返回AssetManager實(shí)例,重寫父類方法getResources并返回Resources實(shí)例,重寫父類方法getClassLoader并返回ClassLoader實(shí)例。通過(guò)ClassLoader實(shí)例反射出dex格式文件中給定的Activity類,創(chuàng)建一個(gè)Activity實(shí)例,創(chuàng)建一個(gè)Context子類實(shí)例,替換Activity實(shí)例的成員變量mBase,在實(shí)例運(yùn)行過(guò)程中可以直接使用dex中的資源。再通過(guò)一個(gè)攜帶指定dex文件路徑以及Activity類名的Intent啟動(dòng)一個(gè)空白的Activity,作為Activity插件的容器。在插件容器中加載給定dex格式文件,創(chuàng)建Activity插件。最終在容器中顯示Activity插件的界面,容器中的所有Activity事件轉(zhuǎn)發(fā)到Activity插件中。
[0038]上述安卓系統(tǒng)Activity插件的創(chuàng)建方法,根據(jù)選擇的dex格式文件建立覆蓋獲取資源的類方法的Context子類,并將所述Context子類實(shí)例化生成Context實(shí)例,通過(guò)反射加載預(yù)定的Activity類,并將所述Activity類實(shí)例化生成Activity實(shí)例,將所述Context子類實(shí)例化生成的實(shí)例替換所述Activity實(shí)例的成員變量mBase,最后將Activity插件容器中所有的Activity事件轉(zhuǎn)發(fā)至所述Activity實(shí)例中,得到Activity插件。通過(guò)建立Context子類的信息接口,并將其覆蓋獲取資源的類方法,通過(guò)Context子類返回dex格式文件的資源,從而實(shí)現(xiàn)可以動(dòng)態(tài)的增加Activity插件的功能,而且可以使用Android資源類來(lái)查找資源。
[0039]如圖2所示,在其中一個(gè)實(shí)施例中,所述的安卓系統(tǒng)Activity插件的創(chuàng)建方法,在所述步驟SllO之前,還包括步驟S150:
[0040]在Activity插件容器開(kāi)啟時(shí),動(dòng)態(tài)加載dex格式文件。在本實(shí)施例中,可以預(yù)先動(dòng)態(tài)加載dex格式文件,便于對(duì)所屬dex格式文件進(jìn)行后續(xù)處理。
[0041]在其中一個(gè)實(shí)施例中,所述的安卓系統(tǒng)Activity插件的創(chuàng)建方法,在所述步驟S150之前,還包括步驟S160:
[0042]通過(guò)Intent攜帶Activity插件參數(shù)啟動(dòng)用于創(chuàng)建Activity插件的Activity插件容器。在本實(shí)施例中,android中提供了 Intent機(jī)制來(lái)協(xié)助應(yīng)用間的交互與通訊,Intent負(fù)責(zé)對(duì)應(yīng)用中一次操作的動(dòng)作、動(dòng)作涉及數(shù)據(jù)、附加數(shù)據(jù)進(jìn)行描述,Android則根據(jù)此Intent的描述,負(fù)責(zé)找到對(duì)應(yīng)的組件,將Intent傳遞給調(diào)用的組件,并完成組件的調(diào)用。Intent不僅可用于應(yīng)用程序之間,也可用于應(yīng)用程序內(nèi)部的Activity和Service之間的交互。因此,Intent在這里起著一個(gè)媒體中介的作用,專門提供互相調(diào)用的相關(guān)信息,實(shí)現(xiàn)調(diào)用者與被調(diào)用者之間的解耦可以理解為一個(gè)可以在Android四大組件中傳遞的數(shù)據(jù)包。可以開(kāi)啟Activity插件容器,便于后續(xù)處理步驟進(jìn)行實(shí)施。
[0043]—種安卓系統(tǒng)Activity插件的調(diào)用方法,包括所述的安卓系統(tǒng)Activity插件的創(chuàng)建方法,以及啟動(dòng)Activity插件容器,利用動(dòng)態(tài)代理攔截系統(tǒng)類ActivityManager的實(shí)現(xiàn)接口獲取啟動(dòng)Activity的Intent參數(shù);其中,所述Activity插件容器存儲(chǔ)有所述創(chuàng)建的Activity插件;
[0044]將預(yù)先獲取的Activity插件的參數(shù)替換啟動(dòng)Activity的Intent參數(shù),然后啟動(dòng)所述Activity插件容器中Activity插件。
[0045]在本實(shí)施例中,所述動(dòng)態(tài)代理是java.lang.refIect包的一部分,它允許程序創(chuàng)建代理實(shí)例,代理實(shí)例能實(shí)現(xiàn)一個(gè)或多個(gè)已知接口,并用反射代替內(nèi)置的虛方法分派,編程地分派對(duì)接口方法的調(diào)用。這個(gè)過(guò)程允許實(shí)現(xiàn)“截取”方法調(diào)用,重新路由它們或者動(dòng)態(tài)地添加功能。通過(guò)動(dòng)態(tài)代理攔截系統(tǒng)類ActivityManager的具體實(shí)現(xiàn)接口 IActivityManager獲取啟動(dòng)Activity的Intent參數(shù),并將將預(yù)先獲取的Activity插件的參數(shù)替換啟動(dòng)Activity的Intent參數(shù),從而實(shí)現(xiàn)Activity插件之間互相調(diào)用,且能夠調(diào)用未注冊(cè)Activity插件。在本實(shí)施例中,所述ActivityManager為Activity管理類,用于管理Activity的啟動(dòng)、關(guān)閉等。所述IActivityManager為Activity管理類的具體實(shí)現(xiàn)接口。[0046]上述安卓系統(tǒng)Activity插件的調(diào)用方法,通過(guò)動(dòng)態(tài)代理攔截系統(tǒng)類ActivityManager的實(shí)現(xiàn)接口獲取啟動(dòng)Activity的Intent參數(shù),將預(yù)先獲取的Activity插件的參數(shù)替換啟動(dòng)Activity的Intent參數(shù),這種利用動(dòng)態(tài)代理攔截方式修改啟動(dòng)的Activity為Activity插件容器,使得Activity插件之間可以互相調(diào)用,且能夠調(diào)用未注冊(cè)Activity 插件。
[0047]在其中一個(gè)實(shí)施例中,所述的安卓系統(tǒng)Activity插件的調(diào)用方法,在所述將預(yù)先獲取的Activity插件的參數(shù)替換啟動(dòng)Activity的Intent參數(shù),然后啟動(dòng)所述Activity插件容器中Activity插件的步驟之前,還包括步驟:
[0048]獲取所述Activity插件的參數(shù),所述參數(shù)為預(yù)定啟動(dòng)的Activity參數(shù)。在本實(shí)施例中所述預(yù)定啟動(dòng)的Activity參數(shù)為系統(tǒng)需要啟動(dòng)的Activity參數(shù)。
[0049]如圖3所示,一種安卓系統(tǒng)Activity插件的創(chuàng)建系統(tǒng),包括子類處理單元110、活動(dòng)類實(shí)例化單元120、實(shí)例替換單元130和事件轉(zhuǎn)發(fā)單元140 ;
[0050]所述子類處理單元110用于根據(jù)選擇的dex格式文件建立覆蓋獲取資源的類方法的Context子類,并將所述Context子類實(shí)例化生成Context實(shí)例;
[0051]所述活動(dòng)類實(shí)例化單元120用于通過(guò)反射加載預(yù)定的Activity類,并將所述Activity類實(shí)例化生成Activity實(shí)例;
[0052]所述實(shí)例替換單元130用于將所述Context子類實(shí)例化生成的實(shí)例替換所述Activity實(shí)例的成員變量mBase ;
[0053]所述事件轉(zhuǎn)發(fā)單元140用于將Activity插件容器中所有的Activity事件轉(zhuǎn)發(fā)至所述Activity實(shí)例中,得到Activity插件。
[0054]上述安卓系統(tǒng)Activity插件的創(chuàng)建系統(tǒng),根據(jù)選擇的dex格式文件建立覆蓋獲取資源的類方法的Context子類,并將所述Context子類實(shí)例化生成Context實(shí)例,通過(guò)反射加載預(yù)定的Activity類,并將所述Activity類實(shí)例化生成Activity實(shí)例,將所述Context子類實(shí)例化生成的實(shí)例替換所述Activity實(shí)例的成員變量mBase,最后將Activity插件容器中所有的Activity事件轉(zhuǎn)發(fā)至所述Activity實(shí)例中,得到Activity插件。通過(guò)建立Context子類的信息接口,并將其覆蓋獲取資源的類方法,通過(guò)Context子類返回dex格式文件的資源,從而實(shí)現(xiàn)可以動(dòng)態(tài)的增加Activity插件的功能,而且可以使用Android資源類來(lái)查找資源。
[0055]如圖4所示,在其中一個(gè)實(shí)施例中,所述的安卓系統(tǒng)Activity插件的創(chuàng)建系統(tǒng),還包括與所述子類處理單元110連接的插件加載單元150 ;
[0056]所述插件加載單元150用于在Activity插件容器開(kāi)啟時(shí),動(dòng)態(tài)加載dex格式文件。
[0057]在其中一個(gè)實(shí)施例中,所述的安卓系統(tǒng)Activity插件的創(chuàng)建系統(tǒng),還包括與所述插件加載單元150連接的容器啟動(dòng)單元160 ;
[0058]所述容器啟動(dòng)單元160用于通過(guò)Intent攜帶Activity插件參數(shù)啟動(dòng)用于創(chuàng)建Activity插件的Activity插件容器。
[0059]由于所述的安卓系統(tǒng)Activity插件的創(chuàng)建系統(tǒng)其他部分技術(shù)特征與上述安卓系統(tǒng)Activity插件的創(chuàng)建方法相同,在此不予贅述。
[0060]一種安卓系統(tǒng)Activity插件的調(diào)用系統(tǒng),包括上述安卓系統(tǒng)Activity插件的創(chuàng)建系統(tǒng)、Activity插件容器啟動(dòng)單元、Intent參數(shù)采集單元和參數(shù)替換處理單元;
[0061]所述安卓系統(tǒng)Activity插件的創(chuàng)建系統(tǒng)用于創(chuàng)建Activity插件;
[0062]所述Activity插件容器啟動(dòng)單元用于啟動(dòng)Activity插件容器;
[0063]所述Intent參數(shù)采集單元用于利用動(dòng)態(tài)代理攔截系統(tǒng)類ActivityManager的實(shí)現(xiàn)接口獲取啟動(dòng)Activity的Intent參數(shù);
[0064]所述參數(shù)替換處理單元用于將預(yù)先獲取的Activity插件的參數(shù)替換啟動(dòng)Activity的Intent參數(shù),然后啟動(dòng)所述Activity插件容器中Activity插件。
[0065]上述安卓系統(tǒng)Activity插件的調(diào)用方法和系統(tǒng),通過(guò)動(dòng)態(tài)代理攔截系統(tǒng)類ActivityManager的實(shí)現(xiàn)接口獲取啟動(dòng)Activity的Intent參數(shù),將預(yù)先獲取的Activity插件的參數(shù)替換啟動(dòng)Activity的Intent參數(shù),這種利用動(dòng)態(tài)代理攔截方式修改啟動(dòng)的Activity為Activity插件容器,使得Activity插件之間可以互相調(diào)用,且能夠調(diào)用未注冊(cè)Activity 插件。
[0066]在其中一個(gè)實(shí)施例中,所述的安卓系統(tǒng)Activity插件的調(diào)用系統(tǒng),還包括與所述參數(shù)替換處理單元連接的Activity插件參數(shù)獲取單元;
[0067]所述Activity插件參數(shù)獲取單元用于獲取所述Activity插件的參數(shù),所述參數(shù)為預(yù)定啟動(dòng)的Activity參數(shù)。
[0068]由于所述的安卓系統(tǒng)Activity插件的調(diào)用系統(tǒng)其他部分技術(shù)特征與上述安卓系統(tǒng)Activity插件的調(diào)用方法相同,在此不予贅述。
[0069]以上所述實(shí)施例僅表達(dá)了本發(fā)明的幾種實(shí)施方式,其描述較為具體和詳細(xì),但并不能因此而理解為對(duì)本發(fā)明專利范圍的限制。應(yīng)當(dāng)指出的是,對(duì)于本領(lǐng)域的普通技術(shù)人員來(lái)說(shuō),在不脫離本發(fā)明構(gòu)思的前提下,還可以做出若干變形和改進(jìn),這些都屬于本發(fā)明的保護(hù)范圍。因此,本發(fā)明專利的保護(hù)范圍應(yīng)以所附權(quán)利要求為準(zhǔn)。
【權(quán)利要求】
1.一種安卓系統(tǒng)Activity插件的創(chuàng)建方法,其特征在于,包括步驟: 根據(jù)選擇的dex格式文件建立覆蓋獲取資源的類方法的Context子類,并將所述Context子類實(shí)例化生成Context實(shí)例; 通過(guò)反射加載預(yù)定的Activity類,并將所述Activity類實(shí)例化生成Activity實(shí)例; 將所述Context子類實(shí)例化生成的實(shí)例替換所述Activity實(shí)例的成員變量mBase ; 將Activity插件容器中所有的Activity事件轉(zhuǎn)發(fā)至所述Activity實(shí)例中,得到活動(dòng)Activity 插件。
2.根據(jù)權(quán)利要求1所述的安卓系統(tǒng)Activity插件的創(chuàng)建方法,其特征在于,在所述建立Context子類,將所述Context子類覆蓋獲取資源的類方法,并將所述Context子類實(shí)例化生成實(shí)例的步驟之前,還包括步驟: 在Activity插件容器開(kāi)啟時(shí),動(dòng)態(tài)加載dex格式文件。
3.根據(jù)權(quán)利要求2所述的安卓系統(tǒng)Activity插件的創(chuàng)建方法,其特征在于,在所述動(dòng)態(tài)加載dex格式文件步驟之前,還包括步驟: 通過(guò)Intent攜帶Activity插件參數(shù)啟動(dòng)用于創(chuàng)建Activity插件的Activity插件容器。
4.一種安卓系統(tǒng)Activity插件的調(diào)用方法,其特征在于,包括如權(quán)利要求1至3任一項(xiàng)所述的安卓系統(tǒng)Activity插件的創(chuàng)建方法,以及啟動(dòng)Activity插件容器,利用動(dòng)態(tài)代理攔截系統(tǒng)類ActivityManager的實(shí)現(xiàn)接口獲取啟動(dòng)Activity的Intent參數(shù);其中,所述Activity插件容器存儲(chǔ)有所述創(chuàng)建的Activity插件; 將預(yù)先獲取的Activity插件的參數(shù)替換啟動(dòng)Activity的Intent參數(shù),然后啟動(dòng)所述Activity插件容器。
5.根據(jù)權(quán)利要求4所述的安卓系統(tǒng)Activity插件的調(diào)用方法,其特征在于,在所述將預(yù)先獲取的Activity插件的參數(shù)替換啟動(dòng)Activity的Intent參數(shù),然后啟動(dòng)所述Activity插件容器的步驟之前,還包括步驟: 獲取所述Activity插件的參數(shù),所述參數(shù)為預(yù)定啟動(dòng)的Activity參數(shù)。
6.一種安卓系統(tǒng)Activity插件的創(chuàng)建系統(tǒng),其特征在于,包括子類處理單元、Activity類實(shí)例化單元、實(shí)例替換單元和事件轉(zhuǎn)發(fā)單元; 所述子類處理單元用于根據(jù)選擇的dex格式文件建立覆蓋獲取資源的類方法的Context子類,并將所述Context子類實(shí)例化生成Context實(shí)例; 所述活動(dòng)類實(shí)例化單元用于通過(guò)反射加載預(yù)定的Activity類,并將所述Activity類實(shí)例化生成Activity實(shí)例; 所述實(shí)例替換單元用于將所述Context子類實(shí)例化生成的實(shí)例替換所述Activity實(shí)例的成員變量mBase ; 所述事件轉(zhuǎn)發(fā)單元用于將Activity插件容器中所有的Activity事件轉(zhuǎn)發(fā)至所述Activity實(shí)例中,得到Activity插件。
7.根據(jù)權(quán)利要求6所述的安卓系統(tǒng)Activity插件的創(chuàng)建系統(tǒng),其特征在于,還包括與所述子類處理單元連接的插件加載單元; 所述插件加載單元用于在Activity插件容器開(kāi)啟時(shí),動(dòng)態(tài)加載dex格式文件。
8.根據(jù)權(quán)利要求7所述的安卓系統(tǒng)Activity插件的創(chuàng)建系統(tǒng),其特征在于,還包括與所述插件加載單元連接的容器啟動(dòng)單元; 所述容器啟動(dòng)單元用于通過(guò)Intent攜帶Activity插件參數(shù)啟動(dòng)用于創(chuàng)建Activity插件的Activity插件容器。
9.一種安卓系統(tǒng)Activity插件的調(diào)用系統(tǒng),其特征在于,包括上述安卓系統(tǒng)Activity插件的創(chuàng)建系統(tǒng)、Activity插件容器啟動(dòng)單元、Intent參數(shù)采集單元和參數(shù)替換處理單元; 所述安卓系統(tǒng)Activity插件的創(chuàng)建系統(tǒng)用于創(chuàng)建Activity插件; 所述Activity插件容器啟動(dòng)單元用于啟動(dòng)Activity插件容器; 所述Intent參數(shù)采集單元用于利用動(dòng)態(tài)代理攔截系統(tǒng)類ActivityManager的實(shí)現(xiàn)接口獲取啟動(dòng)Activity的Intent參數(shù); 所述參數(shù)替換處理 單元用于將預(yù)先獲取的Activity插件的參數(shù)替換啟動(dòng)Activity的Intent參數(shù),然后啟動(dòng)所述Activity插件容器中Activity插件。
10.根據(jù)權(quán)利要求9所述的安卓系統(tǒng)Activity插件的調(diào)用系統(tǒng),其特征在于,還包括與所述參數(shù)替換處理單元連接的Activity插件參數(shù)獲取單元; 所述Activity插件參數(shù)獲取單元用于獲取所述Activity插件的參數(shù),所述參數(shù)為預(yù)定啟動(dòng)的Activity參數(shù)。
【文檔編號(hào)】G06F9/44GK103744669SQ201310738209
【公開(kāi)日】2014年4月23日 申請(qǐng)日期:2013年12月26日 優(yōu)先權(quán)日:2013年12月26日
【發(fā)明者】李志毅, 鄧捷, 梁狄, 羅國(guó)鴻, 黃柑波 申請(qǐng)人:世紀(jì)龍信息網(wǎng)絡(luò)有限責(zé)任公司