类加载方法、装置、设备及可读存储介质与流程

文档序号:17548077发布日期:2019-04-30 17:59阅读:211来源:国知局
类加载方法、装置、设备及可读存储介质与流程

本发明涉及计算机技术领域,尤其涉及一种类加载方法、装置、设备及可读存储介质。



背景技术:

在下载完成应用与对应插件后,若需要应用到下载完成的应用与插件对应某项功能,需要将该功能对应类文件加载至虚拟机中。

目前,在类文件加载过程中,一般是优先加载宿主应用中宿主代码构成的类文件,而不是插件中插件代码构成的类文件,然而,目前,为减少应用安装包的空间大小,一般将少众功能的实现代码或者修复漏洞后的更新代码置于插件中,即与插件代码相比较,宿主应用的宿主代码版本较旧,且代码量较大,因而优先加载宿主代码,会导致目标类文件加载时间过长,效率低的技术问题。



技术实现要素:

本发明的主要目的在于提供一种类加载方法、装置、设备及可读存储介质,旨在解决现有技术中优先加载应用宿主中的类文件而不是插件中的类文件,导致目标类文件加载时间过长,效率低的技术问题。

为实现上述目的,本发明提供一种类加载方法,所述类加载方法包括:

在检测到应用软件的类加载指令时,获取所述类加载指令对应的待加载类的目标全类名,其中,所述应用软件包括宿主应用与插件;

判断所述应用软件对应所述插件中是否存在所述目标全类名匹配的目标类文件;

当所述应用软件对应所述插件中存在所述目标全类名匹配的目标类文件时,将所述插件中所述目标类文件加载至所述应用软件对应虚拟机中。

可选地,所述判断应用软件对应插件中是否存在所述目标全类名匹配的目标类文件步骤之后包括:

当所述应用软件对应所述插件中未存在所述目标全类名匹配的目标类文件时,从所述应用软件对应所述宿主应用中获取所述目标全类名匹配的目标类文件;

将所述宿主应用中所述目标类文件加载至虚拟机中。

可选地,所述判断应用软件对应所述插件中是否存在所述目标全类名匹配的目标类文件步骤包括:

基于命名特征以及内存特征区分所述应用软件的所述插件和所述宿主应用;

基于区分后的所述插件和所述宿主应用,判断应用软件对应所述插件中是否存在所述目标全类名匹配的目标类文件。

可选地,所述当所述应用软件对应插件中存在所述目标全类名匹配的目标类文件时,将所述插件中所述目标类文件加载至虚拟机中步骤之后包括:

对加载完成的所述目标类文件的目标全类名进行预设标识的标识处理,以避免重复加载所述目标类文件。

可选地,所述所述在检测到应用软件的类加载指令时,获取所述类加载指令对应的待加载类的目标全类名步骤之前包括:

在检测到所述应用软件功能的调用指令时,获取所述应用软件的宿主应用以及插件;

将所述宿主应用以及所述插件读取至内存中。

可选地,所述目标全类名包括目标数据包名称以及目标类名称;

所述判断所述应用软件对应所述插件中是否存在所述目标全类名匹配的目标类文件步骤包括:

判断所述应用软件对应所述插件中是否存在所述目标数据包名称匹配的总类文件;

当所述应用软件对应所述插件中存在所述目标数据包名称匹配的总类文件时,判断所述总类文件中是否存在所述目标全类名匹配的目标类文件。

可选地,所述判断应用软件对应插件中是否存在所述目标全类名匹配的目标类文件步骤包括:

判断所述应用软件对应所述插件中是否存在所述目标全类名匹配的目标类文件,其中,所述目标类文件为人脸识别类文件。

本发明还提供一种类加载装置,所述类加载装置包括:

第一获取模块,用于在检测到应用软件的类加载指令时,获取所述类加载指令对应的待加载类的目标全类名,其中,所述应用软件包括宿主应用与插件;

判断模块,用于判断所述应用软件对应所述插件中是否存在所述目标全类名匹配的目标类文件;

第一加载模块,用于当所述应用软件对应所述插件中存在所述目标全类名匹配的目标类文件时,将所述插件中所述目标类文件加载至所述应用软件对应虚拟机中。

可选地,所述类加载装置还包括:

第二获取模块,用于当所述应用软件对应所述插件中未存在所述目标全类名匹配的目标类文件时,从所述应用软件对应所述宿主应用中获取所述目标全类名匹配的目标类文件;

第二加载模块,用于将所述宿主应用中所述目标类文件加载至虚拟机中。

可选地,所述判断模块包括:

获取单元,用于基于命名特征以及内存特征区分所述应用软件的所述插件和所述宿主应用;

第一判断单元,用于基于区分后的所述插件和所述宿主应用,判断应用软件对应所述插件中是否存在所述目标全类名匹配的目标类文件。

可选地,所述类加载装置还包括:

表示模块,用于对加载完成的所述目标类文件的目标全类名进行预设标识的标识处理,以避免重复加载所述目标类文件。

可选地,所述类加载装置还包括:

第三获取模块,用于在检测到所述应用软件功能的调用指令时,获取所述应用软件的宿主应用以及插件;

读取模块,用于将所述宿主应用以及所述插件读取至内存中。

可选地,所述目标全类名包括目标数据包名称以及目标类名称;

所述判断模块包括:

第二判断单元,用于判断所述应用软件对应所述插件中是否存在所述目标数据包名称匹配的总类文件;

第三判断单元,用于当所述应用软件对应所述插件中存在所述目标数据包名称匹配的总类文件时,判断所述总类文件中是否存在所述目标全类名匹配的目标类文件。

可选地,所述判断模块还包括:

第四判断单元,用于判断所述应用软件对应所述插件中是否存在所述目标全类名匹配的目标类文件,其中,所述目标类文件为人脸识别类文件。

此外,为实现上述目的,本发明还提供一种类加载设备,所述类加载设备包括:存储器、处理器,通信总线以及存储在所述存储器上的类加载程序,

所述通信总线用于实现处理器与存储器间的通信连接;

所述处理器用于执行所述类加载程序,以实现以下步骤:

在检测到应用软件的类加载指令时,获取所述类加载指令对应的待加载类的目标全类名,其中,所述应用软件包括宿主应用与插件;

判断所述应用软件对应所述插件中是否存在所述目标全类名匹配的目标类文件;

当所述应用软件对应所述插件中存在所述目标全类名匹配的目标类文件时,将所述插件中所述目标类文件加载至所述应用软件对应虚拟机中。

可选地,所述判断应用软件对应插件中是否存在所述目标全类名匹配的目标类文件步骤之后包括:

当所述应用软件对应所述插件中未存在所述目标全类名匹配的目标类文件时,从所述应用软件对应所述宿主应用中获取所述目标全类名匹配的目标类文件;

将所述宿主应用中所述目标类文件加载至虚拟机中。

可选地,所述判断应用软件对应所述插件中是否存在所述目标全类名匹配的目标类文件步骤包括:

基于命名特征以及内存特征区分所述应用软件的所述插件和所述宿主应用;

基于区分后的所述插件和所述宿主应用,判断应用软件对应所述插件中是否存在所述目标全类名匹配的目标类文件。

可选地,所述当所述应用软件对应插件中存在所述目标全类名匹配的目标类文件时,将所述插件中所述目标类文件加载至虚拟机中步骤之后包括:

对加载完成的所述目标类文件的目标全类名进行预设标识的标识处理,以避免重复加载所述目标类文件。

可选地,所述所述在检测到应用软件的类加载指令时,获取所述类加载指令对应的待加载类的目标全类名步骤之前包括:

在检测到所述应用软件功能的调用指令时,获取所述应用软件的宿主应用以及插件;

将所述宿主应用以及所述插件读取至内存中。

可选地,所述目标全类名包括目标数据包名称以及目标类名称;

所述判断所述应用软件对应所述插件中是否存在所述目标全类名匹配的目标类文件步骤包括:

判断所述应用软件对应所述插件中是否存在所述目标数据包名称匹配的总类文件;

当所述应用软件对应所述插件中存在所述目标数据包名称匹配的总类文件时,判断所述总类文件中是否存在所述目标全类名匹配的目标类文件。

可选地,所述判断应用软件对应插件中是否存在所述目标全类名匹配的目标类文件步骤包括:

判断所述应用软件对应所述插件中是否存在所述目标全类名匹配的目标类文件,其中,所述目标类文件为人脸识别类文件。

此外,为实现上述目的,本发明还提供一种可读存储介质,所述可读存储介质存储有一个或者一个以上程序,所述一个或者一个以上程序可被一个或者一个以上的处理器执行以用于:

在检测到应用软件的类加载指令时,获取所述类加载指令对应的待加载类的目标全类名,其中,所述应用软件包括宿主应用与插件;

判断所述应用软件对应所述插件中是否存在所述目标全类名匹配的目标类文件;

当所述应用软件对应所述插件中存在所述目标全类名匹配的目标类文件时,将所述插件中所述目标类文件加载至所述应用软件对应虚拟机中。

本发明通过在检测到应用软件的类加载指令时,获取所述类加载指令对应的待加载类的目标全类名,其中,所述应用软件包括宿主应用与插件;判断所述应用软件对应所述插件中是否存在所述目标全类名匹配的目标类文件;当所述应用软件对应所述插件中存在所述目标全类名匹配的目标类文件时,将所述插件中所述目标类文件加载至所述应用软件对应虚拟机中。即在本申请中,优先在插件中查找或者优先加载插件中的目标类文件,由于插件中类文件较少或且修复漏洞后的更新代码即更新的类文件是置于插件中的,因而,与优先加载宿主应用中的类文件相比较,优先在插件中查找或者优先加载插件中的目标类文件有利于快速查找到目标类文件,以最终快速加载到修复漏洞后的类文件,因而,解决了现有技术中目标类文件加载时间过长,效率低的技术问题。

附图说明

图1为本发明类加载方法第一类实施例的流程示意图;

图2为本发明类加载方法第二类实施例的流程示意图;

图3是本发明实施例方法涉及的硬件运行环境的设备结构示意图。

本发明目的的实现、功能特点及优点将结合实施例,参照附图做进一步说明。

具体实施方式

应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。

本发明提供一种类加载方法,在本发明类加载方法的第一类实施例中,所述类加载方法包括:

步骤s10,在检测到应用软件的类加载指令时,获取所述类加载指令对应的待加载类的目标全类名,其中,所述应用软件包括宿主应用与插件;

步骤s20,判断所述应用软件对应所述插件中是否存在所述目标全类名匹配的目标类文件;

步骤s30,当所述应用软件对应所述插件中存在所述目标全类名匹配的目标类文件时,将所述插件中所述目标类文件加载至所述应用软件对应虚拟机中。

参照图1,具体步骤如下:

步骤s10,在检测到应用软件的类加载指令时,获取所述类加载指令对应的待加载类的目标全类名,其中,所述应用软件包括宿主应用与插件;

在本实施例中,是通过类文件的全类名来获取需要加载的类文件的。

其中,所述在检测到应用软件的类加载指令时,获取所述类加载指令对应的待加载类的目标全类名步骤之前包括:

步骤s01,在检测到所述应用软件功能的调用指令时,获取所述应用软件的宿主应用以及插件;

在检测到应用软件功能调用指令时,获取所述调用指令对应的应用软件的宿主应用以及插件,其中,插件指的是应用软件的插件,宿主应用指的是应用软件的除了插件外的程序对象,应用软件的功能调用可以是本应用软件功能的调用,也可以是调用本应用软件外的其它应用软件。用以具体实施例进行说明,a应用软件为本应用软件,a应用软件具有人脸识别的功能,因而,在a应用软件中存在该人脸识别对应的各个类文件,在a应用软件中需要人脸识别功能时,直接加载本应用软件即a应用软件中人脸识别功能相关的类文件即可,当a应用软件不具备人脸识别功能、而b应用软件具备人脸识别功能时,a应用软件可以通过调用b应用软件,即是调用b应用软件的各个类文件或者人脸识别类文件,以最终实现人脸识别的功能。本实施例以调用本应用软件外的其它应用软件为例进行具体说明。

步骤s02,将所述宿主应用以及所述插件读取至内存中。

在得到宿主应用以及对应的插件后,将宿主应用以及对应的插件读取至内存中,即将该宿主应用以及对应插件中的dex文件全部读取至内存中。

在将对应的宿主应用以及插件读取至内存中后,才能实现在需要执行某项具体的功能,然后再将该具体功能对应类文件进行加载至虚拟机中。

在检测到应用软件的类加载指令时,获取所述类加载指令对应的待加载类的目标全类名,其中,所述应用软件包括宿主应用与插件,其中,该目标全类名对应的类加载文件是已经读取在内存中的,即是目标全类名对应的类加载文件是在读取至内存中后,才能在相应应用上显示对应的功能触发图标或者按键,因而,用户在点击该功能触发图标或者按键后,才能够触发生成类加载指令,才能获取所述类加载指令对应的待加载类的目标全类名。

步骤s20,判断所述应用软件对应所述插件中是否存在所述目标全类名匹配的目标类文件;

在本实施例中,在得到目标全类名后,优先判断应用软件对应插件中是否存在所述目标全类名匹配的目标类文件,由于优先在插件中查找或者优先加载插件中的目标类文件,而插件中类文件较少或且修复漏洞后的更新的类文件是置于插件中的,因而,优先在插件中查找或者优先加载插件中的目标类文件有利于快速查找到目标类文件,或者即使目标类文件不在插件中,而插件中总的类文件比较少,因而,需要遍历查找的时间也比较少,因而能够最终快速加载到目标类文件,而如果优先在宿主应用中查找目标类文件,当该目标类文件不在宿主应用中时,需要遍历查找的时间也比较长,或者即使该目标类文件在宿主应用中时,但该目标类文件不是最新的修改漏洞后的类文件,因而加载到目标类文件的时间比较长,或者不能加载到修改漏洞后的最新的目标类文件。

所述判断应用软件对应插件中是否存在所述目标全类名匹配的目标类文件步骤包括:

步骤s21,基于命名特征以及内存特征区分所述应用软件的所述插件和所述宿主应用;

在得到目标全类名后,基于该目标全类名首先在插件的各个类文件中进行匹配,在插件的各个类文件中匹配目标类文件之前,需要区分插件与宿主应用。

具体地,可以通过插件和宿主应用的名称构成(命名特征)以及所占内存大小的不同(内存特征),进行应用软件的插件和宿主应用的区分,其中,插件所占的内存大小较小,宿主应用所占内存大小较多,另外,插件与宿主应用的名称构成规则也不同,插件名称是携带插件标识特征的,如在插件名称中有“插件”后缀标识,而宿主应用的名称可以不携带任何插件标识。

步骤s22,基于区分后的所述插件和所述宿主应用,判断应用软件对应所述插件中是否存在所述目标全类名匹配的目标类文件。

基于区分后的所述插件和宿主应用,判断应用软件对应插件中是否存在所述目标全类名匹配的目标类文件。在区分宿主应用与插件后,即可从中选择出插件,进而判断应用软件对应插件中是否存在所述目标全类名匹配的目标类文件。

具体地,所述目标全类名包括目标数据包名称以及目标类名称;

所述判断应用软件对应插件中是否存在所述目标全类名匹配的目标类文件步骤包括:

步骤s23,判断所述应用软件对应所述插件中是否存在所述目标数据包名称匹配的总类文件;

在本实施例中,目标全类名包括目标数据包名称以及目标类名称,首先判断应用软件对应插件中是否存在所述目标数据包名称匹配的总类文件。其中,目标数据包名称指的是该目标类文件打包后的名称,或者该目标类文件相应上级文件对应的名称,该相应上级文件包括目标类文件以及除了目标类文件外的其它类文件,用以具体实施例进行说明,当需要调用人脸识别功能时,目标数据包名称指的是识别功能数据包名称,该别功能数据包名称对应的文件为总类文件,人脸识别功能对应类文件在识别数据包名称对应的各个类文件中。

步骤s24,当所述应用软件对应所述插件中存在所述目标数据包名称匹配的总类文件时,判断所述总类文件中是否存在所述目标全类名匹配的目标类文件。

当应用软件对应插件中存在所述目标数据包名称匹配的总类文件时,再判断所述总类文件中是否存在所述目标全类名匹配的目标类文件。当所述类加载指令对应插件中不存在所述目标数据包名称匹配的总类文件时,不执行判断所述总类文件中是否存在所述目标全类名匹配的目标类文件的操作。当应用软件对应插件中存在所述目标数据包名称匹配的总类文件时,再判断所述总类文件中是否存在所述目标全类名匹配的目标类文件,能够起到节约识别流程的作用。

用以具体实施例进行说明,当需要调用人脸识别功能时,目标数据包名称指的是识别功能数据包名称,该别功能数据包名称对应的文件为总类文件,人脸识别功能对应类文件在识别数据包名称对应的各个类文件中。若不存在识别功能数据包名称,则不在插件中执行查找人脸识别功能类文件的获取操作。以节约时间,以提升用户体验。

在本实施例中,先从插件中查找目标类文件,如类加载指令对应待加载类的类名为homeclass,则根据类名称匹配方式,从插件代码中找到homeclass,并获取得到homeclass对应的代码,通过类加载器将homeclass对应的代码加载至虚拟机中,实现该homeclass对应代码的功能。

本发明通过在检测到应用软件的类加载指令时,获取所述类加载指令对应的待加载类的目标全类名,其中,所述应用软件包括宿主应用与插件;判断所述应用软件对应所述插件中是否存在所述目标全类名匹配的目标类文件;当所述应用软件对应所述插件中存在所述目标全类名匹配的目标类文件时,将所述插件中所述目标类文件加载至所述应用软件对应虚拟机中。即在本申请中,优先在插件中查找或者优先加载插件中的目标类文件,由于插件中类文件较少或且修复漏洞后的更新代码即更新的类文件是置于插件中的,因而,与优先加载宿主应用中的类文件相比较,优先在插件中查找或者优先加载插件中的目标类文件有利于快速查找到目标类文件,以最终快速加载到修复漏洞后的类文件,因而,解决了现有技术中目标类文件加载时间过长,效率低的技术问题。

进一步地,本发明提供类加载方法的另一实施例,在该实施例中,所述判断应用软件对应插件中是否存在所述目标全类名匹配的目标类文件步骤之后包括:

步骤s40,当所述应用软件对应所述插件中未存在所述目标全类名匹配的目标类文件时,从所述应用软件对应所述宿主应用中获取所述目标全类名匹配的目标类文件;

在插件中未存在所述目标全类名匹配的目标类文件时,很显然,该目标类文件在宿主应用中,因而,从所述类加载指令对应宿主应用中获取目标类文件,具体地,通过目标全类名匹配方式,从所述类加载指令对应宿主应用中获取所述目标全类名匹配的目标类文件。

步骤s50,将所述宿主应用中所述目标类文件加载至虚拟机中。

将宿主应用中的所述目标类文件加载至虚拟机中,以实现所述目标类文件的功能,其中,该目标类文件可以为人脸识别类文件。

用以具体实施例进行说明,如类加载指令对应待加载类的类名为homeclass,通过类名称匹配方式,则根据类名称匹配方式,从宿主代码中找到homeclass,并获取得到homeclass对应的代码,通过类加载器将homeclass对应的代码加载至虚拟机中。

在本实施例中,通过当所述应用软件对应所述插件中未存在所述目标全类名匹配的目标类文件时,从所述应用软件对应所述宿主应用中获取所述目标全类名匹配的目标类文件;将所述宿主应用中所述目标类文件加载至虚拟机中。在本实施例中,在插件中未存在目标类文件时,能够准确从宿主应用中将所述目标类文件加载至虚拟机中,实现目标类文件的功能。

进一步地,本发明提供类加载方法的另一实施例,在该实施例中,所述当所述类加载指令对应插件中存在所述目标全类名匹配的目标类文件时,将插件中所述目标类文件加载至虚拟机中步骤之后包括:

步骤a1,对加载完成的所述目标类文件的目标全类名进行预设标识的标识处理。

在本实施例中,对加载完成的所述目标类文件的目标全类名进行预设标识的标识处理,需要说明的是,对目标全类名进行预设标识的标识处理的目的在于对所述目标类文件进行标识,用以具体实施例进行说明,如若在插件中已经加载了某个待加载类文件如a类文件,对该加载完成的目标类文件即a类文件的目标全类名进行预设标识的标识处理,如a类文件的目标全类名为homeclass,则标识后的a类文件的目标全类名为homeclass*,即预设标识*表示该a类文件已经加载的标识,另外,该预设标识还可是打上其它醒目标签方式,该其它醒目标签可以是字母或者标识等,以避免在需要在宿主代码中加载其它待加载类时,又重复加载该a待加载类的现象。

在本实施例中,通过对加载完成的所述目标类文件的目标全类名进行预设标识的标识处理,因而能够避免所述目标全类名对应目标类文件的重复加载,避免错乱加载,因而提升用户体验。

参照图3,图3是本发明实施例方案涉及的硬件运行环境的设备结构示意图。

本发明实施例类加载设备可以是pc,也可以是智能手机、平板电脑、电子书阅读器、mp3(movingpictureexpertsgroupaudiolayeriii,动态影像专家压缩标准音频层面3)播放器、mp4(movingpictureexpertsgroupaudiolayeriv,动态影像专家压缩标准音频层面3)播放器、便携计算机等终端设备。

如图3所示,该类加载设备可以包括:处理器1001,例如cpu,存储器1005,通信总线1002。其中,通信总线1002用于实现处理器1001和存储器1005之间的连接通信。存储器1005可以是高速ram存储器,也可以是稳定的存储器(non-volatilememory),例如磁盘存储器。存储器1005可选的还可以是独立于前述处理器1001的存储设备。

可选地,该类加载设备还可以包括用户接口、网络接口、摄像头、rf(radiofrequency,射频)电路,传感器、音频电路、wifi模块等等。用户接口可以包括显示屏(display)、输入单元比如键盘(keyboard),可选用户接口还可以包括标准的有线接口、无线接口。网络接口可选的可以包括标准的有线接口、无线接口(如wi-fi接口)。

本领域技术人员可以理解,图3中示出的类加载设备结构并不构成对类加载设备的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。

如图3所示,作为一种计算机存储介质的存储器1005中可以包括操作系统、网络通信模块以及类加载程序。操作系统是管理和控制类加载设备硬件和软件资源的程序,支持类加载程序以及其它软件和/或程序的运行。网络通信模块用于实现存储器1005内部各组件之间的通信,以及与类加载设备中其它硬件和软件之间通信。

在图3所示的类加载设备中,处理器1001用于执行存储器1005中存储的类加载程序,实现以下步骤:

在检测到应用软件的类加载指令时,获取所述类加载指令对应的待加载类的目标全类名,其中,所述应用软件包括宿主应用与插件;

判断所述应用软件对应所述插件中是否存在所述目标全类名匹配的目标类文件;

当所述应用软件对应所述插件中存在所述目标全类名匹配的目标类文件时,将所述插件中所述目标类文件加载至所述应用软件对应虚拟机中。

本发明类加载设备具体实施方式与上述类加载方法各实施例基本相同,在此不再赘述。

本发明还提供一种类加载装置,所述类加载装置包括:

第一获取模块,用于在检测到应用软件的类加载指令时,获取所述类加载指令对应的待加载类的目标全类名,其中,所述应用软件包括宿主应用与插件;

判断模块,用于判断所述应用软件对应所述插件中是否存在所述目标全类名匹配的目标类文件;

第一加载模块,用于当所述应用软件对应所述插件中存在所述目标全类名匹配的目标类文件时,将所述插件中所述目标类文件加载至所述应用软件对应虚拟机中。

本发明可读存储介质具体实施方式与上述类加载方法各实施例基本相同,在此不再赘述。

本发明提供了一种可读存储介质,所述可读存储介质存储有一个或者一个以上程序,所述一个或者一个以上程序还可被一个或者一个以上的处理器执行以用于实现上述任一项所述的类加载方法的步骤。

本发明可读存储介质具体实施方式与上述类加载方法各实施例基本相同,在此不再赘述。

以上仅为本发明的优选实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利处理范围内。

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