一种终端设备、插件加载运行装置及插件加载运行方法与流程

文档序号:13736024阅读:120来源:国知局
技术领域本发明涉及移动互联网技术领域,具体涉及一种终端设备、插件加载运行装置及插件加载运行方法。

背景技术:
目前,随着智能移动终端技术及安卓技术的不断普及与发展,用户可以在移动终端上安装各种各样的应用程序。为了适应用户的不同需求,增加用户粘性和吸引新用户,应用程序一般都会不断发布更新版本供用户下载安装。但是,随着版本的迭代更新,应用程序的安装包(Apk,AndroidPackage)体积一般会越来越大。由于安装包体积越大,所消耗的网络流量就越大,在移动终端所占用的存储空间也会越大,在用户流量资源比较宝贵的情况下,有些用户可能就不愿意下载体积大的安装包,从而影响应用程序的下载量和安装量。

技术实现要素:
为解决上述技术问题,本发明提供一种终端设备、插件加载运行装置及插件加载运行方法,能利用加载插件来节省用户下载安装包的流量,提升应用程序的下载量和安装量。本发明提供的技术方案如下:根据本发明的一个方面,提供一种终端设备,包括:存储器、触摸式显示屏和处理器,所述存储器中存储宿主应用程序;响应于用户在所述触摸式显示屏上打开所述宿主应用程序后的所述宿主应用程序的初始化操作,所述处理器执行加载插件安装包并基于所述插件安装包的设定信息修改所述宿主应用程序的运行环境使得所述宿主应用程序指向所述插件安装包的操作;响应于所述宿主应用程序的执行,所述处理器执行在修改后的所述运行环境中运行所述指向的插件安装包的操作。优选的,所述处理器执行加载插件安装包并基于所述插件安装包的设定信息修改所述宿主应用程序的运行环境使得所述宿主应用程序指向所述插件安装包的操作包括:所述处理器加载插件安装包,获取所述插件安装包的设定信息;获取所述宿主应用程序的设定信息;基于所述插件安装包的设定信息,对所述宿主应用程序的设定信息进行替换修改、代理修改和上下文修改以使所述宿主应用程序指向所述插件安装包。根据本发明的另一个方面,提供一种插件加载运行装置,包括:第一处理模块,用于响应于宿主应用程序的初始化,加载插件安装包并基于所述插件安装包的设定信息修改所述宿主应用程序的运行环境使得所述宿主应用程序指向所述插件安装包;第二处理模块,用于响应于所述宿主应用程序的执行,在所述第一处理模块修改后的所述运行环境中运行所述指向的插件安装包。优选的,所述第一处理模块包括:加载及获取子模块,用于加载插件安装包,获取所述插件安装包的设定信息;宿主信息获取子模块,用于获取所述宿主应用程序的设定信息;修改子模块,用于基于所述加载及获取子模块获取的插件安装包的设定信息,对所述宿主信息获取子模块获取的宿主应用程序的设定信息进行替换修改、代理修改和上下文修改以使所述宿主应用程序指向所述插件安装包。优选的,所述修改子模块包括:第一修改子模块,用于通过反射机制获取所述宿主应用程序的安装包信息,通过反射机制将所述宿主应用程序的安装包信息中引用的类加载器、资源目录路径和资源属性分别替换为所述插件安装包的类加载器、本地路径和资源属性。优选的,所述修改子模块包括:第二修改子模块,用于通过反射机制获取所述宿主应用程序的包管理器,对所述宿主应用程序的包管理器中的相关成员方法进行动态代理以使返回所述插件安装包的相关信息。优选的,所述修改子模块包括:第三修改子模块,用于生成所述宿主应用程序的新的上下文,其中所述新的上下文的资源引用指向所述插件安装包,通过反射机制将所述宿主应用程序的安装包信息中的原上下文的引用替换为所述新的上下文,并触发新的上下文的初始化时机。根据本发明的另一个方面,提供一种插件加载运行方法,包括:响应于宿主应用程序的初始化,加载插件安装包并基于所述插件安装包的设定信息修改所述宿主应用程序的运行环境使得所述宿主应用程序指向所述插件安装包;响应于所述宿主应用程序的执行,在修改后的所述运行环境中运行所述指向的插件安装包。优选的,所述加载插件安装包并基于所述插件安装包的设定信息修改所述宿主应用程序的运行环境使得所述宿主应用程序指向所述插件安装包包括:加载插件安装包,获取所述插件安装包的设定信息;获取所述宿主应用程序的设定信息;基于所述插件安装包的设定信息,对所述宿主应用程序的设定信息进行替换修改、代理修改和上下文修改以使所述宿主应用程序指向所述插件安装包。优选的,所述基于所述插件安装包的设定信息,对所述宿主应用程序的设定信息进行替换修改包括:通过反射机制获取所述宿主应用程序的安装包信息;通过反射机制将所述宿主应用程序的安装包信息中引用的类加载器、资源目录路径和资源属性分别替换为所述插件安装包的类加载器、本地路径和资源属性。优选的,所述插件安装包的类加载器、本地路径和资源属性在加载插件安装包后获取。优选的,所述基于所述插件安装包的设定信息,对所述宿主应用程序的设定信息进行代理修改包括:通过反射机制获取所述宿主应用程序的包管理器;对所述宿主应用程序的包管理器中的相关成员方法进行动态代理以使返回所述插件安装包的相关信息。优选的,所述基于所述插件安装包的设定信息,对所述宿主应用程序的设定信息进行上下文修改包括:生成所述宿主应用程序的新的上下文,其中所述新的上下文的资源引用指向所述插件安装包;通过反射机制将所述宿主应用程序的安装包信息中的原上下文的引用替换为所述新的上下文,并触发新的上下文的初始化时机。可以发现,本发明实施例的技术方案,在宿主应用程序初始化时,先加载插件安装包,并基于所述插件安装包的设定信息修改所述宿主应用程序的运行环境使得所述宿主应用程序指向所述插件安装包,这样就可以在宿主应用程序的执行过程中,在修改后的所述运行环境中运行所述指向的插件安装包。通过上述处理,在移动终端安装的宿主应用程序的安装包体积就可以做的比较小,为用户提供的应用功能都可以通过运行加载的插件来实现,从而大大节省用户下载安装包的流量,吸引更多用户下载和安装应用程序,提升应用程序的下载量和安装量。进一步的,本发明实施例可以通过反射机制将所述宿主应用程序的安装包信息中引用的类加载器、资源目录路径和资源属性分别替换为所述插件安装包的类加载器、本地路径和资源属性;对所述宿主应用程序的包管理器中的相关成员方法进行动态代理以使返回所述插件安装包的相关信息;通过反射机制将所述宿主应用程序的安装包信息中的原上下文的引用替换为新的上下文。因此本发明实施例的技术方案实现动态改变宿主应用程序的运行环境,使宿主应用程序完整的指向插件应用,从而无需修改插件安装包的代码而实现插件安装包的加载及运行。附图说明通过结合附图对本公开示例性实施方式进行更详细的描述,本公开的上述以及其它目的、特征和优势将变得更加明显,其中,在本公开示例性实施方式中,相同的参考标号通常代表相同部件。图1是根据本发明的一个实施例的一种终端设备的示意性方框图;图2是根据本发明的一个实施例的一种插件加载运行装置的示意性方框图;图3是根据本发明的一个实施例的一种插件加载运行装置的另一示意性方框图;图4是根据本发明的一个实施例的一种插件加载运行方法的示意性流程图;图5是根据本发明的一个实施例的一种插件加载运行方法的另一示意性流程图。具体实施方式下面将参照附图更详细地描述本公开的优选实施方式。虽然附图中显示了本公开的优选实施方式,然而应该理解,可以以各种形式实现本公开而不应被这里阐述的实施方式所限制。相反,提供这些实施方式是为了使本公开更加透彻和完整,并且能够将本公开的范围完整地传达给本领域的技术人员。在介绍本发明实施例之前,先介绍本发明实施例中涉及的一些概念,以助于对方案的理解。本发明实施例中所说的宿主应用程序(简称宿主程序)是软件赖以生存的软件环境,例如:A需要运行在B里,B就是宿主程序。本发明实施例中所说的类是封装对象的属性和行为的载体,反过来而言具有相同属性和行为的一类实体被称为类;对象是类抽象出来的一个时实例,在计算机程序语言例如Java语言中,对象的属性以成员变量的形式存在,对象的方法以成员方法的形式存在。在Java语言中使用成员方法对应于类对象的行为。一个成员方法可以有参数,这个参数可以是对象也可以是基本数据类型的变量,同时成员方法有返回值和不返回任何值的选择,其中成员方法的返回值可以是计算结果也可以是其他想要的数值和对象。类加载器是一个用来加载类文件的类,其作用就是在运行时加载类。类加载器一般负责加载文件系统、网络或其他来源的类文件。本发明实施例中所说的反射是指反射机制,例如Java反射机制。Java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法;这种动态获取信息以及动态调用对象的方法的功能即为Java语言的反射机制。利用Java反射机制,可在程序运行时访问类的所有描述信息(例如经常访问的包括类的构造方法、成员变量和方法等),实现逆向控制程序的执行过程。本发明实施例中所说的动态代理,是在程序运行时运用反射机制动态创建而成,可以通过为代理类(Proxy类)指定类加载器ClassLoader对象和一组接口interface来创建动态代理类。其实,也就是在运行状态中,动态地创建出接口的代理实现类,其仍然是通过Java的反射机制来创建。当使用者调用该类的成员方法时可以起到一个拦截的作用,从而运行代理者的逻辑。以下结合附图详细介绍本发明实施例技术方案。本发明实施例提供一种终端设备,能利用加载插件来节省用户下载安装包的流量,提升应用程序的下载量和安装量。图1是根据本发明的一个实施例的一种终端设备的示意性方框图。如图1所示,终端设备10可以包括:存储器11、触摸式显示屏12和处理器13。存储器11中存储存储宿主应用程序;响应于用户在触摸式显示屏12上的打开所述宿主应用程序后的所述宿主应用程序的初始化操作,处理器13执行执行加载插件安装包并基于所述插件安装包的设定信息修改所述宿主应用程序的运行环境使得所述宿主应用程序指向所述插件安装包的操作;响应于所述宿主应用程序的执行,处理器13执行在修改后的所述运行环境中运行所述指向的插件安装包的操作。其中,处理器13执行加载插件安装包并基于所述插件安装包的设定信息修改所述宿主应用程序的运行环境使得所述宿主应用程序指向所述插件安装包的操作包括:所述处理器13加载插件安装包,获取所述插件安装包的设定信息;获取所述宿主应用程序的设定信息;基于所述插件安装包的设定信息,对所述宿主应用程序的设定信息进行替换修改、代理修改和上下文修改以使所述宿主应用程序指向所述插件安装包。终端设备10中的处理器13,可以作为一个独立的装置结构,该独立的装置结构可以称为插件加载运行装置,该插件加载运行装置可以包括多个子模块,下文将对该插件加载运行装置结构进行详细说明。图2是根据本发明的一个实施例的一种插件加载运行装置的示意性方框图。如图2所示,在插件加载运行装置20中可以包括:第一处理模块21、第二处理模块22。第一处理模块21,用于响应于宿主应用程序的初始化,加载插件安装包并基于所述插件安装包的设定信息修改所述宿主应用程序的运行环境使得所述宿主应用程序指向所述插件安装包。第一处理模块21在宿主应用程序初始化时,先加载插件安装包,获取所述插件安装包的设定信息;获取所述宿主应用程序的设定信息;基于所述插件安装包的设定信息,对所述宿主应用程序的设定信息进行替换修改、代理修改和上下文修改以使所述宿主应用程序指向所述插件安装包。第二处理模块22,用于响应于所述宿主应用程序的执行,在所述第一处理模块21修改后的所述运行环境中运行所述指向的插件安装包。可以发现,本发明实施例的技术方案,在宿主应用程序初始化时,先加载插件安装包,并基于所述插件安装包的设定信息修改所述宿主应用程序的运行环境使得所述宿主应用程序指向所述插件安装包,这样就可以在宿主应用程序的执行过程中,在修改后的所述运行环境中运行所述指向的插件安装包。通过上述处理,在移动终端安装的宿主应用程序的安装包体积就可以做的比较小,为用户提供的应用功能都可以通过运行加载的插件来实现,从而大大节省用户下载安装包的流量,吸引更多用户下载和安装应用程序,提升应用程序的下载量和安装量。图3是根据本发明的一个实施例的一种插件加载运行装置的另一示意性方框图。如图3所示,在插件加载运行装置20中可以包括:第一处理模块21、第二处理模块22,该两个模块的功能可参见图2所描述,此处不再赘述。进一步的,所述第一处理模块21可以包括:加载及获取子模块211、宿主信息获取子模块212、修改子模块213。加载及获取子模块211,用于加载插件安装包,获取所述插件安装包的设定信息。宿主信息获取子模块212,用于获取所述宿主应用程序的设定信息。修改子模块213,用于基于所述加载及获取子模块211获取的插件安装包的设定信息,对所述宿主信息获取子模块212获取的宿主应用程序的设定信息进行替换修改、代理修改和上下文修改以使所述宿主应用程序指向所述插件安装包。其中,所述修改子模块213可以包括:第一修改子模块2131。第一修改子模块2131,用于通过反射机制获取所述宿主应用程序的安装包信息,通过反射机制将所述宿主应用程序的安装包信息中引用的类加载器、资源目录路径和资源属性分别替换为所述插件安装包的类加载器、本地路径和资源属性。反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法。利用反射机制,可在程序运行时访问类的所有描述信息(例如经常访问的包括类的构造方法、成员变量和方法等),实现逆向控制程序的执行过程。其中,所述修改子模块213可以包括:第二修改子模块2132。第二修改子模块2132,用于通过反射机制获取所述宿主应用程序的包管理器,对所述宿主应用程序的包管理器中的相关成员方法进行动态代理以使返回所述插件安装包的相关信息。所说的动态代理,其实就是在运行状态中,动态的创建出接口的代理实现类。其中,所述修改子模块213可以包括:第三修改子模块2133。第三修改子模块2133,用于生成所述宿主应用程序的新的上下文,其中所述新的上下文的资源引用指向所述插件安装包,通过反射机制将所述宿主应用程序的安装包信息中的原上下文的引用替换为新的上下文,并触发新的上下文的初始化时机。可以发现,本发明实施例的技术方案,在修改所述宿主应用程序的运行环境使得所述宿主应用程序指向所述插件安装包的过程中,可以基于所述插件安装包的设定信息,对所述宿主应用程序的设定信息进行替换修改、代理修改和委托修改以使所述宿主应用程序指向所述插件安装包。其中包括:通过反射机制将所述宿主应用程序的安装包信息中引用的类加载器、资源目录路径和资源属性分别替换为所述插件安装包的类加载器、本地路径和资源属性;对所述宿主应用程序的包管理器中的相关成员方法进行动态代理以使返回所述插件安装包的相关信息;通过反射机制将所述宿主应用程序的安装包信息中的原上下文的引用替换为新的上下文。因此本发明实施例的技术方案实现动态改变宿主应用程序的运行环境,使宿主应用程序完整的指向插件应用,从而无需修改插件安装包的代码而实现插件安装包的加载及运行。图4是根据本发明的一个实施例的一种插件加载运行方法的示意性流程图。如图4所示,在步骤401中,插件加载运行装置响应于宿主应用程序的初始化,加载插件安装包并基于所述插件安装包的设定信息修改所述宿主应用程序的运行环境使得所述宿主应用程序指向所述插件安装包。上述的插件加载运行装置,可以在宿主应用程序中运行,控制插件的加载和运行。该步骤中可以包括:加载插件安装包,获取所述插件安装包的设定信息;获取所述宿主应用程序的设定信息;基于所述插件安装包的设定信息,对所述宿主应用程序的设定信息进行替换修改、代理修改和上下文修改以使所述宿主应用程序指向所述插件安装包。在步骤402中,插件加载运行装置响应于所述宿主应用程序的执行,在修改后的所述运行环境中运行所述指向的插件安装包。可以发现,本发明实施例的技术方案,在宿主应用程序初始化时,先加载插件安装包,并基于所述插件安装包的设定信息修改所述宿主应用程序的运行环境使得所述宿主应用程序指向所述插件安装包,这样就可以在宿主应用程序的执行过程中,在修改后的所述运行环境中运行所述指向的插件安装包。通过上述处理,在移动终端安装的宿主应用程序的安装包体积就可以做的比较小,为用户提供的应用功能都可以通过运行加载的插件来实现,从而大大节省用户下载安装包的流量,吸引更多用户下载和安装应用程序,提升应用程序的下载量和安装量。图5是根据本发明的一个实施例的一种插件加载运行方法的另一示意性流程图。图5相对于图4更详细描述了本发明实施例的技术方案。本发明实施例的插件加载运行装置可以在宿主应用程序中执行操作。如图5所示,在步骤501中,插件加载运行装置在宿主应用程序初始化时,先加载插件安装包Apk,获取所述插件安装包的设定信息。该步骤中,获取的插件安装包的设定信息例如可以包括插件Apk的类加载器(ClassLoader)、本地路径和资源属性等。在步骤502中,插件加载运行装置通过反射机制获取所述宿主应用程序的安装包信息。该步骤中,反射获取宿主应用程序的安装包信息(PackageInfo)。安装包信息例如可以包括安装包信息中引用的类加载器、资源目录路径和资源属性。反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法。利用反射机制,可在程序运行时访问类的所有描述信息(例如经常访问的包括类的构造方法、成员变量和方法等),实现逆向控制程序的执行过程。因此,步骤502中可以通过反射机制获取宿主应用程序的安装包信息(PackageInfo)。本步骤中所说的反射获取,其实也就是指通过反射机制获取到类的实例中某个成员属性。需说明的是,步骤501与步骤502没有必然的顺序关系,此处只是为描述的方便。在步骤503中,插件加载运行装置通过反射机制将所述宿主应用程序的安装包信息中引用的类加载器、资源目录路径和资源属性分别替换为所述插件安装包的类加载器、本地路径和资源属性。该步骤中,反射替换宿主应用程序的安装包信息里引用的类加载器为插件Apk的类加载器,反射替换宿主应用程序的安装包信息里的资源目录路径为插件Apk的本地路径,反射替换宿主应用程序的安装包信息里的资源属性为插件的资源属性。本步骤中所说的反射替换,其实就是指将实例化出来的一个新的同样的属性通过反射机制替换类的实例中的某个成员属性。因此,在上述步骤502和503中,可以是先通过反射机制获取宿主应用程序的上下文(Application)对象的私有成员属性“安装包信息”(mPackageInfo),接着再次通过反射机制将这个安装包信息里引用的类加载器(“mClassLoader”)替换成插件Apk的类加载器,将安装包信息里引用的资源目录本地路径(“mResDir\)替换成插件Apk的本地路径,将安装包信息里引用的资源(”mResources“)替换成插件Apk的资源。在步骤504中,插件加载运行装置通过反射机制获取所述宿主应用程序的包管理器。该步骤中,可以反射获取宿主应用程序的的包管理器(PackageManager),其中在包管理器中包含相关成员方法。在步骤505中,插件加载运行装置对所述宿主应用程序的包管理器中的相关成员方法进行动态代理以使返回所述插件安装包的相关信息。该步骤中,对宿主应用程序的包管理器中的相关成员方法进行动态代理,使相关成员方法返回插件Apk的相关信息。该步骤中的动态代理,其实就是在运行状态中,动态的创建出接口的代理实现类,其仍然是通过Java的反射机制来创建。当使用者调用该类的成员方法时可以起到一个拦截的作用,从而运行代理者的逻辑。例如该步骤中,对宿主应用程序的包管理器(PackageManager)进行动态代理,代理其成员方法(“getActivityInfo”,“getPackageInfo”,“queryIntentActivities”),使包管理器的成员方法返回插件Apk对应的返回值。在步骤506中,插件加载运行装置生成所述宿主应用程序新的资源引用指向插件安装包的上下文Application。在经过上述步骤一系列的反射替换和动态代理操作后,本步骤生成得到了新的上下文Application(也称为上下文Application委托类),新的上下文里的所有资源引用都指向了插件Apk。在步骤507中,插件加载运行装置通过反射机制将所述宿主应用程序的安装包信息中的原上下文的引用全部替换为所述生成的新的上下文,并触发新的上下文的初始化时机。该步骤中,反射替换宿主应用程序安装包信息里所有原上下文Application的引用都替换成了新的上下文Application,即全部指向生成的新上下文。因为生成的新上下文需要像系统一样触发其初始化流程,所以本发明实施例的触发的方法是通过反射机制调用新的上下文Application的初始化入口方法(“attach()”),然后由宿主应用程序进行初始化。本步骤因为通过反射替换宿主应用程序安装包信息里所有原Application的引用,使得宿主应用程序的整个上下文引用都替换成了新的上下文,所以新的上下文就成了系统认可的真实的上下文Application,而该新的上下文里的所有资源引用都指向了插件Apk,所以宿主应用程序后续就可以将未安装的插件Apk成功的运行起来。在步骤508中,插件加载运行装置在宿主应用程序执行过程中,根据所述新的上下文运行所述新的上下文所指向的插件安装包。可以发现,通过上述处理,本发明实施例实现动态改变宿主应用程序的运行环境,从而使宿主应用程序完整的指向插件安装包,那么就无需修改插件安装包的代码而实现插件安装包的加载及运行。以下结合一个应用实施例进行说明:应用程序提供商开发一个应用程序A的安装包即插件Apk包(例如6M左右)后,再为其设计一个Mini应用程序B的安装包(例如100K左右),对外部可以提供Mini应用程序B的安装包供用户下载和安装,该安装包可以只包括应用程序A的图标资源、品牌宣传资源、服务器域名等基本信息,当用户打开安装的Mini应用程序B时(此时Mini应用程序B是宿主应用程序)再动态加载对应的插件Apk包A并运行,从而正常展示出应用程序A的真实内容。可以发现,上述处理在效果上是与直接打开一个6M的应用程序A是一样的,但是上述过程对于用户而言是无感知的,用户感知的只是安装包大小只有100K,比原来的6M体积缩减了60倍,大大节省了用户下载安装包的流量,使得用户更愿意下载和安装,从而可以大大提升应用程序的外部下载量和安装量。需要说明的是,本发明实施例技术方案可以适用于任何安卓Android应用,同时,在其他操作系统平台也可以参考实施,其原理是相同的。上文中已经参考附图详细描述了根据本发明的技术方案。此外,根据本发明的方法还可以实现为一种计算机程序,该计算机程序包括用于执行本发明的上述方法中限定的上述各步骤的计算机程序代码指令。或者,根据本发明的方法还可以实现为一种计算机程序产品,该计算机程序产品包括计算机可读介质,在该计算机可读介质上存储有用于执行本发明的上述方法中限定的上述功能的计算机程序。本领域技术人员还将明白的是,结合这里的公开所描述的各种示例性逻辑块、模块、电路和算法步骤可以被实现为电子硬件、计算机软件或两者的组合。附图中的流程图和框图显示了根据本发明的多个实施例的系统和方法的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标记的功能也可以以不同于附图中所标记的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。以上已经描述了本发明的各实施例,上述说明是示例性的,并非穷尽性的,并且也不限于所披露的各实施例。在不偏离所说明的各实施例的范围和精神的情况下,对于本技术领域的普通技术人员来说许多修改和变更都是显而易见的。本文中所用术语的选择,旨在最好地解释各实施例的原理、实际应用或对市场中的技术的改进,或者使本技术领域的其它普通技术人员能理解本文披露的各实施例。
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1