一種調用應用程式的APK插件的方法及裝置與流程
2023-05-28 15:47:11 2

本申請涉及計算機技術領域,尤其涉及一種調用應用程式的APK插件的方法及裝置。
背景技術:
智能終端在日常生活中扮演了越來越重要的角色,以Android智慧型手機為例,為滿足各種需求,可以將主應用程式即APK(Android Package,Android安裝包)安裝在系統平臺中,當需要某些功能時,就可以打開安裝在系統平臺中的應該程序,來實現某些功能。
但是隨著各行業的進步,應用程式的集成的功能更加豐富且界面更加人性化、絢麗,所以導致了應用程式的體積越來越大,由於應用程式集成的每個功能可能都由不同的開發團隊開發,所以不同功能的更新周期都不盡相同,如果僅為了某個集成在應用程式中的功能就重新安裝應用程式的整個安裝包,顯然即浪費網絡傳輸資源,又浪費智慧型手機的處理資源。況且,有些功能不一定所有人都需要,所以可以將集成在應用程式中功能做成插件,當需要某個功能時,加載並調用對應的插件功能就可以了。比如,以導航軟體為例,主程序包含最基本的導航功能,然而為了滿足個性化的需求,可以在導航軟體中集成擁堵提示,限行提示,違章查詢等。可以將這些功能做成APK插件,當用戶需要時,下載對應的插件,加載並調用即可。
而現有技術在實現APK插件的功能時,需要先將APK插件安裝在系統平臺中,然後加載並調用,如果插件很多,就需要全部安裝。比如,依舊以上文的導航軟體為例,如果需要擁堵提示、限行提示以及違章查詢,就需要下載對應的APK插件,並全部安裝在系統平臺中,佔用系統平臺的存儲空間。也就 是還不能夠在僅下載而不安裝APK插件的情況下,調用該APK插件。
技術實現要素:
本申請實施例提供一種調用應用程式的APK插件的方法,用於在不安裝插件的情況下,調用插件的功能。
本申請實施例提供一種調用應用程式的APK插件的裝置,用於在不安裝插件的情況下,調用插件的功能。
本申請實施例採用下述技術方案:
一種調用應用程式的APK插件的方法,包括:
當接收到調用請求後,應用程式的調用插件活動組件類的子類以APK插件中插件活動組件類是否為空,判斷是否成功加載APK插件;
當加載成功所述APK插件時,實例化所述APK插件中插件活動組件類對應的Activity;
所述APK插件中插件活動組件類的子類以baseActivity是否為空,判斷是否由所述主程序以插件形式被調用;
當確定所述APK插件以插件形式被所述應用程式調用時,應用程式的調用插件活動組件類的子類調用所述Activity的實例。
優選地,應用程式的調用插件活動組件類的子類調用所述Activity的實例,包括:檢測所述APK插件中是否存在所述Activity;當存在所述Activity時,應用程式的調用插件活動組件類的子類以插件形式調用所述Activity的實例,以便通過Activity實例中的方法實現所述APK插件的功能。
優選地,所述方法還包括:當不存在所述Activity時,應用程式的調用插件活動組件類的子類以非插件形式調用所述Activity的父類方法,以便實現所述APK插件的功能。
優選地,所述方法還包括:當不存在時,再次實例化所述APK插件中插件活動組件類對應的Activity;應用程式的調用插件活動組件類的子類再次調 用所述Activity的實例。
優選地,所述APK插件中插件活動組件類的子類以baseActivity是否為空,判斷是否由所述主程序以插件形式被調用,包括:所述APK插件中插件活動組件類的子類判斷baseActivity是否為空;當baseActivity不為空時,確定所述APK插件以插件形式被所述應用程式調用。
一種調用應用程式的APK插件的裝置,包括:加載判斷單元、實例化單元、調用形式判斷單元以及調用單元,其中,
所述加載判斷單元,用於當接收到調用請求後,應用程式的調用插件活動組件類的子類以APK插件中插件活動組件類是否為空,判斷是否成功加載APK插件;
所述實例化單元,用於當加載成功所述APK插件時,實例化所述APK插件中插件活動組件類對應的Activity;
所述調用形式判斷單元,用於所述APK插件中插件活動組件類的子類以baseActivity是否為空,判斷是否由所述主程序以插件形式被調用;
所述調用單元,用於當確定所述APK插件以插件形式被所述應用程式調用,應用程式的調用插件活動組件類的子類調用所述Activity的實例。
優選地,所述調用單元,具體用於:檢測所述APK插件中是否存在所述Activity;當存在所述Activity時,應用程式的調用插件活動組件類的子類以插件形式調用所述Activity的實例,以便通過Activity實例中的方法實現所述APK插件的功能。
優選地,所述調用單元,具體用於:當不存在所述Activity時,應用程式的調用插件活動組件類的子類以非插件形式調用所述Activity的父類方法,以便實現所述APK插件的功能。
優選地,所述調用單元,具體用於:當不存在時,再次實例化所述APK插件中插件活動組件類對應的Activity;應用程式的調用插件活動組件類的子類再次調用所述Activity的實例。
優選地,所述調用形式判斷單元,具體用於:所述APK插件中插件活動組件類的子類判斷baseActivity是否為空;當baseActivity不為空時,確定所述APK插件以插件形式被所述應用程式調用。
本申請實施例採用的上述至少一個技術方案能夠達到以下有益效果:主程序加載插件後,實例化APK插件中插件活動組件類對應的Activity;當確定APK插件以插件形式被主程序調用,主程序的調用插件活動組件類的子類調用Activity的實例,即通過主系統調用主程序對應的方法,主程序調用插件對應的方法,實現了插件的調用。跳過繁瑣複雜的安裝步驟,只需加載插件後即可調用,從而實現插件的功能。
附圖說明
此處所說明的附圖用來提供對本申請的進一步理解,構成本申請的一部分,本申請的示意性實施例及其說明用於解釋本申請,並不構成對本申請的不當限定。在附圖中:
圖1為本申請實施例1提供的一種調用應用程式的APK插件的方法的流程示意圖;
圖2為本申請實施例1提供的主程序的抽象父類的定義示意圖;
圖3為本申請實施例1提供的APK插件的抽象父類的定義示意圖;
圖4為本申請實施例2提供的一種調用應用程式的APK插件的裝置的結構框圖。
具體實施方式
為使本申請的目的、技術方案和優點更加清楚,下面將結合本申請具體實施例及相應的附圖對本申請技術方案進行清楚、完整地描述。顯然,所描述的實施例僅是本申請一部分實施例,而不是全部的實施例。基於本申請中的實施例,本領域普通技術人員在沒有做出創造性勞動前提下所獲得的所有其他實施 例,都屬於本申請保護的範圍。
以下結合附圖,詳細說明本申請各實施例提供的技術方案。
實施例1
本申請實施例提出了一種調用應用程式的APK插件的方法,用於在不安裝插件的情況下,調用插件的功能,該方法的流程示意圖如圖1所示,包括下述步驟:
步驟11:當接收到調用請求後,應用程式的調用插件活動組件類的子類以APK插件中插件活動組件類是否為空,判斷是否成功加載APK插件。
在調用插件功能之前,應該先加載APK插件及其對應的邏輯和資源,為了方便調用APK插件提供的功能,規避過多的使用反射機制,本發明將調用APK插件提供的功能抽象為兩個抽象父類。在本申請中,將應用程式看作是安裝在系統平臺中的主程序。其中用於加載APK插件的主程序的抽象父類為調用插件活動組件類(下文簡稱CallPluginActivity),APK插件的抽象父類為插件活動組件類(下文簡稱PluginActivity)。CallPluginActivity和PluginActivity均為抽象類,需要子類實現其相應的方法,因此本文後續描述的CallPluginActivity均也代表CallPluginActivity的實現類,PluginActivity均也代表PluginActivity的實現類,後面將不再贅述。
本實施例中,主程序作為調用插件的程序為已經安裝的應用程式。APK插件為已經下載,可以作為插件調用,也可以和普通APK插件一樣正常安裝的Android應用。主程序的抽象父類CallPluginActivity主要是為了向APK插件中的PluginActivity提供實例,即上下文Context,並加載APK插件。在本發明實施例的一個例子中,主程序的抽象父類的定義如圖2所示。其中,onCreate方法由Android系統調用,用於發起對主程序的調用請求。getOtherResources方法用於通過反射方法加載APK插件的資源並生成Resources句柄(變量名為:pluginRes)。CallPluginActivity通過判斷pluginActivity是否為空來確定是 否成功加載APK插件及其資源;如果判斷出pluginActivity不為空,則確定成功加載APK插件及其資源。
步驟12:當加載成功APK插件時,實例化APK插件中插件活動組件類對應的Activity。
如圖2所示,LoadAPK方法用於生成DexClassLoader和PackageInfo等句柄及文件,並通過反射方法得到對應的PluginActivity子類的實例畫(變量名為:pluginActivity),即實例化APK插件中PluginActivity對應的Activity。
步驟13:APK插件中插件活動組件類的子類以baseActivity是否為空,判斷是否由主程序以插件形式被調用。
APK插件的抽象父類的主要功能是完成APK插件的構建和提供符合Android標準的Activity和Service等。在實施例中,APK插件的抽象父類的定義如圖3所示。其中,onCreate方法由主程序調用,用於發起對APK插件的調用請求。setCallActivity由主程序反射調用並設置自身的實例(pluginActivity)為APK插件的實例(baseActivity)。具體實現方法如下:
public void setCallActivity(CallPluginActivity baseActivity){
Log.d(TAG,"setActivity..."+baseActivity);
this.baseActivity=baseActivity;
}//由主程序反射調用並設置自身實例為插件的baseActivity變量。
所以,可以判斷baseActivity是否為空,如果判斷出baseActivity不為空,則確定本Activity是由主程序以插件的形式調用。
步驟14:當確定APK插件以插件形式被主程序調用時,主程序的調用插件活動組件類的子類調用Activity的實例。
為了實現APK插件子類對應的功能,需要在子類中重寫父類定義的方法。重寫以下方法使APK插件中的PluginActivity受主程序CallPluginActivity的控制,如:onStart、onResume方法,其他方法以此類推;以baseActivity變量是否為空來判斷PluginActivity是由主程序以插件形式啟動,還是以Android 正常啟動(非插件調用的方式):
}//判斷baseActivity是否為空,若不為空則是插件形式調用;否則為系統默認的方法。
以baseActivity變量是否為空來判斷PluginActivity是否由主程序以插件形式調用,如果是插件形式,則調用baseActivity對應方法,正常啟動(非插件調用的方式)則調用其父類對應方法。也就是主程序通過主系統調用主程序對應的方法,主程序調用插件對應的方法。
所以在一種實施方式中,主程序的調用插件活動組件類的子類調用Activity的實例,可以包括:檢測APK插件中是否存在Activity;
當存在Activity時,主程序的調用插件活動組件類的子類以插件形式調用Activity的實例,以便通過Activity實例中的方法實現APK插件的功能。
當不存在Activity時,主程序的調用插件活動組件類的子類以非插件形式調用Activity的父類方法,以便實現APK插件的功能。
在實際應用中,為了能以插件的形式調用APK插件,當不存在時,再次實例化APK插件中插件活動組件類對應的Activity;主程序的調用插件活動組件類的子類再次調用Activity的實例。
採用實施例1提供的該方法,主程序加載插件後,實例化APK插件中插件活動組件類對應的Activity;當確定APK插件以插件形式被主程序調用,主程序的調用插件活動組件類的子類調用Activity的實例,即通過主系統調用主程序對應的方法,主程序調用插件對應的方法,實現了插件的調用。跳過繁瑣 複雜的安裝步驟,只需加載插件後即可調用,從而實現插件的功能。
實施例2
基於相同的發明構思,實施例2提供了一種調用應用程式的APK插件的裝置,用於在不安裝插件的情況下,調用插件的功能。如圖4所示,該裝置包括:加載判斷單元21、實例化單元22、調用形式判斷單元23以及調用單元24,其中,
加載判斷單元21,可以用於當接收到調用請求後,應用程式的調用插件活動組件類的子類以APK插件中插件活動組件類是否為空,判斷是否成功加載APK插件;
實例化單元22,可以用於當加載成功所述APK插件時,實例化所述APK插件中插件活動組件類對應的Activity;
調用形式判斷單元23,可以用於所述APK插件中插件活動組件類的子類以baseActivity是否為空,判斷是否由所述主程序以插件形式被調用;
調用單元24,可以用於當確定所述APK插件以插件形式被所述應用程式調用,應用程式的調用插件活動組件類的子類調用所述Activity的實例。
在一種實施方式中,調用單元24,可以用於:檢測所述APK插件中是否存在所述Activity;當存在所述Activity時,應用程式的調用插件活動組件類的子類以插件形式調用所述Activity的實例,以便通過Activity實例中的方法實現所述APK插件的功能。
在一種實施方式中,調用單元24,可以用於:當不存在所述Activity時,應用程式的調用插件活動組件類的子類以非插件形式調用所述Activity的父類方法,以便實現所述APK插件的功能。
在一種實施方式中,調用單元24,可以用於:當不存在時,再次實例化所述APK插件中插件活動組件類對應的Activity;應用程式的調用插件活動組件類的子類再次調用所述Activity的實例。
在一種實施方式中,調用形式判斷單元23,可以用於:所述APK插件中插件活動組件類的子類判斷baseActivity是否為空;當baseActivity不為空時,確定所述APK插件以插件形式被所述應用程式調用。
採用實施例2提供的該裝置,主程序加載插件後,實例化APK插件中插件活動組件類對應的Activity;當確定APK插件以插件形式被主程序調用,主程序的調用插件活動組件類的子類調用Activity的實例,即通過主系統調用主程序對應的方法,主程序調用插件對應的方法,實現了插件的調用。跳過繁瑣複雜的安裝步驟,只需加載插件後即可調用,從而實現插件的功能。
本領域內的技術人員應明白,本申請的實施例可提供為方法、系統、或電腦程式產品。因此,本申請可採用完全硬體實施例、完全軟體實施例、或結合軟體和硬體方面的實施例的形式。而且,本申請可採用在一個或多個其中包含有計算機可用程序代碼的計算機可用存儲介質(包括但不限於磁碟存儲器、CD-ROM、光學存儲器等)上實施的電腦程式產品的形式。
本申請是參照根據本申請實施例的方法、設備(系統)、和電腦程式產品的流程圖和/或方框圖來描述的。應理解可由電腦程式指令實現流程圖和/或方框圖中的每一流程和/或方框、以及流程圖和/或方框圖中的流程和/或方框的結合。可提供這些電腦程式指令到通用計算機、專用計算機、嵌入式處理機或其他可編程數據處理設備的處理器以產生一個機器,使得通過計算機或其他可編程數據處理設備的處理器執行的指令產生用於實現在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能的裝置。
這些電腦程式指令也可存儲在能引導計算機或其他可編程數據處理設備以特定方式工作的計算機可讀存儲器中,使得存儲在該計算機可讀存儲器中的指令產生包括指令裝置的製造品,該指令裝置實現在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能。
這些電腦程式指令也可裝載到計算機或其他可編程數據處理設備上,使 得在計算機或其他可編程設備上執行一系列操作步驟以產生計算機實現的處理,從而在計算機或其他可編程設備上執行的指令提供用於實現在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能的步驟。
在一個典型的配置中,計算設備包括一個或多個處理器(CPU)、輸入/輸出接口、網絡接口和內存。
內存可能包括計算機可讀介質中的非永久性存儲器,隨機存取存儲器(RAM)和/或非易失性內存等形式,如只讀存儲器(ROM)或快閃記憶體(flash RAM)。內存是計算機可讀介質的示例。
計算機可讀介質包括永久性和非永久性、可移動和非可移動媒體可以由任何方法或技術來實現信息存儲。信息可以是計算機可讀指令、數據結構、程序的模塊或其他數據。計算機的存儲介質的例子包括,但不限於相變內存(PRAM)、靜態隨機存取存儲器(SRAM)、動態隨機存取存儲器(DRAM)、其他類型的隨機存取存儲器(RAM)、只讀存儲器(ROM)、電可擦除可編程只讀存儲器(EEPROM)、快閃記憶體或其他內存技術、只讀光碟只讀存儲器(CD-ROM)、數字多功能光碟(DVD)或其他光學存儲、磁盒式磁帶,磁帶磁磁碟存儲或其他磁性存儲設備或任何其他非傳輸介質,可用於存儲可以被計算設備訪問的信息。按照本文中的界定,計算機可讀介質不包括暫存電腦可讀媒體(transitory media),如調製的數據信號和載波。
還需要說明的是,術語「包括」、「包含」或者其任何其他變體意在涵蓋非排他性的包含,從而使得包括一系列要素的過程、方法、商品或者設備不僅包括那些要素,而且還包括沒有明確列出的其他要素,或者是還包括為這種過程、方法、商品或者設備所固有的要素。在沒有更多限制的情況下,由語句「包括一個……」限定的要素,並不排除在包括要素的過程、方法、商品或者設備中還存在另外的相同要素。
本領域技術人員應明白,本申請的實施例可提供為方法、系統或電腦程式產品。因此,本申請可採用完全硬體實施例、完全軟體實施例或結合軟體和 硬體方面的實施例的形式。而且,本申請可採用在一個或多個其中包含有計算機可用程序代碼的計算機可用存儲介質(包括但不限於磁碟存儲器、CD-ROM、光學存儲器等)上實施的電腦程式產品的形式。
以上僅為本申請的實施例而已,並不用於限制本申請。對於本領域技術人員來說,本申請可以有各種更改和變化。凡在本申請的精神和原理之內所作的任何修改、等同替換、改進等,均應包含在本申請的權利要求範圍之內。