一种应用间动态共享依赖包的方法、存储介质及移动终端与流程

文档序号:18831252发布日期:2019-10-09 03:30阅读:191来源:国知局
一种应用间动态共享依赖包的方法、存储介质及移动终端与流程

本发明涉及计算机应用技术领域,具体涉及一种应用间动态共享依赖包的方法、存储介质及移动终端。



背景技术:

随着智能移动终端的快速普及,智能移动终端已经成为人们日常生活中必不可少的娱乐工具。目前,人们越来越多的使用智能手机、平板电脑等智能移动终端来获取信息以及进行工作或娱乐,各种功能的app(应用)也被相继开发出来。

目前,大多数智能移动终端使用的系统为android(安卓)系统。android是一种基于linux的自由及开放源代码的操作系统,主要用于移动设备,如智能手机和平板电脑。由于各种不同功能的第三方jar包(依赖包)存在,进一步加快android应用的开发速度。例如,当在进行应用开发的时候需要实现某种模块功能,且该模块功能可以集成目前现有开源项目的依赖包来实现,从而通过集成依赖包快速实现同样模块功能,加快应用开发速度,提高工作效率。

但是,由于多个不同功能的应用程序都集成相同的依赖包,即在每一个应用程序的路径下都包含一份相同的依赖包,当应用启动时系统会从各自应用的路径下加载各自的依赖包。这种方式因多份相同的依赖包的存在,增加了系统的负担,影响了移动终端的运行速度,给用户的使用带来了不便。

因此,现有技术还有待于改进和发展。



技术实现要素:

本发明要解决的技术问题在于,针对现有技术的上述缺陷,提供一种应用间动态共享依赖包的方法、存储介质及移动终端,旨在解决现有技术中系统中存在多份相同的依赖包,增加了系统的负担,影响了移动终端的运行速度,给用户的使用带来了不便等问题。

本发明解决技术问题所采用的技术方案如下:

一种应用间动态共享依赖包的方法,其中,所述方法包括:

获取移动终端中的应用程序以及对应的依赖包,并根据应用程序与依赖包的对应关系建立第一数据库;

从所述第一数据库中提取多个应用程序依赖同一个共享依赖包的对应关系,建立共享数据库,并对所述共享数据库中所有的共享依赖包创建对应的服务;

对所述共享数据库中的应用程序进行重构,并将经重构后的应用程序与共享依赖包对应的服务绑定,实现应用程序间的依赖包共享。

优选地,所述的应用间动态共享依赖包的方法,其中,所述对所述共享数据库中的应用程序进行重构,并将经重构后的应用程序与共享依赖包对应的服务绑定,实现应用程序间共享依赖包之后还包括:

当应用程序启动时,移动终端从预设的共享数据库中查找所述应用程序对应的共享依赖包,并获取共享依赖包的包名;

根据所述共享依赖包的包名判断与所述共享依赖包对应的服务是否启动;

当所述共享依赖包对应的服务未启动时,则启动所述共享依赖包对应的服务;

应用程序根据所述共享依赖包绑定其对应的服务;并获取服务代理,完成应用程序的启动。

优选地,所述的应用间动态共享依赖包的方法,其中,所述获取移动终端中的应用程序以及对应的依赖包,并根据应用程序与依赖包的对应关系建立第一数据库具体包括:

移动终端启动应用程序管理服务,扫描系统中的安装目录,获取应用程序文件;

加载所述应用程序文件,对所述应用程序文件进行解析,并获取应用程序的包名;

根据所述应用程序的包名获取对应的依赖包;

根据应用程序与依赖包的对应关系建立第一数据库。

优选地,所述的应用间动态共享依赖包的方法,其中,所述第一数据库中存储有应用程序的包名以及对应的依赖包的包名;且所述第一数据库具有自动更新功能。

优选地,所述的应用间动态共享依赖包的方法,其中,所述第一数据库具有自动更新功能具体包括:

当移动终端安装应用时,移动终端调用应用程序管理服务对当前安装的应用进行解析,获取到当前安装的应用的相关信息,根据应用信息在所述第一数据库中增加当前安装的应用的信息数据记录;

当移动终端卸载应用时,移动终端调用应用程序管理服务对当前卸载的应用进行解析,获取到当前卸载的应用的相关信息,根据应用信息在所述第一数据库删除当前卸载的应用的信息数据记录;所述信息数据记录包括:应用程序的包名以及依赖包的包名。

优选地,所述的应用间动态共享依赖包的方法,其中,所述根据所述应用程序的包名获取对应的依赖包具体包括:

对所述应用程序文件进行解析时,所述移动终端采用反汇编工具获取应用程序的smali代码,并生成smali文件;

根据所述应用程序的包名判断所述smali文件的路径是否包含所述应用程序的包名;

若包含,则判定所述smali文件为应用程序的功能文件;若不包含,则判定所述smali文件为依赖包。

优选地,所述的应用间动态共享依赖包的方法,其中,所述从所述第一数据库中提取多个应用程序依赖同一个共享依赖包的对应关系,建立共享数据库,并对所述共享数据库中所有的共享依赖包创建对应的服务具体包括:

移动终端获取所有的依赖包,并获取依赖包的包名;

根据所述依赖包的包名从所述第一数据库中获取每一个依赖包所对应的应用程序,提取多个应用程序依赖同一个共享依赖包的对应关系;

根据提取的对应关系建立共享数据库;所述共享数据库中包括每一个共享依赖包的包名以及于每一个共享依赖包对应的所有应用程序的包名。

优选地,所述的应用间动态共享依赖包的方法,其中,所述对所述共享数据库中的应用程序进行重构,并将经重构后的应用程序与共享依赖包对应的服务绑定,实现应用程序间的依赖包共享具体包括:

获取所述共享数据库中的应用程序的包名;

采用反汇编工具获取应用程序的smali代码,并生成smali文件;

分别获取smali文件路径包含应用程序包名的smali文件,以及smali文件路径不包含应用程序依赖的共享依赖包名和不包含应用程序包名的smail文件;

将获取的smali文件重新编译打包成新的apk文件,完成应用程序的重构;

将经重构后的应用程序与共享依赖包对应的服务绑定,实现应用程序间的依赖包共享。

一种存储介质,其上存储有多条指令,其中,所述指令适于由处理器加载并执行,以实现上述任一项所述的应用间动态共享依赖包的方法的步骤。

一移动终端,其中,包括:处理器、与处理器通信连接的存储介质,所述存储介质适于存储多条指令;所述处理器适于调用所述存储介质中的指令,以执行实现上述任一项所述的应用间动态共享依赖包的方法的步骤。

本发明的有益效果:本发明通过创建具有多个应用程序依赖同一个共享依赖包的对应关系的共享数据库,并对共享数据库进行重构,使得重构后的应用程序与共享依赖包对应的服务绑定,可实现当系统中多个不同功能的应用程序都依赖相同的依赖包时,相同的依赖包在系统中仅保留一份,减轻系统的负担,节省系统存储空间。

附图说明

图1是本发明的应用间动态共享依赖包的方法的较佳实施例的流程图。

图2是本发明中移动终端启动应用程序时的较佳实施例的流程图。

图3是本发明的移动终端的功能原理框图。

具体实施方式

为使本发明的目的、技术方案及优点更加清楚、明确,以下参照附图并举实施例对本发明进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。

android是一种基于linux的自由及开放源代码的操作系统,主要用于移动设备,如智能手机和平板电脑,由google公司和开放手机联盟领导及开发。android操作系统最初由andyrubin开发,主要支持手机。现在android逐渐扩展到平板电脑及其他领域上,如电视、数码相机以及游戏机等。但是由于现有技术中多个不同功能的应用都集成相同的依赖包,即在每一个应用路径下都包含一份相同的依赖包,当应用启动时系统会从各自应用的路径下加载各自的依赖包,这样的方式大大增加了系统的负担,导致移动终端的运行速度下降。为了解决上述问题,本发明提供一种应用间动态共享依赖包的方法,如图1所示,图1是本发明的应用间动态共享依赖包的方法较佳实施例的流程图。所述应用间动态共享依赖包的方法包括以下步骤:

步骤s100、获取移动终端中的应用程序以及对应的依赖包,并根据应用程序与依赖包的对应关系建立第一数据库。

较佳地,所述步骤s100具体包括:

移动终端启动应用程序管理服务,扫描系统中的安装目录,获取应用程序文件;

加载所述应用程序文件,对所述应用程序文件进行解析,并获取应用程序的包名;

根据所述应用程序的包名获取对应的依赖包;

根据应用程序与依赖包的对应关系建立第一数据库。

具体实施时,移动终端中的android系统在启动的过程中,会启动一个应用程序管理服务(packagemanagerservice),这个服务负责扫描系统中特定的目录,找到里面的应用程序文件,即以apk为后缀的文件。然后对应用程序文件进行解析,得到应用程序的相关信息(包括应用程序的包名),并把这些相关信息都保存在其成员变量中。较佳地,本发明修改应用程序管理服务源码,apk源码文件路径是:

frameworks/base/services/java/com/android/server/packagemanagerservice.java。此外,本发明在对应用程序文件进行解析的时候,会获取每个应用程序的本应用程序的功能文件和第三方功能文件(即依赖包)。

具体地,移动终端在对所述应用程序文件进行解析时,通过反汇编工具,可以得到android应用程序的smali代码。本发明中采用apktool工具,它可以反汇编apk得到应用程序的smali代码、图片和xml配置文件等资源文件。使用apktool反编译apk文件后,会在反编译工程目录下生成一个smali文件,里面存放着所有反编译出的smali文件,这些文件会根据应用程序包的层次结构生成相应的目录,程序中所有的类都会在相应的目录下生成独立的smali文件。

进一步地,移动终端建立应用程序中的所有smali文件,并根据所述应用程序的包名判断所述smali文件的路径是否包含所述应用程序的包名;若包含,则判定所述smali文件为应用程序的功能文件;若不包含,则判定所述smali文件为依赖包。本发明中会遍历系统中的所有的应用程序文件,从而获取到每一个应用程序的包名及其对应的依赖包的包名的对应关系,并且根据该对应关系建立第一数据库。

所述第一数据库中存储有每个应用程序的包名及其依赖包的包名。所述第一数据库表名为应用程序及其依赖包,表字段为应用包名、依赖包包名。便于描述,举例如下:

应用包名依赖包包名

应用1com.test.jar1;com.test.jar2;com.test.jar3;

应用2com.test.jar1;

......

应用ncom.test.jar6;com.test.jarn;

较佳地,所述第一数据库中存储有应用程序的包名以及对应的依赖包的包名;且所述第一数据库具有自动更新功能。具体地,本发明中的移动终端会在系统中增设用于监听安装应用或者卸载应用的监听器,当监听到移动终端安装应用时,移动终端调用应用程序管理服务对当前安装的应用进行解析,获取到当前安装的应用的相关信息,根据应用信息在所述第一数据库中增加当前安装的应用的信息数据记录;当监听到移动终端卸载应用时,移动终端调用应用程序管理服务对当前卸载的应用进行解析,获取到当前卸载的应用的相关信息,根据应用信息在所述第一数据库删除当前卸载的应用的信息数据记录;所述信息数据记录包括:应用程序的包名以及依赖包的包名。

步骤s200、从所述第一数据库中提取多个应用程序依赖同一个共享依赖包的对应关系,建立共享数据库,并对所述共享数据库中所有的共享依赖包创建对应的服务。

较佳地,所述步骤s200具体包括:

移动终端获取所有的依赖包,并获取依赖包的包名;

根据所述依赖包的包名从所述第一数据库中获取每一个依赖包所对应的应用程序,提取多个应用程序依赖同一个共享依赖包的对应关系;

根据提取的对应关系建立共享数据库;所述共享数据库中包括每一个共享依赖包的包名以及于每一个共享依赖包对应的所有应用程序的包名。

具体实施时,移动终端获取所有的依赖包,并获取依赖包的包名。根据依赖包名查询所述第一数据库,获取依赖该依赖包的所有应用程序,直至遍历完所有依赖包,从而提取出多个应用程序依赖同一个共享依赖包的对应关系,然后建立一个共享数据库。所述共享依赖包代表多个不同功能的应用程序依赖相同的依赖包。所述共享数据库中中包括每一个共享依赖包的包名以及于每一个共享依赖包对应的所有应用程序的包名。例如应用1与应用2中都是共享同一个依赖包jar1,那在共享数据包中的依赖包jar1就对应有2个应用程序,即应用1与应用2。

进一步地,步骤s300:对所述共享数据库中的应用程序进行重构,并将经重构后的应用程序与共享依赖包对应的服务绑定,实现应用程序间的依赖包共享。

较佳地,所述步骤s300具体包括:

获取所述共享数据库中的应用程序的包名;

采用反汇编工具获取应用程序的smali代码,并生成smali文件;

分别获取smali文件路径包含应用程序包名的smali文件,以及smali文件路径不包含应用程序依赖的共享依赖包名和不包含应用程序包名的smail文件;

将获取的smali文件重新编译打包成新的apk文件,完成应用程序的重构;

将经重构后的应用程序与共享依赖包对应的服务绑定,实现应用程序间的依赖包共享。

具体实施时,移动终端获取共享数据库中的所有应用程序的包名,通过采用反汇编工具,可以得到android应用程序的smali代码,本发明中采用apktool工具。它可以反汇编apk得到应用程序的smali代码、图片和xml配置文件等资源文件。使用apktool反编译apk文件后,会在反编译工程目录下生成一个smali文件,里面存放着所有反编译出的smali文件,这些文件会根据程序包的层次结构生成相应的目录,程序中所有的类都会在相应的目录下生成独立的smali文件。进一步地,移动终端分别获取smali文件路径包含应用程序包名的smali文件,以及smali文件路径不包含应用程序依赖的共享依赖包名和不包含应用程序包名的smail文件;最后将获取的smali文件重新编译打包成新的apk文件,即去除依赖共享依赖包的apk,完成应用程序的重构,使得当多个应用程序共享同一个依赖包时,系统中仅保留一个依赖包,重构后的应用程序并不会都会存在依赖包。

进一步地,移动终端根据所述共享数据库中的所有共享依赖包创建其对应的服务,具体地,首先创建基于android系统服务service的类文件;并在在启动服务接口回调函数中调用共享依赖包相应功能;遍历所述共享数据库中的所有共享依赖包并一一创建其对应的服务。最后,本发明将重构后的应用程序与共享依赖包对应的服务绑定。这样重构后的应用程序就会直接启动对应的服务,而不需要依赖包。

更进一步地,通过采用本发明的方法之后,移动终端启动应用程序时,具体包括如下步骤,如图2所示。

步骤401、当应用程序启动时,移动终端从预设的共享数据库中查找所述应用程序对应的共享依赖包,并获取共享依赖包的包名;

步骤402、根据所述共享依赖包的包名判断与所述共享依赖包对应的服务是否启动;

步骤403、当所述共享依赖包对应的服务未启动时,则启动所述共享依赖包对应的服务;

步骤404、应用程序根据所述共享依赖包绑定其对应的服务;并获取服务代理,完成应用程序的启动。

本发明通过创建具有多个应用程序依赖同一个共享依赖包的对应关系的共享数据库,并对共享数据库进行重构,使得重构后的应用程序与共享依赖包对应的服务绑定,可实现当系统中多个不同功能的应用程序都依赖相同的依赖包时,相同的依赖包在系统中仅保留一份,减轻系统的负担,节省系统存储空间。

基于上述实施例,本发明还公开了一种移动终端,如图3所示,包括:处理器(processor)10、与处理器10连接的存储介质(memory)20;其中,所述处理器10用于调用所述存储介质20中的程序指令,以执行上述实施例所提供的方法,例如执行:

获取移动终端中的应用程序以及对应的依赖包,并根据应用程序与依赖包的对应关系建立第一数据库;

从所述第一数据库中提取多个应用程序依赖同一个共享依赖包的对应关系,建立共享数据库,并对所述共享数据库中所有的共享依赖包创建对应的服务;

对所述共享数据库中的应用程序进行重构,并将经重构后的应用程序与共享依赖包对应的服务绑定,实现应用程序间的依赖包共享。

本发明实施例还提供一种存储介质,所述存储介质上存储计算机指令,所述计算机指令使计算机执行上述各实施例所提供的方法。

综上所述,本发明提供的一种应用间动态共享依赖包的方法、存储介质及移动终端,所述方法包括:获取移动终端中的应用程序以及对应的依赖包,并根据应用程序与依赖包的对应关系建立第一数据库;从所述第一数据库中提取多个应用程序依赖同一个共享依赖包的对应关系,建立共享数据库,并对所述共享数据库中所有的共享依赖包创建对应的服务;对所述共享数据库中的应用程序进行重构,并将经重构后的应用程序与共享依赖包对应的服务绑定,实现应用间的依赖包共享。本发明可实现当系统中多个不同功能的应用程序都依赖相同的依赖包时,相同的依赖包在系统中仅保留一份,减轻系统的负担,节省系统存储空间。

应当理解的是,本发明的应用不限于上述的举例,对本领域普通技术人员来说,可以根据上述说明加以改进或变换,所有这些改进和变换都应属于本发明所附权利要求的保护范围。

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