CN109947407B - 一种数据获取方法及装置 - Google Patents
一种数据获取方法及装置 Download PDFInfo
- Publication number
- CN109947407B CN109947407B CN201910173438.2A CN201910173438A CN109947407B CN 109947407 B CN109947407 B CN 109947407B CN 201910173438 A CN201910173438 A CN 201910173438A CN 109947407 B CN109947407 B CN 109947407B
- Authority
- CN
- China
- Prior art keywords
- target
- node
- target application
- memory
- plug
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Landscapes
- Stored Programmes (AREA)
Abstract
本发明实施例公开了一种数据获取方法及装置,该方法包括:基于设备系统对应的开放源代码编译目标动态库;将目标动态库集成到目标应用中;目标应用是基于插件化的应用;基于目标动态库所提供的访问接口,在目标应用中访问设备系统的系统参数集;系统参数集中包括设备系统中所有应用对应的内存信息;获取目标应用对应的标识信息,根据标识信息在系统参数集中获取与目标应用对应的目标内存信息;目标应用对应的标识信息是基于目标应用的插件化的特性得到的。采用本发明实施例,可提高对插件化应用进行内存分类的通用性以及分类效率。
Description
技术领域
本发明涉及数据处理的技术领域,尤其涉及一种数据获取方法及装置。
背景技术
现今应用市场已经是百花齐放,各类应用不论在功能上还是内容上都越发丰富,为了满足用户日益增长的需求,对应用的功能以及内容都提出了更高的要求,由此插件化的应用应运而生。
现有技术中,在对应用进行内存分类时,需要通过特定的内存工具才能实现应用的内存分类,从而对应用以及应用所在设备增加了一系列限定,导致内存分类通用性低。且在现有技术中,在对插件化的应用对应的内存进行分类以获取与该插件化的应用相匹配的内存信息时,需要获取到设备最高管理权限或者修改设备系统的源代码才能实现,此种方式会导致开发成本高,内存分类效率低等缺陷。
发明内容
本发明实施例提供了一种数据获取方法及装置,可提高对插件化应用进行内存分类的通用性以及分类效率。
本发明实施例一方面提供了一种数据获取方法,包括:
基于设备系统对应的开放源代码编译目标动态库;
将所述目标动态库集成到目标应用中;所述目标应用是基于插件化的应用;
基于所述目标动态库所提供的访问接口,在所述目标应用中访问所述设备系统的系统参数集;所述系统参数集中包括所述设备系统中所有应用对应的内存信息;
获取所述目标应用对应的标识信息,根据所述标识信息在所述系统参数集中获取与所述目标应用对应的目标内存信息;所述目标应用对应的标识信息是基于所述目标应用的插件化的特性得到的。
其中,所述基于设备系统对应的开放源代码编译目标动态库,包括:
创建源码工程;所述源码工程中包括所述开放源代码;
将所述源码工程中的所述开放源代码链接到开发工程中,基于所述开发工程提供的开发环境编译所述目标动态库。
其中,所述基于所述开发工程提供的开发环境编译所述目标动态库,包括:
基于所述开发环境从所述开放源代码中获取所述设备系统对应的头文件;
基于所述开发环境编译初始动态库,并根据所述头文件为所述初始动态库编译访问接口,将包含所述访问接口的初始动态库确定为所述目标动态库。
其中,还包括:
获取所述目标应用对应的所述标识信息;所述标识信息中包括所述目标应用对应的目标内存地址;
在所述目标应用中访问所述系统参数集,以获取与所述目标内存地址对应的内存信息,并将获取到的与所述目标内存地址相匹配的内存信息确定为所述目标内存信息。
其中,还包括:
确定所述目标应用对应的锚定点;所述锚定点用于区别所述目标应用对应的目标插件的引用路径,所述引用路径用于区分所述目标应用对应的内存信息;
将所述锚定点确定为遍历的起点,并获取中间节点;所述中间节点包括系统节点、所述目标应用对应的目标节点以及宿主节点;所述目标节点是指所述目标插件的引用路径对应的多个节点;所述系统节点是指所述设备系统中除了所述目标节点以及所述宿主节点之外的其他节点;所述宿主节点是指所述目标插件与所述设备系统对应的宿主进行交互时所获取到的节点;
从所述起点开始,通过节点遍历规则遍历所述目标节点、所述系统节点以及所述宿主节点,并根据遍历结果生成所述目标应用对应的标识信息;所述标识信息是通过遍历到的所述目标节点所获取的。
其中,所述从所述起点开始,通过节点遍历规则遍历所述目标节点以及所述系统节点,并根据遍历结果生成所述目标应用对应的标识信息,包括:
根据所述节点遍历规则确定所述中间节点的遍历顺序,根据所述遍历顺序,从所述起点开始,遍历所述中间节点;
根据处于遍历状态的中间节点的类型在所述中间节点中选择停止遍历节点;所述处于遍历状态的中间节点的类型包括所述宿主节点的类型或所述目标节点的类型或所述系统节点的类型;
当遍历至所述目标节点时,获取所述目标节点对应的内存地址,将获取到的所述目标节点中的每一个目标节点对应的内存地址统称为目标内存地址;
当遍历至所述系统节点的类型所对应的停止遍历节点时,停止遍历,并基于所述目标内存地址生成所述目标应用对应的所述标识信息。
其中,还包括:
检测所述目标应用对应的加载源;
若所述加载源为所述目标应用对应的类加载器,则执行所述目标应用对应的锚定点的步骤。
其中,所述确定所述目标应用对应的锚定点,包括:
获取所述设备系统的插件入口对应的类,并通过所述插件入口对应的类确定入口函数以及成员变量;
根据所述入口函数以及所述成员变量确定所述锚定点。
其中,所述节点遍历规则包括:
所述宿主节点的遍历优先级大于所述目标节点的遍历优先级,所述目标节点的遍历优先级大于所述系统节点的遍历优先级。
本发明实施例另一方面提供了一种数据获取装置,包括:
编译模块,用于基于设备系统对应的开放源代码编译目标动态库;
集成模块,用于将所述目标动态库集成到目标应用中;所述目标应用是基于插件化的应用;
访问模块,用于基于所述目标动态库所提供的访问接口,在所述目标应用中访问所述设备系统的系统参数集;所述系统参数集中包括所述设备系统中所有应用对应的内存信息;
第一获取模块,用于获取所述目标应用对应的标识信息,根据所述标识信息在所述系统参数集中获取与所述目标应用对应的目标内存信息;所述目标应用对应的标识信息是基于所述目标应用的插件化的特性得到的。
其中,所述编译模块还包括:
创建单元,用于创建源码工程;所述源码工程中包括所述开放源代码;
编译单元,用于将所述源码工程中的所述开放源代码链接到开发工程中,基于所述开发工程提供的开发环境编译所述目标动态库。
其中,所述编译单元还包括:
获取子单元,用于基于所述开发环境从所述开放源代码中获取所述设备系统对应的头文件;
编译子单元,用于基于所述开发环境编译初始动态库,并根据所述头文件为所述初始动态库编译访问接口,将包含所述访问接口的初始动态库确定为所述目标动态库。
其中,所述数据获取装置还包括:
第二获取模块,用于获取所述目标应用对应的所述标识信息;所述标识信息中包括所述目标应用对应的目标内存地址;
第一确定模块,用于在所述目标应用中访问所述系统参数集,以获取与所述目标内存地址对应的内存信息,并将获取到的与所述目标内存地址相匹配的内存信息确定为所述目标内存信息。
其中,所述数据获取装置还包括:
第二确定模块,用于确定所述目标应用对应的锚定点;所述锚定点用于区别所述目标应用对应的目标插件的引用路径,所述引用路径用于区分所述目标应用对应的内存信息;
节点获取模块,用于将所述锚定点确定为遍历的起点,并获取中间节点;所述中间节点包括系统节点、所述目标应用对应的目标节点以及宿主节点;所述目标节点是指所述目标插件的引用路径对应的多个节点;所述系统节点是指所述设备系统中除了所述目标节点以及所述宿主节点之外的其他节点;所述宿主节点是指所述目标插件与所述设备系统对应的宿主进行交互时所获取到的节点;
生成模块,用于从所述起点开始,通过节点遍历规则遍历所述目标节点、所述系统节点以及所述宿主节点,并根据遍历结果生成所述目标应用对应的标识信息;所述标识信息是通过遍历到的所述目标节点所获取的。
其中,所述第二确定模块还包括:
第一获取单元,用于获取所述设备系统的插件入口对应的类,并通过所述插件入口对应的类确定入口函数以及成员变量;
确定单元,用于根据所述入口函数以及所述成员变量确定所述锚定点。
其中,所述生成模块还包括:
遍历单元,用于根据所述节点遍历规则确定所述中间节点的遍历顺序,根据所述遍历顺序,从所述起点开始,遍历所述中间节点;
选择单元,用于根据处于遍历状态的中间节点的类型在所述中间节点中选择停止遍历节点;所述处于遍历状态的中间节点的类型包括所述宿主节点的类型或所述目标节点的类型或所述系统节点的类型;
第二获取单元,用于当遍历至所述目标节点时,获取所述目标节点对应的内存地址,将获取到的所述目标节点中的每一个目标节点对应的内存地址统称为目标内存地址;
生成单元,用于当遍历至所述系统节点的类型所对应的停止遍历节点时,停止遍历,并基于所述目标内存地址生成所述目标应用对应的所述标识信息。
其中,所述数据获取装置还包括:
检测模块,用于检测所述目标应用对应的加载源;
判定模块,用于若所述加载源为所述目标应用对应的类加载器,则执行所述目标应用对应的锚定点的步骤。
本发明另一方面提供了一种数据获取装置,包括:处理器和存储器;
所述处理器和存储器相连,其中,所述存储器用于存储程序代码,所述处理器用于调用所述程序代码,以执行如本发明实施例中一方面中的方法。
本发明实施例另一方面提供了一种计算机存储介质,该计算机存储介质存储有计算机程序,该计算机程序包括程序指令,该程序指令当被处理器执行时使该处理器执行上述一方面中的方法。
本发明实施例基于设备系统对应的开放源代码编译目标动态库;将所述目标动态库集成到插件化的目标应用中;基于所述目标动态库所提供的访问接口,在所述目标应用中访问所述设备系统的系统参数集;基于所述目标应用的插件化的特性获取所述目标应用对应的标识信息,根据所述标识信息在所述系统参数集中获取与所述目标应用对应的目标内存信息。由此可见,在上述目标应用中集成了所述目标动态库之后,通过集成了所述目标动态库的所述目标应用可以直接访问上述设备系统的本地库(即系统参数集)进而获取相关内存信息,而不需要获取系统的最高访问权限,提高了内存分类效率。同时访问过程中对目标应用的配置模式没有限定,且按照应用中的每个插件具备的特性输出内存信息,提高了对插件化应用的内存分类通用性以及内存优化效率。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明实施例提供的一种目标动态库使用控制的场景示意图;
图2是本发明实施例提供的一种目标应用启动流程的结构示意图;
图3是本发明实施例提供的一种数据获取方法的流程示意图;
图4是本发明实施例提供的另一种数据获取方法的流程示意图;
图5是本发明实施例提供的一种访问系统参数集的原理示意图;
图6是本发明实施例提供的一种编译目标动态库的场景示意图;
图7是本发明实施例提供的一种标识信息获取方法的流程示意图;
图8是本发明实施例提供的一种遍历的场景示意图;
图9是本发明实施例提供的另一种遍历的场景示意图;
图10是本发明实施例提供的另一种遍历的场景示意图;
图11是本发明实施例提供的一种遍历的结构示意图;
图12是本发明实施例提供的一种位图的结构示意图;
图13是本发明实施例提供的一种字节的结构示意图;
图14是本发明实施例提供的一种数据获取装置的结构示意图;
图15是本发明实施例提供的另一种数据获取装置的结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明实施例可以用于在设备系统中对插件化的应用进行内存分类并获取相应内存信息的过程,所述插件化的应用为安装在所述设备系统中的应用。具体的,在插件化的目标应用中集成so(shared object,即共享对象)动态链接库,进而通过所述目标应用可以直接访问设备系统的本地库(可以称之为系统参数集),而不需要获取设备系统对应的最高权限,也不需要重新编译系统的源代码,且无需目标应用为debug(排除故障)模式。上述so动态链接库可以称之为目标动态库,也可以称之为EMT(增强型内存测试工具包)。通过本发明实施例提供的方法,在对插件化的目标应用的内存进行分类和获取时,减少了对目标应用配置的模式的限定,同时独立于设备系统中安装的其他应用,在访问所述本地库并获取上述目标应用对应的内存信息的过程中,不会对设备中的其他应用在设备系统中的内存占用和内存使用情况造成影响。可选的,上述设备可以是手机、平板电脑、笔记本电脑、掌上电脑、移动互联网设备(MID,mobile internet device)等终端中的任一种终端。其中,在上述so动态链接库编译的过程中,需要克服ART(Android Runtime,应用运行模式)的头文件和so(shared object,即共享对象)文件的依赖问题。本发明实施例通过安卓源代码的编译环境,创建AOSP(Androidopensourceproject,安卓开放源代码项目)工程,所述AOSP工程可以将编译环境与开发环境进行分离,同时建立一个AS(Android Studio,安卓集成开发工具)工程作为开发环境,可提高开发效率。在所述AOSP工程所提供的开发环境中通过上述设备对应的ART的头文件编译所述so动态链接库,即通过所述ART的头文件为所述so动态链接库提供访问上述设备系统的本地库的访问接口,使得集成了所述so动态链接库的目标应用也可以直接访问上述设备系统的本地库,并在所述本地库中获取与所述目标应用相匹配的内存信息。
请参见图1,图1是本发明实施例提供的一种目标动态库使用控制的场景示意图。如图1所示,上述so动态链接库(即增强型内存测试工具包EMT)可以有三种控制方式,即分别由“a1”、“a2”、“a3”进行控制。其中,“a1”命令行输入框,通过编写一段特定的代码控制所述so动态链接库的使用,需要创建socket(实质为API,即编程接口);“a2”专有控制应用,通过编写一个专有的应用来控制上述so动态链接库的使用;“a3”宿主内部控制应用,通过设备系统的内部的管理型应用直接对上述so动态链接库进行使用控制,也需要创建socket(实质为API,即编程接口)。在实际使用上述so动态库的过程中,对所述so动态链接库的使用控制可以为上述三种方法中的任一种方法,具体根据实际应用场景决定,此处不作限制。请参见图2,图2是本发明实施例提供的一种目标应用启动流程的结构示意图。如图2所示,在上述设备系统中存在三个运行空间,分别为目标应用对应的运行空间,JAVA(一种计算机编程语言)空间,以及设备系统对应的本地空间(设备系统的内存)。具体的,首先在本地空间会生成一个目标应用对应的app_process(初始进程),进而通过JAVA编译得到Zygote(守护进程服务)。其中,Zygote进程由Init进程创建,在Android(安卓)系统中,所有的应用程序进程以及SystemServer(系统服务进程)都是由Zygote进程孕育出来的,所以也称Zygote为JAVA程序的“孵化池”。通过所述zygote进程共享设备系统已运行的虚拟机的代码和内存信息,可以缩短应用程序运行所耗费的时间。并且,通过所述zygote进程可以将目标应用对应的应用程序要使用的类和资源加载到内存中,并组织成所用资源的链接信息,新运行的目标应用对应的Android应用程序在使用所需资源时不必每次重新形成资源的链接信息,这会节省大量时间,提高程序运行速度。通过所述Zygote进程进行进程连接,使得上述目标应用进行运行初始化,即实现所述目标应用在所述设备系统中的运行。在所述目标应用成功启动之后,进而实现本发明实施例所提供的方法,通过在所述目标应用中集成上述so动态链接库,使得可以在所述目标应用中直接访问所述设备系统的本地库,在本地库中提供的运行环境保持运行状态,所述堆内存可以作为内存记忆工具。所述本地库即为所述设备系统对应的ART(虚拟机),其在设备系统中的存在形式为libart.so(本地库)。
请参见图3,是本发明实施例提供的一种数据获取方法的流程示意图,如图3所示,所述方法可以包括:
步骤S101,基于设备系统对应的开放源代码编译目标动态库;
具体的,在现有开发中,并不支持对设备系统的本地库直接进行访问,所以如果想要直接访问设备系统的本地库,则需要解决ART(虚拟机)的头文件与so文件的依赖问题,这个依赖问题会导致在访问所述本地库时没有访问接口。本发明实施例中通过创建所述目标动态库解决上述ART(虚拟机)的头文件与so文件的依赖问题。具体为,创建一个AOSP(安卓开放源代码项目)工程,所述AOSP工程将开发环境与编译环境分离开,可以提高开发效率。建立一个AS(AndroidStudio)工程作为开发环境,通过软链接将AOSP工程中的源代码链接到AS工程中,同时将上述ART的头文件和依赖的其他库头文件链接到上述AS工程中,进而就可以基于上述ART的头文件通过上述AOSP工程编译所述目标动态库(即so动态链接库)。
步骤S102,将所述目标动态库集成到目标应用中,所述目标应用是基于插件化的应用;
具体的,将上述编译的目标动态库集成到所述目标应用中,所述目标应用为插件化的应用,通过将应用插件化支持动态增加和修改应用线上的模块,可以增强应用实时的动态性需求。
步骤S103,基于所述目标动态库所提供的访问接口,在所述目标应用中访问所述设备系统的系统参数集;所述系统参数集中包括所述设备系统中所有应用对应的内存信息;
具体的,通过将上述ART的头文件编译到所述目标动态库中,可以解决ART头文件与so文件的依赖问题,可以为所述目标动态库提供访问上述设备系统的本地库的访问接口。即是,为集成了上述so动态库的目标应用提供了访问所述设备系统的本地库(即系统参数集)的访问接口。所述系统参数集中保存有上述设备系统中安装的应用的全部内存信息以及设备系统的各种参数,在所述目标应用中访问所述设备系统的系统参数集。
步骤S104,获取所述目标应用对应的标识信息,根据所述标识信息在所述系统参数集中获取与所述目标应用对应的目标内存信息,所述目标应用对应的标识信息是基于所述目标应用的插件化的特性得到的;
具体的,获取上述目标应用对应的标识信息,该标识信息中对应有所述目标应用在上述系统参数集中的内存信息对应的内存地址,上述目标应用通过获取到的目标应用对应的内存地址访问上述系统参数集,以从所述系统参数集中获取与所述目标应用对应的内存地址相匹配的内存信息,并将在所述系统参数集中获取到的内存信息确定为所述目标内存信息。上述目标应用对应的标识信息是通过目标应用对应的插件化特性得到的,通过访问上述系统参数集获取所述目标应用对应的内存信息即是对系统参数集中的内存进行分类,对应获取属于上述目标应用对应的内存类别对应的内存信息。通过应用的插件化对目标应用内存进行分类,不需要设备root(即设备系统最高权限),不需要重新编译ART源代码,即不需重新编译ROM(存储器),也不要目标应用为debug(故障排除)模式,内存分类过程中减少了多种限定,提高了内存分类的通用性。同时,本发明实施例按照应用对应的插件来输出内存信息,进而可以基于插件进行多个应用的大规模协同化,并且,按照插件对内存进行分类将大大提高内存泄露以及内存优化的效率。同时,还能帮助开发人员在开发应用时,进行应用内存的监控和调试。
本发明实施例基于设备系统对应的开放源代码编译目标动态库;将所述目标动态库集成到插件化的目标应用中;基于所述目标动态库所提供的访问接口,在所述目标应用中访问所述设备系统的系统参数集;基于所述目标应用的插件化的特性获取所述目标应用对应的标识信息,根据所述标识信息在所述系统参数集中获取与所述目标应用对应的目标内存信息。由此可见,在上述目标应用中集成了所述目标动态库之后,通过集成了所述目标动态库的所述目标应用可以直接访问上述设备系统的本地库(即系统参数集)进而获取相关内存信息,而不需要获取系统的最高访问权限,提高了内存分类效率。同时访问过程中对目标应用的配置模式没有限定,且按照应用中的每个插件具备的特性输出内存信息,提高了对插件化应用的内存分类通用性以及内存优化效率。
请参见图4,是本发明实施例提供的另一种数据获取方法的流程示意图。如图4所示,所述方法可以包括:
步骤S201,创建源码工程,所述源码工程中包括所述开放源代码;
具体的,创建一个AOSP(安卓开放源代码项目)工程,所述AOSP工程将开发环境与编译环境分离开,可以提高开发效率,且所述AOSP工程中包括设备系统(比如安卓系统)的源代码。
步骤S202,将所述源码工程中的所述开放源代码链接到开发工程中,基于所述开发环境从所述开放源代码中获取所述设备系统对应的头文件;
具体的,建立一个AS(AndroidStudio)工程作为开发环境,通过软链接将AOSP工程中的源代码链接到AS工程中,同时将上述ART的头文件和依赖的其他库头文件链接到上述AS工程中,进而从所述AS工程中获取上述ART的头文件(即设备系统对应的头文件)。
步骤S203,基于所述开发环境编译初始动态库,并根据所述头文件为所述初始动态库编译访问接口,将包含所述访问接口的初始动态库确定为所述目标动态库;
具体的,基于上述AS工程提供的开发环境编译上述初始动态库,将上述ART头文件编译到上述初始动态库中,以在所述初始动态库中编译访问上述系统参数集的访问接口,将编译了头文件的具备上述访问系统参数集的初始动态库称之为所述目标动态库。
步骤S204,基于所述目标动态库所提供的访问接口,在所述目标应用中访问所述设备系统的系统参数集,所述系统参数集中包括所述设备系统中所有应用对应的内存信息;
其中,所述步骤S204的具体实现方式请参见图3对应的实施例中对步骤S103所作的描述。
步骤S205,获取所述目标应用对应的所述标识信息,所述标识信息中包括所述目标应用对应的目标内存地址;
具体的,获取上述目标应用对应的标识信息,所述标识信息是通过所述目标应用的插件对应的引用路径所获取到的,所述标识信息中包括所述目标应用对应的内存地址,即所述目标内存地址。
步骤S206,在所述目标应用中访问所述系统参数集,以获取与所述目标内存地址对应的内存信息,并将获取到的与所述目标内存地址相匹配的内存信息确定为所述目标内存信息;
具体的,通过上述目标应用对应的目标内存地址访问所述系统参数集,以获取与所述目标内存地址相匹配的内存信息,并将获取到的与所述目标内存地址相匹配的内存信息确定为所述目标内存信息。
本发明实施例基于设备系统对应的开放源代码编译目标动态库;将所述目标动态库集成到插件化的目标应用中;基于所述目标动态库所提供的访问接口,在所述目标应用中访问所述设备系统的系统参数集;基于所述目标应用的插件化的特性获取所述目标应用对应的标识信息,根据所述标识信息在所述系统参数集中获取与所述目标应用对应的目标内存信息。由此可见,在上述目标应用中集成了所述目标动态库之后,通过集成了所述目标动态库的所述目标应用可以直接访问上述设备系统的本地库(即系统参数集)进而获取相关内存信息,而不需要获取系统的最高访问权限,提高了内存分类效率。同时访问过程中对目标应用的配置模式没有限定,且按照应用中的每个插件具备的特性输出内存信息,提高了对插件化应用的内存分类通用性以及内存优化效率。
请参见图5,是本发明实施例提供的一种访问系统参数集的原理示意图。如图5所示,通过板配置(BoardConfig)编译系统的变量设置,其中板配置的名称一般为BoardConfig.mk,进而输入到系统的变量规则定义(main.mk,指编译系统的主导文件),将设置好的变量通过make(一种指令,指读入一个名为makefile的文件,然后执行这个文件中指定的指令)指令读入到安卓规则定义(android.mk),在所述android.mk中引用上述ART(虚拟机)的头文件以在设备系统的本地库中动态链接上述目标应用对应的内存信息,即获取上述目标应用对应的内存信息,将获取到的所述目标应用对应的内存信息称之为目标内存信息。其中,可以通过上述安卓规则定义(android.mk)对标准规则定义中的规则进行显式引用。
参见图6,是本发明实施例提供的一种编译目标动态库的场景示意图。如图6所示,通过上述创建的安卓开放源代码项目(即AOSP工程),将开发环境与编译环境分离开,通过AOSP工程中的系统源代码为安卓编译模块提供编译内容,通过软链接将编译环境中的源代码(如图6所示,即编码相关代码文件)链接到开发环境(AS工程)中,即开发相关代码文件,通过安卓虚拟机(ART)中的头文件,基于所述开发环境编译出所述目标动态库。其中,上述软链接又称为符号链接,指一个文件包含了另一个文件的路径名,所述另一个文件可以是任意文件或目录,可以链接不同文件系统的文件,软链接文件只是其源文件的一个标记,当删除了源文件后,链接文件不能独立存在,虽然仍保留文件名,但却不能再查看软链接文件的内容。如图6所示,所述安卓集成开发工具即是AS(Android Studio,即一种安卓的开发环境),其提供了集成的Android开发工具,该开发工具用于安卓系统相关的开发和调试。
请参见图7,是本发明实施例提供的一种标识信息获取方法的流程示意图。如图7所示,所述方法可以包括:
步骤S301,检测所述目标应用对应的加载源;
具体的,由于应用了插件化的应用,比如上述目标应用,其相较于其他插件都是相对独立的,换言之,也就是每个插件对应的内存信息也是相对独立的。绝大多数插件化的实现原理是类似的,其中,每个插件是由DexclassLoader(类加载器)加载的,每个DexclassLoader都会在ART(虚拟机)上对应有一个本地的classLoader(类加载器)。在一般情况下,应用程序不需要创建一个全新的classloader对象,而是使用当前环境已经存在的classLoader,因为java的运行(runtime)环境在初始化时,其内部会创建一个classLoader对象用于加载运行所需的各种java类。每个ART的对象(即每个插件应用)会包含classLoader的信息,即是指,可以通过ART的classLoader来区分不同插件对应的内存。由此,可以知道,首先需要检测上述目标应用对应的加载源是否为其对应的DexclassLoader。
步骤S302,若所述加载源为所述目标应用对应的类加载器,则获取所述设备系统的插件入口对应的类,并通过所述插件入口对应的类确定入口函数以及成员变量;
具体的,若检测到上述目标应用对应的类加载器为其对应的DexclassLoader,且该DexclassLoader对应在ART上有一个classloader,则获取所述设备系统的插件入口对应的ActivityThread(指一个“类”),即所述ActivityThread为所述目标应用对应的程序入口,且目标应用中自定义的四大组件均为插件CL(插件制作与使用)加载的。每个应用对应有一个虚拟机,即上述目标应用对应也有一个虚拟机,获取所述目标应用对应的虚拟机的ActivityThread,通过ActivityThread确定所述目标应用对应的虚拟机的main(主函数)入口函数以及ActivityThread中的成员变量。
步骤S303,根据所述入口函数以及所述成员变量确定所述锚定点,所述锚定点用于区别所述目标应用对应的目标插件的引用路径,所述引用路径用于区分所述目标应用对应的内存信息;
具体的,通过上述确定的所述目标应用对应的虚拟机的main(主函数)入口函数以及ActivityThread中的成员变量确定锚定点,该锚定点也称为隔离锚定点。所述锚定点用于区别上述目标应用对应的插件(即目标插件)的引用路径,进而通过所述引用路径区别上述目标应用对应的内存信息。
步骤S304,将所述锚定点确定为遍历的起点,并获取中间节点;所述中间节点包括系统节点、所述目标应用对应的目标节点以及宿主节点;所述目标节点是指所述目标插件的引用路径对应的多个节点;所述系统节点是指所述设备系统中除了所述目标节点以及所述宿主节点之外的其他节点;所述宿主节点是指所述目标插件与所述设备系统对应的宿主进行交互时所获取到的节点;
具体的,将上述锚定点确定为遍历的起点,获取系统root(系统节点)作为所述中间节点,获取设备系统中的各个应用的插件root(插件节点)作为所述中间节点,获取上述目标插件与所述设备系统对应的宿主进行交互时获取到的宿主root(宿主节点)作为所述中间节点。其中,宿主就是需要能提供运行环境,给资源调用提供上下文环境,即宿主APK(AndroidPackage,安装包),作为应用的主工程所在,实现了一套插件的加载和管理的框架,插件都是依托于宿主的APK而存在的。插件可以理解为每个独立的功能模块封装为一个小的APK,可以通过在线配置和更新实现插件APK在宿主APK中的上线和下线,以及动态更新等功能。其中,插件化的优点有,无需重新安装APK就能升级应用功能,减少发版本频率,增加用户体验;提供一种快速修复线上BUG(故障)和更新的能力;按需加载不同的模块,实现灵活的功能配置,减少服务器对旧版本接口兼容压力;具备模块化、解耦合、并行开发等能力。
步骤S305,根据所述节点遍历规则确定所述中间节点的遍历顺序,根据所述遍历顺序,从所述起点开始,遍历所述中间节点;
具体的,根据上述节点遍历规则确定所述中间节点的遍历顺序,指从上述锚定点(可以称之为隔离锚定点,用于区别目标应用对应的内存信息)开始遍历,首先遍历上述中间节点中的宿主节点,其次遍历中间节点中的插件节点(即上述目标节点),最后遍历上述中间节点中的系统节点,直到遍历完上述中间节点。其中,上述中间节点中包括可能不是root节点(根节点)的点,因此当遍历上述宿主节点时,若是遍历至宿主object(对象),则需要cache(存储)起来。
步骤S306,根据处于遍历状态的中间节点的类型在所述中间节点中选择停止遍历节点;所述处于遍历状态的中间节点的类型包括所述宿主节点的类型或所述目标节点的类型或所述系统节点的类型;
具体的,确定遍历状态中的中间节点的类型,当确定遍历状态中的中间节点的类型为宿主节点的类型时,将上述中间节点中的插件object(对象)对应的中间节点以及上述锚定点作为上述停止遍历节点;当确定遍历状态中的中间节点的类型为插件节点(目标节点)的类型时,将上述中间节点中的宿主object(对象)对应的中间节点以及上述锚定点作为上述停止遍历节点;当确定遍历状态中的中间节点的类型为系统节点的类型时,将上述中间节点中的宿主object(对象)对应的中间节点以及上述插件object(对象)对应的中间节点作为上述停止遍历节点。
步骤S307,当遍历至所述目标节点时,获取所述目标节点对应的内存地址,将获取到的所述目标节点中的每一个目标节点对应的内存地址统称为目标内存地址;
具体的,当遍历至上述中间节点中的插件节点(即目标节点)时,根据上述插件节点对应内存引用的引用地址确定上述目标节点对应的内存地址,遍历至上述插件节点中的每一个节点都可以获取其对应的内存地址,将上述通过遍历得到的,全部插件节点中的每一个插件节点对应的内存地址整合,并将整合的全部插件节点对应的内存地址称之为目标内存地址。
步骤S308,当遍历至所述系统节点的类型所对应的停止遍历节点时,停止遍历,并基于所述目标内存地址生成所述目标应用对应的所述标识信息。
具体的,从上述宿主节点开始遍历,当遍历至宿主节点的类型对应的停止遍历节点时,继续从上述插件节点开始遍历,当遍历至插件节点的类型对应的停止遍历节点时,继续从上述系统节点开始遍历,当遍历至上述系统节点对应的停止遍历节点时,停止遍历的动作,并基于上述得到的所有目标节点对应的内存信息生成上述目标应用对应的标识信息,即所述标识信息中包括上述目标插件的引用路径对应的内存地址信息。
其中,上述标识信息获取的过程可以独立于通过集成了上述目标动态库的目标应用访问上述系统参数集的过程,即该两个过程可以单独实现。
请参见图8,是本发明实施例提供的一种遍历的场景示意图。如图8所示,当从上述宿主节点开始遍历时,若遍历至宿主object(对象)对应的中间节点,则继续遍历下一个中间节点;若遍历至插件object(对象)对应的中间节点,则停止遍历,并cache(存储)起来;若遍历至系统object(对象)对应的中间节点,则继续遍历下一个中间节点;若再次遍历至上述锚定点时,则停止遍历。其中,可以将停止遍历时遍历到的中间节点称之为上述停止遍历节点,比如宿主节点对应的停止遍历节点为上述插件object对应的中间节点以及上述锚定点。请参见图9,是本发明实施例提供的另一种遍历的场景示意图。如图9所示,当遍历完上述宿主节点,从上述插件节点开始遍历时,若遍历至宿主object(对象)对应的中间节点,则停止遍历;若遍历至插件object(对象)对应的中间节点,则继续遍历下一个中间节点;若遍历至系统object(对象)对应的中间节点,则继续遍历下一个中间节点;若再次遍历至上述锚定点时,则停止遍历。其中,可以将停止遍历时遍历到的中间节点称之为上述停止遍历节点,比如插件节点对应的停止遍历节点为上述宿主object对应的中间节点以及上述锚定点。请参见图10,是本发明实施例提供的另一种遍历的场景示意图。如图10所示,当遍历完上述各个插件节点,从上述系统节点开始遍历时,若遍历至宿主object(对象)对应的中间节点,则停止遍历;若遍历至插件object(对象)对应的中间节点,则停止遍历;若遍历至系统object(对象)对应的中间节点,则继续遍历下一个中间节点;若再次遍历至上述锚定点时,则继续遍历下一个中间节点。其中,可以将停止遍历时遍历到的中间节点称之为上述停止遍历节点,比如系统节点对应的停止遍历节点为上述宿主object对应的中间节点以及上述插件object对应的中间节点。
请参见图11,是本发明实施例提供的一种遍历的结构示意图。如图11所示,首先开始遍历节点对象(Root Objects),然后进行字节标记(Mark Bitmap),将进行字节标记的节点输入主栈(Main Stack)与副栈(Secondary Stack),其中,主栈(Main Stack)用于当前遍历类型的记录,比如,记录宿主对象(object)时,遍历到的宿主对象(object)。副栈(Secondary Stack)用于当前非遍历类型的记录,防止信息丢失,比如记录宿主对象(object)时,遍历到的插件对象(object)。进一步地,将进行节点的字节标记且已记录了遍历类型的节点对象(即上述中间节点)输入到引用对象(Referenced Objects),以获取遍历对象对应的引用对象,将所述引用对象再次输入字节标记(Mark Bitmap)进行标记,根据标记的结果进行中间节点的遍历进而生成上述目标应用对应的标识信息。
请参见图12,是本发明实施例提供的一种位图的结构示意图。如图12所示,包括了主空间(Main Space)、守护进程空间(Zygote Space)、像空间(Image Space)、大数据空间(Large Object Space),通过上述各个空间进行上述图11所述的目标应用对应的引用对象的字节标记。
请参见图13,是本发明实施例提供的一种字节的结构示意图。如图13所示,一般Object(对象)为32字节对齐的,而Large Object(大对象)为page size(4K,即4096个字节)对齐F(一种字节大小表示符号),作为上述节点对象的标记字节。其中,Bitmap(字节标记)中每4字节(表示对应的Object地址)最后一位标记对应对象(即上述节点对象)是否被遍历过,以避免重复遍历某一中间节点。
请参见图14,是本发明实施例提供的一种数据获取装置的结构示意图。如图14所示,该数据获取装置1可以包括:编译模块101、集成模块102、访问模块103和第一获取模块104;
编译模块101,用于基于设备系统对应的开放源代码编译目标动态库;
集成模块102,用于将所述目标动态库集成到目标应用中;所述目标应用是基于插件化的应用;
访问模块103,用于基于所述目标动态库所提供的访问接口,在所述目标应用中访问所述设备系统的系统参数集;所述系统参数集中包括所述设备系统中所有应用对应的内存信息;
第一获取模块104,用于获取所述目标应用对应的标识信息,根据所述标识信息在所述系统参数集中获取与所述目标应用对应的目标内存信息;所述目标应用对应的标识信息是基于所述目标应用的插件化的特性得到的。
其中,所述编译模块101、集成模块102、访问模块103和第一获取模块104的具体功能实现方式请参见图3对应的实施例中的步骤S101-步骤S104,这里不再进行赘述。
其中,所述编译模块101还包括创建单元1011和编译单元1012:
创建单元1011,用于创建源码工程;所述源码工程中包括所述开放源代码;
编译单元1012,用于将所述源码工程中的所述开放源代码链接到开发工程中,基于所述开发工程提供的开发环境编译所述目标动态库。
其中,所述创建单元1011的具体功能实现方式请参见图4对应的实施例中的步骤S201,所述编译单元1012的具体功能实现方式请参见图4对应的实施例中的步骤S202-步骤S203,这里不再进行赘述。
其中,所述编译单元1012还包括获取子单元10121和编译子单元10122:
获取子单元10121,用于基于所述开发环境从所述开放源代码中获取所述设备系统对应的头文件;
编译子单元10122,用于基于所述开发环境编译初始动态库,并根据所述头文件为所述初始动态库编译访问接口,将包含所述访问接口的初始动态库确定为所述目标动态库。
其中,所述获取子单元10121和编译子单元10122的具体功能实现方式请参见图4对应的实施例中的步骤S202-步骤S203,这里不再进行赘述。
其中,所述数据获取装置1还包括第二获取模块105和第一确定模块106:
第二获取模块105,用于获取所述目标应用对应的所述标识信息;所述标识信息中包括所述目标应用对应的目标内存地址;
第一确定模块106,用于在所述目标应用中访问所述系统参数集,以获取与所述目标内存地址对应的内存信息,并将获取到的与所述目标内存地址相匹配的内存信息确定为所述目标内存信息。
其中,所述第二获取模块105和第一确定模块106的具体功能实现方式请参见图4对应的实施例中的步骤S205-步骤S206,这里不再进行赘述。
其中,所述数据获取装置1还包括第二确定模块107、节点获取模块108和生成模块109:
第二确定模块107,用于确定所述目标应用对应的锚定点;所述锚定点用于区别所述目标应用对应的目标插件的引用路径,所述引用路径用于区分所述目标应用对应的内存信息;
节点获取模块108,用于将所述锚定点确定为遍历的起点,并获取中间节点;所述中间节点包括系统节点、所述目标应用对应的目标节点以及宿主节点;所述目标节点是指所述目标插件的引用路径对应的多个节点;所述系统节点是指所述设备系统中除了所述目标节点以及所述宿主节点之外的其他节点;所述宿主节点是指所述目标插件与所述设备系统对应的宿主进行交互时所获取到的节点;
生成模块109,用于从所述起点开始,通过节点遍历规则遍历所述目标节点、所述系统节点以及所述宿主节点,并根据遍历结果生成所述目标应用对应的标识信息;所述标识信息是通过遍历到的所述目标节点所获取的。
其中,所述第二确定模块107的具体功能实现方式请参见图7对应的实施例中的步骤S301-步骤S303,所述节点获取模块108的具体功能实现方式请参见图7对应的实施例中的步骤S304,所述生成模块109的具体功能实现方式请参见图7对应的实施例中的步骤S305-步骤S308,这里不再进行赘述。
其中,所述第二确定模块107还包括第一获取单元1071和确定单元1072:
第一获取单元1071,用于获取所述设备系统的插件入口对应的类,并通过所述插件入口对应的类确定入口函数以及成员变量;
确定单元1072,用于根据所述入口函数以及所述成员变量确定所述锚定点。
其中,所述第一获取单元1071和确定单元1072的具体功能实现方式请参见图7对应的实施例中的步骤S302-步骤S303,这里不再进行赘述。
其中,所述生成模块109还包括遍历单元1091、第二获取单元1092和生成单元1093:
遍历单元1091,用于根据所述节点遍历规则确定所述中间节点的遍历顺序,根据所述遍历顺序,从所述起点开始,遍历所述中间节点;
选择单元1092,用于根据处于遍历状态的中间节点的类型在所述中间节点中选择停止遍历节点;所述处于遍历状态的中间节点的类型包括所述宿主节点的类型或所述目标节点的类型或所述系统节点的类型;
第二获取单元1093,用于当遍历至所述目标节点时,获取所述目标节点对应的内存地址,将获取到的所述目标节点中的每一个目标节点对应的内存地址统称为目标内存地址;
生成单元1094,用于当遍历至所述系统节点的类型所对应的停止遍历节点时,停止遍历,并基于所述目标内存地址生成所述目标应用对应的所述标识信息。
其中,所述遍历单元1091、选择单元1092、第二获取单元1092和生成单元1093的具体功能实现方式请参见图7对应的实施例中的步骤S305-步骤S308,这里不再进行赘述。
其中,所述数据获取装置1还包括检测模块110和判定模块111:
检测模块110,用于检测所述目标应用对应的加载源;
判定模块111,用于若所述加载源为所述目标应用对应的类加载器,则执行所述目标应用对应的锚定点的步骤。
其中,所述检测模块110和判定模块111的具体功能实现方式请参见图7对应的实施例中的步骤S301-步骤S302,这里不再进行赘述。
本发明实施例基于设备系统对应的开放源代码编译目标动态库;将所述目标动态库集成到插件化的目标应用中;基于所述目标动态库所提供的访问接口,在所述目标应用中访问所述设备系统的系统参数集;基于所述目标应用的插件化的特性获取所述目标应用对应的标识信息,根据所述标识信息在所述系统参数集中获取与所述目标应用对应的目标内存信息。由此可见,在上述目标应用中集成了所述目标动态库之后,通过集成了所述目标动态库的所述目标应用可以直接访问上述设备系统的本地库(即系统参数集)进而获取相关内存信息,而不需要获取系统的最高访问权限,提高了内存分类效率。同时访问过程中对目标应用的配置模式没有限定,且按照应用中的每个插件具备的特性输出内存信息,提高了对插件化应用的内存分类通用性以及内存优化效率。
请参见图15,是本发明实施例提供的另一种数据获取装置的结构示意图。参见图15,所述数据获取装置1000可以包括:处理器1001,网络接口1004和存储器1005,此外,所述数据获取装置1000还可以包括:用户接口1003,和至少一个通信总线1002。其中,通信总线1002用于实现这些组件之间的连接通信。其中,用户接口1003可以包括显示屏(Display)、键盘(Keyboard),可选用户接口1003还可以包括标准的有线接口、无线接口。网络接口1004可选的可以包括标准的有线接口、无线接口(如WI-FI接口)。存储器1005可以是高速RAM存储器,也可以是非不稳定的存储器(non-volatile memory),例如至少一个磁盘存储器。存储器1005可选的还可以是至少一个位于远离前述处理器1001的存储装置。如图15所示,作为一种计算机存储介质的存储器1005中可以包括操作系统、网络通信模块、用户接口模块以及设备控制应用程序。
在图15所示的数据获取装置1000中,网络接口1004可提供网络通讯功能;而用户接口1003主要用于为用户提供输入的接口;而处理器1001可以用于调用存储器1005中存储的设备控制应用程序,以实现前文图3和图4中任一个所对应实施例中对所述数据获取方法的描述。
应当理解,本发明实施例中所描述的数据获取装置1000可执行前文图3和图4中任一个所对应实施例中对所述数据获取方法的描述,也可执行前文图14所对应实施例中对所述数据获取装置1的描述,在此不再赘述。另外,对采用相同方法的有益效果描述,也不再进行赘述。
此外,这里需要指出的是:本发明实施例还提供了一种计算机存储介质,且所述计算机存储介质中存储有前文提及的数据获取装置1所执行的计算机程序,且所述计算机程序包括程序指令,当所述处理器执行所述程序指令时,能够执行前文图3和图4任一个所对应实施例中对所述数据获取方法的描述,因此,这里将不再进行赘述。另外,对采用相同方法的有益效果描述,也不再进行赘述。对于本发明所涉及的计算机存储介质实施例中未披露的技术细节,请参照本发明方法实施例的描述。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,所述的存储介质可为磁碟、光盘、只读存储记忆体(Read-Only Memory,ROM)或随机存储记忆体(Random AccessMemory,RAM)等。
以上所揭露的仅为本发明较佳实施例而已,当然不能以此来限定本发明之权利范围,因此依本发明权利要求所作的等同变化,仍属本发明所涵盖范围。
Claims (14)
1.一种数据获取方法,其特征在于,包括:
基于设备系统对应的开放源代码编译目标动态库;
将所述目标动态库集成到目标应用中;所述目标应用是基于插件化的应用;
基于所述目标动态库所提供的访问接口,在所述目标应用中访问所述设备系统的系统参数集;所述系统参数集中包括所述设备系统中所有应用对应的内存信息;
确定所述目标应用对应的锚定点;所述锚定点用于区别所述目标应用对应的目标插件的引用路径,所述引用路径用于区分所述目标应用对应的内存信息;
将所述锚定点确定为遍历的起点,并获取中间节点;所述中间节点包括系统节点、所述目标应用对应的目标节点以及宿主节点;所述目标节点是指所述目标插件的引用路径对应的多个节点;所述系统节点是指所述设备系统中除了所述目标节点以及所述宿主节点之外的其他节点;所述宿主节点是指所述目标插件与所述设备系统对应的宿主进行交互时所获取到的节点;
从所述起点开始,通过节点遍历规则遍历所述目标节点、所述系统节点以及所述宿主节点,并根据遍历结果生成所述目标应用对应的标识信息;所述标识信息是通过遍历到的所述目标节点所获取的;
获取所述目标应用对应的标识信息,根据所述标识信息在所述系统参数集中获取与所述目标应用对应的目标内存信息;所述目标应用对应的标识信息是基于所述目标应用的插件化的特性得到的。
2.根据权利要求1所述的方法,其特征在于,所述基于设备系统对应的开放源代码编译目标动态库,包括:
创建源码工程;所述源码工程中包括所述开放源代码;
将所述源码工程中的所述开放源代码链接到开发工程中,基于所述开发工程提供的开发环境编译所述目标动态库。
3.根据权利要求2任一项所述的方法,其特征在于,所述基于所述开发工程提供的开发环境编译所述目标动态库,包括:
基于所述开发环境从所述开放源代码中获取所述设备系统对应的头文件;
基于所述开发环境编译初始动态库,并根据所述头文件为所述初始动态库编译访问接口,将包含所述访问接口的初始动态库确定为所述目标动态库。
4.根据权利要求1所述的方法,其特征在于,还包括:
获取所述目标应用对应的所述标识信息;所述标识信息中包括所述目标应用对应的目标内存地址;
在所述目标应用中访问所述系统参数集,以获取与所述目标内存地址对应的内存信息,并将获取到的与所述目标内存地址相匹配的内存信息确定为所述目标内存信息。
5.根据权利要求1所述的方法,其特征在于,所述从所述起点开始,通过节点遍历规则遍历所述目标节点以及所述系统节点,并根据遍历结果生成所述目标应用对应的标识信息,包括:
根据所述节点遍历规则确定所述中间节点的遍历顺序,根据所述遍历顺序,从所述起点开始,遍历所述中间节点;
根据处于遍历状态的中间节点的类型在所述中间节点中选择停止遍历节点;所述处于遍历状态的中间节点的类型包括所述宿主节点的类型或所述目标节点的类型或所述系统节点的类型;
当遍历至所述目标节点时,获取所述目标节点对应的内存地址,将获取到的所述目标节点中的每一个目标节点对应的内存地址统称为目标内存地址;
当遍历至所述系统节点的类型所对应的停止遍历节点时,停止遍历,并基于所述目标内存地址生成所述目标应用对应的所述标识信息。
6.根据权利要求1所述的方法,其特征在于,还包括:
检测所述目标应用对应的加载源;
若所述加载源为所述目标应用对应的类加载器,则执行所述目标应用对应的锚定点的步骤。
7.根据权利要求1所述的方法,其特征在于,所述确定所述目标应用对应的锚定点,包括:
获取所述设备系统的插件入口对应的类,并通过所述插件入口对应的类确定入口函数以及成员变量;
根据所述入口函数以及所述成员变量确定所述锚定点。
8.根据权利要求1所述的方法,其特征在于,所述节点遍历规则包括:
所述宿主节点的遍历优先级大于所述目标节点的遍历优先级,所述目标节点的遍历优先级大于所述系统节点的遍历优先级。
9.一种数据获取装置,其特征在于,包括:
编译模块,用于基于设备系统对应的开放源代码编译目标动态库;
集成模块,用于将所述目标动态库集成到目标应用中;所述目标应用是基于插件化的应用;
访问模块,用于基于所述目标动态库所提供的访问接口,在所述目标应用中访问所述设备系统的系统参数集;所述系统参数集中包括所述设备系统中所有应用对应的内存信息;
第二确定模块,用于确定所述目标应用对应的锚定点;所述锚定点用于区别所述目标应用对应的目标插件的引用路径,所述引用路径用于区分所述目标应用对应的内存信息;
节点获取模块,用于将所述锚定点确定为遍历的起点,并获取中间节点;所述中间节点包括系统节点、所述目标应用对应的目标节点以及宿主节点;所述目标节点是指所述目标插件的引用路径对应的多个节点;所述系统节点是指所述设备系统中除了所述目标节点以及所述宿主节点之外的其他节点;所述宿主节点是指所述目标插件与所述设备系统对应的宿主进行交互时所获取到的节点;
生成模块,用于从所述起点开始,通过节点遍历规则遍历所述目标节点、所述系统节点以及所述宿主节点,并根据遍历结果生成所述目标应用对应的标识信息;所述标识信息是通过遍历到的所述目标节点所获取的;
第一获取模块,用于获取所述目标应用对应的标识信息,根据所述标识信息在所述系统参数集中获取与所述目标应用对应的目标内存信息;所述目标应用对应的标识信息是基于所述目标应用的插件化的特性得到的。
10.根据权利要求9所述的装置,其特征在于,所述编译模块还包括:
创建单元,用于创建源码工程;所述源码工程中包括所述开放源代码;
编译单元,用于将所述源码工程中的所述开放源代码链接到开发工程中,基于所述开发工程提供的开发环境编译所述目标动态库。
11.根据权利要求10所述的装置,其特征在于,所述编译单元还包括:
获取子单元,用于基于所述开发环境从所述开放源代码中获取所述设备系统对应的头文件;
编译子单元,用于基于所述开发环境编译初始动态库,并根据所述头文件为所述初始动态库编译访问接口,将包含所述访问接口的初始动态库确定为所述目标动态库。
12.根据权利要求9所述的装置,其特征在于,所述数据获取装置还包括:
第二获取模块,用于获取所述目标应用对应的所述标识信息;所述标识信息中包括所述目标应用对应的目标内存地址;
第一确定模块,用于在所述目标应用中访问所述系统参数集,以获取与所述目标内存地址对应的内存信息,并将获取到的与所述目标内存地址相匹配的内存信息确定为所述目标内存信息。
13.一种数据获取装置,其特征在于,包括:处理器和存储器;
所述处理器和存储器相连,其中,所述存储器用于存储程序代码,所述处理器用于调用所述程序代码,以执行如权利要求1-8任一项所述的方法。
14.一种计算机存储介质,其特征在于,所述计算机存储介质存储有计算机程序,所述计算机程序包括程序指令,所述程序指令当被处理器执行时,执行如权利要求1-8任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910173438.2A CN109947407B (zh) | 2019-03-07 | 2019-03-07 | 一种数据获取方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910173438.2A CN109947407B (zh) | 2019-03-07 | 2019-03-07 | 一种数据获取方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109947407A CN109947407A (zh) | 2019-06-28 |
CN109947407B true CN109947407B (zh) | 2022-07-26 |
Family
ID=67009304
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910173438.2A Active CN109947407B (zh) | 2019-03-07 | 2019-03-07 | 一种数据获取方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109947407B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111063432B (zh) * | 2019-12-13 | 2024-04-16 | 深圳开立生物医疗科技股份有限公司 | 一种超声数据处理方法、装置及超声设备和存储介质 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107908432A (zh) * | 2017-11-17 | 2018-04-13 | 深圳泉眼体育运营管理有限公司 | 应用程序的配置方法及装置、终端设备及可读存储介质 |
Family Cites Families (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6058264A (en) * | 1997-03-31 | 2000-05-02 | International Business Machines Corporation | Extender smart guide for creating and modifying extenders |
US6996832B2 (en) * | 2001-05-30 | 2006-02-07 | Bea Systems, Inc. | System and method for software component plug-in framework |
US7991427B2 (en) * | 2006-09-13 | 2011-08-02 | Mformation Technologies, Inc. | System and method to provide application management on wireless data terminals by means of device management agent and dynamic link libraries |
JP5200065B2 (ja) * | 2010-07-02 | 2013-05-15 | 富士フイルム株式会社 | コンテンツ配信システム、方法およびプログラム |
CN105022630B (zh) * | 2015-06-30 | 2019-01-22 | 中标软件有限公司 | 一种组件管理系统及组件管理方法 |
CN105893094B (zh) * | 2016-03-31 | 2019-05-03 | 百度在线网络技术(北京)有限公司 | 应用程序插件化的实现方法和装置 |
CN107122247B (zh) * | 2017-04-27 | 2021-11-02 | 腾讯科技(深圳)有限公司 | 一种静态占用图片的检测方法和装置 |
CN108446149B (zh) * | 2018-02-28 | 2021-07-20 | 北京凌宇智控科技有限公司 | 一种第三方动态库接口拦截方法及系统 |
CN109189374B (zh) * | 2018-06-22 | 2020-08-28 | 北京大学 | 基于对象引用链的对象构造代码生成方法及系统 |
CN109189496B (zh) * | 2018-08-03 | 2021-04-23 | 平安科技(深圳)有限公司 | 应用程序的动态库信息获取方法及装置 |
-
2019
- 2019-03-07 CN CN201910173438.2A patent/CN109947407B/zh active Active
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107908432A (zh) * | 2017-11-17 | 2018-04-13 | 深圳泉眼体育运营管理有限公司 | 应用程序的配置方法及装置、终端设备及可读存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN109947407A (zh) | 2019-06-28 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US8458681B1 (en) | Method and system for optimizing the object code of a program | |
US7900198B2 (en) | Method and system for parameter profile compiling | |
US8429632B1 (en) | Method and system for debugging merged functions within a program | |
US20190004774A1 (en) | Automated source code adaption to inject features between platform versions | |
CN111740948B (zh) | 数据包发布方法、动态更新方法、装置、设备及介质 | |
CN108614702B (zh) | 字节码优化方法及装置 | |
US20110126179A1 (en) | Method and System for Dynamic Patching Software Using Source Code | |
CN106648755B (zh) | 一种在安卓art环境中动态加载dex的方法及装置 | |
CN109032631A (zh) | 应用程序补丁包获取方法、装置、计算机设备及存储介质 | |
US8397217B2 (en) | Integrating templates into tests | |
CN111651169B (zh) | 基于web容器的区块链智能合约运行方法及系统 | |
CN109542464B (zh) | IoT设备脚本程序的开发部署系统、方法及存储介质 | |
CN109947407B (zh) | 一种数据获取方法及装置 | |
CN113127329B (zh) | 脚本调试方法、装置及计算机存储介质 | |
CN108304230B (zh) | 调整应用属性的实现方法、装置及可读存储介质 | |
CN110826074A (zh) | 一种应用漏洞检测方法、装置和计算机可读存储介质 | |
CN108614704B (zh) | 代码编译方法及装置 | |
CN112596751B (zh) | 应用程序安装包的编译方法、终端、服务器及存储介质 | |
US20040216140A1 (en) | Method and system for accessing system operations through an interface layer | |
RU2521265C2 (ru) | Система и способ автоматической обработки системных ошибок программного обеспечения | |
CN116032809B (zh) | 使用Wasm的网络协议分析方法及系统 | |
CN113608996B (zh) | 一种镜像编译测试方法、系统、装置及可读存储介质 | |
US10437659B2 (en) | Built-in context error variables | |
CN109426601B (zh) | 一种对程序进行无状态检测的方法和装置 | |
CN113590224A (zh) | 服务器的检测方法、装置、电子设备及存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |