一種用于Android系統(tǒng)的插件加載方法及裝置的制造方法
【專利摘要】本發(fā)明提供一種用于Android系統(tǒng)的插件加載方法及裝置,包括以下步驟:接收程序或者用戶對插件入口的操作指令;根據(jù)所述操作指令,判斷所述插件是否存在;如果判斷出所述插件存在,則啟動插件進程解析并運行所述插件的安裝包;啟動所述插件對應的代理類;實例化插件類,并對插件類進行動態(tài)注入所述代理類對應的屬性值,以使所述插件加載完成;對所述插件類進行生命周期進行回調(diào),完成模擬Android運行時環(huán)境。本發(fā)明通過插件可以實現(xiàn)將自己的應用分拆,某些功能可以在插件中實現(xiàn),用到時再進行下載,而且不用預集成或者安裝。如果有新功能的添加,不需要更新應用,只要預留插件管理,便可以通過添加插件的方式,動態(tài)更新自己的應用;該功能需要改進或擴展,更新插件即可,無需頻繁安裝或卸載。
【專利說明】
一種用于Android系統(tǒng)的插件加載方法及裝置
技術領域
[0001]本發(fā)明涉及插件技術領域,尤其涉及一種用于Android系統(tǒng)的插件加載方法及裝置?!颈尘凹夹g】
[0002]在現(xiàn)有技術中,隨著Android系統(tǒng)和應用的不斷迭代,應用包的體積不斷增大,項目越來越臃腫;項目新功能的添加,無法確定與用戶匹配性;發(fā)生嚴重異常往往牽一發(fā)而動全身,只能緊急發(fā)布補丁版本,強制用戶進行更新。結(jié)果頻繁的更新,反而容易降低用戶使用黏性。或者是公司業(yè)務的不斷發(fā)展,業(yè)務越來越多,需要用戶安裝的同系應用越來越多, 傳統(tǒng)方式需要通過安裝引導用戶下載新應用并安裝,給用戶操作帶來極大的不便,同時轉(zhuǎn)化率較低。
[0003]故,有必要提出一種新的技術方案,以解決上述技術問題。
【發(fā)明內(nèi)容】
[0004]有鑒于此,本發(fā)明的目的在于提供一種用于Android系統(tǒng)的插件加載方法及裝置, 旨在解決現(xiàn)有技術中存在的需要用戶安裝的同系應用越來越多,傳統(tǒng)方式需要通過安裝引導用戶下載新應用并安裝,給用戶操作帶來極大的不便,同時轉(zhuǎn)化率較低的問題。
[0005]為解決上述技術問題,本發(fā)明實施例提供了以下技術方案:本發(fā)明實施例提供了一種用于Android系統(tǒng)的插件加載方法,所述用于Android系統(tǒng)的插件加載方法,包括以下步驟:接收程序或者用戶對插件入口的操作指令;根據(jù)所述操作指令,判斷所述插件是否存在;如果判斷出所述插件存在,則啟動插件進程解析并運行所述插件的安裝包;啟動所述插件對應的代理類;實例化插件類,并對插件類進行動態(tài)注入所述代理類對應的屬性值,以使所述插件加載完成;對所述插件類進行生命周期進行回調(diào),完成模擬Android運行時環(huán)境。
[0006]為解決上述技術問題,本發(fā)明實施例還提供了以下技術方案:本發(fā)明實施例還提供了一種用于Android系統(tǒng)的插件加載裝置,所述用于Android系統(tǒng)的插件加載裝置,包括:接收模塊,用于接收程序或者用戶對插件入口的操作指令;判斷模塊,用于根據(jù)所述操作指令,判斷所述插件是否存在;解析模塊,用于如果判斷出所述插件存在,則啟動插件進程解析并運行所述插件的安裝包;啟動模塊,用于啟動所述插件對應的代理類;注入模塊,用于實例化插件類,并對插件類進行動態(tài)注入所述代理類對應的屬性值,以使所述插件加載完成;回調(diào)模塊,用于對所述插件類進行生命周期進行回調(diào),完成模擬Android運行時環(huán)境。
[0007]相對于現(xiàn)有技術,本發(fā)明的用于Android系統(tǒng)的插件加載方法及裝置,通過插件可以實現(xiàn)將自己的應用分拆,某些功能可以在插件中實現(xiàn),用到時再進行下載,而且不用預集成或者安裝。如果有新功能的添加,不需要更新應用,只要預留插件管理,便可以通過添加插件的方式,動態(tài)更新自己的應用;該功能需要改進或擴展,更新插件即可,無需頻繁安裝或卸載。對應同系應用,正常的引流方式只能引導用戶進行新應用的下載和安裝;如果使用插件化開發(fā),則無需安裝應用,關閉插件功能也十分方便,省去應用安裝和卸載的過程,可以實現(xiàn)無縫引流?!靖綀D說明】
[0008]圖1是本發(fā)明實施例一提供的用于Android系統(tǒng)的插件加載方法的實現(xiàn)流程示意圖;圖2是本發(fā)明實施例二提供的用于Android系統(tǒng)的插件加載方法的實現(xiàn)流程示意圖;圖3是本發(fā)明實施例三提供的用于Android系統(tǒng)的插件加載裝置的模塊示意圖;圖4是本發(fā)明實施例四提供的用于Android系統(tǒng)的插件加載裝置的模塊示意圖?!揪唧w實施方式】
[0009]請參照附圖中的圖式,其中相同的組件符號代表相同的組件,本發(fā)明的原理是以實施在一適當?shù)倪\算環(huán)境中來舉例說明。以下的說明是基于所示例的本發(fā)明的具體實施例,其不應被視為限制本發(fā)明未在此詳述的其它具體實施例。
[0010]本發(fā)明原理以上述文字來說明,其并不代表為一種限制,本領域技術人員將可了解到以下所述的多種步驟及操作亦可實施在硬件當中。本發(fā)明的原理使用許多其它泛用性或特定目的運算、通信環(huán)境或組態(tài)來進行操作。
[0011]本發(fā)明提供的用于Android系統(tǒng)的插件加載方法及裝置,主要應用于終端設備, 如:手機、電腦、個人數(shù)字助理(Personal Digital Assistant,PDA)等。[〇〇12]以下將分別進行詳細說明。
[0013] 實施例一請參閱圖1,所示為本發(fā)明實施例提供的用于Android系統(tǒng)的插件加載方法。[〇〇14] 所述用于Android系統(tǒng)的插件加載方法,應用于終端設備中,具體包括如下步驟: 在步驟S101中,接收程序或者用戶對插件入口的操作指令;在本發(fā)明實施例中,插件為:免安裝運行的dex或者apk文件。
[0015]在步驟S102中,根據(jù)所述操作指令,判斷所述插件是否存在;在本發(fā)明實施例中,如果判斷出所述插件不存在,則下載最新插件。
[0016]在步驟S103中,如果判斷出所述插件存在,則啟動插件進程解析并運行所述插件的安裝包;在本發(fā)明實施例中,如果判斷出所述插件存在,則進一步判斷所述插件是否為最新版本的插件,如果判斷出是最新版本的插件,則啟動插件進程解析并運行所述插件的安裝包。 如果判斷出不是最新版本的插件,則下載最新插件。[0〇17]其中,解析所述插件的安裝包,初始化該APK的文件包信息(Packagelnfo);初始化該八?1(對應的類裝載器(〇61(:1&8 8 1〇&(16〇;初始化該厶?1(對應的資源管理器 (AssetManager);初始化該APK對應的資源(Resources);借助初始化好的資源管理器 (AssetManager)解析 APK 包中的 AndroidManifest ? xml 配置文件。[〇〇18]在步驟S104中,啟動所述插件對應的代理類;進一步的,修改代理類(ProxyActivity)的獲取資源(getResources())和資源管理器 (getAssetsO)方法的返回值為相應的插件對象,實現(xiàn)插件Activity中可以獲取到APK包中 drawable和assets目錄下的內(nèi)容;修改代理類(ProxyActivity)的獲取包管理類方法 (getPackageManager())的返回值為插件自定義PackageManager,實現(xiàn)在插件中能直接獲取到插件本身APK包的Package Info等信息。[〇〇19]在步驟S105中,實例化插件類,并對插件類進行動態(tài)注入所述代理類對應的屬性值,以使所述插件加載完成;具體的,通過調(diào)用其類裝載器(DexClassloader)的裝載類(loadClass)的方法實現(xiàn)對插件安裝包中類的加載。
[0020]在本發(fā)明實施例中,所述對插件類進行動態(tài)注入所述代理類對應的屬性值的步驟,具體包括但不限于以下幾點:對插件類進行動態(tài)注入資源及元數(shù)據(jù)接口,便于運行時實現(xiàn)資源和元數(shù)據(jù)的存取。 [0〇21] 對插件類進行動態(tài)注入自定義Instrumentat1n實現(xiàn)對跳轉(zhuǎn)類的重定向;其中,自定義Instrumental:1on注入插件Activity中,當插件Activity需要進行跳轉(zhuǎn)時,重定向 Intent中指定的類名為相應類型的代理類,再由系統(tǒng)啟動代理Activity。[〇〇22] 對插件類進行動態(tài)注入宿主Window對象實現(xiàn)對插件界面的展示以及交互。其中, 對插件類進行動態(tài)注入宿主Window對象實現(xiàn)對插件界面的展示以及交互的步驟,具體包括:通過Java的反射機制將代理Activity動態(tài)注入至newlnstance生成的Activity類中,將其轉(zhuǎn)變成偽Activity類;此時的插件Activity類可以自主控制ProxyActivity的屏幕 (Phoneffindow)在步驟S106中,對所述插件類進行生命周期進行回調(diào),完成模擬Android運行時環(huán)境。
[0023]在本發(fā)明實施例中,對所述插件類進行生命周期進行回調(diào)后,用戶與插件便可開始交互。[〇〇24] 實施例二請參閱圖2,作為本發(fā)明另一實施例,當應用需要增加新功能時,所述方法還包括: 在步驟S201中,獲取動態(tài)功能列表;在步驟S202中,檢查該列表中的功能對應的插件是否存在;在步驟S203中,如果存在,則解析所述插件的安裝包;如果不存在,則下載該功能對應的插件文件。[0〇25]在步驟S204中,對插件進行預加載;在步驟S205中,接收用戶選擇的功能;在步驟S206中,啟動所述選擇的功能對應的插件,此時,用戶與新功能便可開始交互。 [〇〇26]由上可知,本發(fā)明提供的用于Android系統(tǒng)的插件加載方法,通過插件可以實現(xiàn)將自己的應用分拆,某些功能可以在插件中實現(xiàn),用到時再進行下載,而且不用預集成或者安裝。如果有新功能的添加,不需要更新應用,只要預留插件管理,便可以通過添加插件的方式,動態(tài)更新自己的應用;該功能需要改進或擴展,更新插件即可,無需頻繁安裝或卸載。對應同系應用,正常的引流方式只能引導用戶進行新應用的下載和安裝;如果使用插件化開發(fā),則無需安裝應用,關閉插件功能也十分方便,省去應用安裝和卸載的過程,可以實現(xiàn)無縫引流。
[0027]實施例三請參閱圖3,為本發(fā)明實施例提供的用于Android系統(tǒng)的插件加載裝置,為了便于說明, 僅示出了與本發(fā)明實施例相關的部分。所述用于Android系統(tǒng)的插件加載裝置包括:接收模塊1 〇 1、判斷模塊1 〇2、解析模塊103、啟動模塊104、注入模塊105、回調(diào)模塊106。所述用于 Android系統(tǒng)的插件加載裝置可以是內(nèi)置于終端設備中的軟件單元、硬件單元或者是軟硬件結(jié)合的單元。
[0028]接收模塊101,用于接收程序或者用戶對插件入口的操作指令;判斷模塊102,用于根據(jù)所述操作指令,判斷所述插件是否存在;解析模塊103,用于如果判斷出所述插件存在,則啟動插件進程解析并運行所述插件的安裝包;啟動模塊104,用于啟動所述插件對應的代理類;注入模塊105,用于實例化插件類,并對插件類進行動態(tài)注入所述代理類對應的屬性值,以使所述插件加載完成;回調(diào)模塊106,用于對所述插件類進行生命周期進行回調(diào),完成模擬Android運行時環(huán)境。[〇〇29]作為本發(fā)明一實施例,所述用于Android系統(tǒng)的插件加載裝置,還包括:第一修改模塊,用于修改代理類(?1'(?5^〇1:;[¥;[丨5〇的獲取資源(86丨1^80111'〇68())和資源管理器(getAssetsO)方法的返回值為相應的插件對象,實現(xiàn)插件Activity中可以獲取到APK包中drawable和assets目錄下的內(nèi)容;第二修改模塊,用于修改代理類(ProxyActivity)的獲取包管理類方法 (getPackageManager())的返回值為插件自定義PackageManager,實現(xiàn)在插件中能直接獲取到插件本身APK包的Package Info等信息。
[0030]在本發(fā)明實施例中,所述注入模塊包括:注入子模塊,用于對插件類進行動態(tài)注入自定義Instrumentat1n實現(xiàn)對跳轉(zhuǎn)類的重定向;以及對象注入模塊,用于對插件類進行動態(tài)注入宿主Window對象實現(xiàn)對插件界面的展示以及交互。[〇〇31] 具體的,所述對象注入模塊,還用于通過Java的反射機制將代理Act ivi ty動態(tài)注入至 newlnstance生成的Activity類中,將其轉(zhuǎn)變成偽Activity類;此時的插件Activity類自主控制ProxyActivity的屏幕。[〇〇32]實施例四請參閱圖4,作為本發(fā)明另一實施例,所述用于Android系統(tǒng)的插件加載裝置,還包括: 獲取模塊201,用于獲取動態(tài)功能列表;檢查模塊202,用于檢查該列表中的功能對應的插件是否存在;安裝包解析模塊203,用于如果存在,則解析所述插件的安裝包;加載模塊204,用于對插件進行預加載;功能接收模塊205,用于接收用戶選擇的功能;插件啟動模塊206,用于啟動所述選擇的功能對應的插件。[〇〇33]由上可知,本發(fā)明提供的用于Android系統(tǒng)的插件加載裝置,通過插件可以實現(xiàn)將自己的應用分拆,某些功能可以在插件中實現(xiàn),用到時再進行下載,而且不用預集成或者安裝。如果有新功能的添加,不需要更新應用,只要預留插件管理,便可以通過添加插件的方式,動態(tài)更新自己的應用;該功能需要改進或擴展,更新插件即可,無需頻繁安裝或卸載。對應同系應用,正常的引流方式只能引導用戶進行新應用的下載和安裝;如果使用插件化開發(fā),則無需安裝應用,關閉插件功能也十分方便,省去應用安裝和卸載的過程,可以實現(xiàn)無縫引流。[〇〇34]本發(fā)明實施例提供的用于Android系統(tǒng)的插件加載方法及裝置屬于同一構思,其具體實現(xiàn)過程詳見說明書全文,此處不再贅述。[〇〇35]本領域普通技術人員可以理解上述實施例的各種方法中的全部或部分步驟是可以通過程序來指令相關的硬件來完成,該程序可以存儲于一計算機可讀存儲介質(zhì)中,存儲介質(zhì)可以包括:只讀存儲器(R〇M,Read Only Memory)、隨機存取記憶體(RAM,Random Access Memory)、磁盤或光盤等。[〇〇36] 綜上所述,雖然本發(fā)明已以優(yōu)選實施例揭露如上,但上述優(yōu)選實施例并非用以限制本發(fā)明,本領域的普通技術人員,在不脫離本發(fā)明的精神和范圍內(nèi),均可作各種更動與潤飾,因此本發(fā)明的保護范圍以權利要求界定的范圍為準。
【主權項】
1.一種用于Android系統(tǒng)的插件加載方法,其特征在于,所述用于Android系統(tǒng)的插件 加載方法,包括以下步驟:接收程序或者用戶對插件入口的操作指令;根據(jù)所述操作指令,判斷所述插件是否存在;如果判斷出所述插件存在,則啟動插件進程解析并運行所述插件的安裝包;啟動所述插件對應的代理類;實例化插件類,并對插件類進行動態(tài)注入所述代理類對應的屬性值,以使所述插件加 載完成;對所述插件類進行生命周期進行回調(diào),完成模擬Android運行時環(huán)境。2.如權利要求1所述的用于Android系統(tǒng)的插件加載方法,其特征在于,在所述啟動所 述插件對應的代理類的步驟之后,還包括:修改代理類(ProxyActivity)的獲取資源(getResources())和資源管理器(getAssets ())方法的返回值為相應的插件對象,實現(xiàn)插件Activity中可以獲取到APK包中drawable和 assets目錄下的內(nèi)容;修改代理類(?1'(?5^(31:;[¥;^5〇的獲取包管理類方法(86七?3^^^6|^1的861'())的返回值 為插件自定義PackageManager,實現(xiàn)在插件中能直接獲取到插件本身APK包的Packagelnfo 等信息。3.如權利要求1所述的用于Android系統(tǒng)的插件加載方法,其特征在于,所述對插件類 進行動態(tài)注入所述代理類對應的屬性值的步驟,具體包括:對插件類進行動態(tài)注入自定義Instrumentat1n實現(xiàn)對跳轉(zhuǎn)類的重定向;以及 對插件類進行動態(tài)注入宿主Window對象實現(xiàn)對插件界面的展示以及交互。4.如權利要求3所述的用于Android系統(tǒng)的插件加載方法,其特征在于,對插件類進行 動態(tài)注入宿主Window對象實現(xiàn)對插件界面的展示以及交互的步驟,具體包括:通過Java的反射機制將代理Activity動態(tài)注入至newlnstance生成的Activity類中, 將其轉(zhuǎn)變成偽Activity類;此時的插件Activity類自主控制ProxyActivity的屏幕。5.如權利要求1所述的用于Android系統(tǒng)的插件加載方法,其特征在于,所述用于 Andr 〇 i d系統(tǒng)的插件加載方法,還包括:獲取動態(tài)功能列表;檢查該列表中的功能對應的插件是否存在;如果存在,則解析所述插件的安裝包;對插件進行預加載;接收用戶選擇的功能;啟動所述選擇的功能對應的插件。6.—種用于Android系統(tǒng)的插件加載裝置,其特征在于,所述用于Android系統(tǒng)的插件 加載裝置,包括:接收模塊,用于接收程序或者用戶對插件入口的操作指令;判斷模塊,用于根據(jù)所述操作指令,判斷所述插件是否存在;解析模塊,用于如果判斷出所述插件存在,則啟動插件進程解析并運行所述插件的安 裝包;啟動模塊,用于啟動所述插件對應的代理類;注入模塊,用于實例化插件類,并對插件類進行動態(tài)注入所述代理類對應的屬性值,以 使所述插件加載完成;回調(diào)模塊,用于對所述插件類進行生命周期進行回調(diào),完成模擬Andro id運行時環(huán)境。7.如權利要求6所述的用于Android系統(tǒng)的插件加載裝置,其特征在于,所述用于 Android系統(tǒng)的插件加載裝置,還包括:第一修改模塊,用于修改代理類(ProxyActivity)的獲取資源(getResources())和資 源管理器(getAssetsO)方法的返回值為相應的插件對象,實現(xiàn)插件Activity中可以獲取 到APK包中drawable和assets目錄下的內(nèi)容;第二修改模塊,用于修改代理類(ProxyActivity)的獲取包管理類方法 (getPackageManager())的返回值為插件自定義PackageManager,實現(xiàn)在插件中能直接獲 取到插件本身APK包的Package Info等信息。8.如權利要求6所述的用于Android系統(tǒng)的插件加載裝置,其特征在于,所述注入模塊 包括:注入子模塊,用于對插件類進行動態(tài)注入自定義Instrumentat1n實現(xiàn)對跳轉(zhuǎn)類的重 定向;以及對象注入模塊,用于對插件類進行動態(tài)注入宿主Window對象實現(xiàn)對插件界面的展示以及交互。9.如權利要求8所述的用于Android系統(tǒng)的插件加載裝置,其特征在于,所述對象注入模塊,還用于通過Java的反射機制將代理Act ivi ty動態(tài)注入至 newlnstance生成的Activity類中,將其轉(zhuǎn)變成偽Activity類;此時的插件Activity類自主 控制ProxyActivity的屏幕。10.如權利要求6所述的用于Android系統(tǒng)的插件加載裝置,其特征在于,所述用于 Android系統(tǒng)的插件加載裝置,還包括:獲取模塊,用于獲取動態(tài)功能列表;檢查模塊,用于檢查該列表中的功能對應的插件是否存在;安裝包解析模塊,用于如果存在,則解析所述插件的安裝包;加載模塊,用于對插件進行預加載;功能接收模塊,用于接收用戶選擇的功能;插件啟動模塊,用于啟動所述選擇的功能對應的插件。
【文檔編號】G06F9/445GK105955787SQ201610331777
【公開日】2016年9月21日
【申請日】2016年5月18日
【發(fā)明人】陳喬, 何意
【申請人】深圳市掌玩網(wǎng)絡技術有限公司