一种调用应用程序的APK插件的方法及装置与流程

文档序号:12786120阅读:195来源:国知局
一种调用应用程序的APK插件的方法及装置与流程

本申请涉及计算机技术领域,尤其涉及一种调用应用程序的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、光学存储器等)上实施的计算机程序产品的形式。

以上仅为本申请的实施例而已,并不用于限制本申请。对于本领域技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本申请的权利要求范围之内。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1