应用程序修复方法、装置和系统与流程

文档序号:14609178发布日期:2018-06-05 20:27阅读:181来源:国知局
应用程序修复方法、装置和系统与流程

本发明涉及信息维护技术领域,尤其涉及一种应用程序修复方法、装置和系统。



背景技术:

随着智能移动终端技术的不断发展,目前基于安卓系统的机型越来越丰富,使得安卓机型体现出了严重的碎片化。对于在移动终端上所安装的应用程序来说,由于这种机型的碎片化,需要提供更多样化的能够与机型适配的应用程序版本,但这种多样化极易导致应用程序运行中出现文案、图片上的错误。

在现有技术中,若需要对这种应用程序中的错误进行修复,程序员可以采用下发新的应用程序版本的方式。但在实际操作上,由于提供应用程序的应用市场较多,需要在每一个应用市场进行这种版本更新,操作繁琐而且成本较大。尤其是在所需修复的错误往往仅仅是一句文案或者一个按钮颜色这种小错误时,这种成本就显得更加高昂。



技术实现要素:

本发明旨在至少在一定程度上解决相关技术中的技术问题之一。

为此,本发明的第一个目的在于提出一种应用程序修复方法,以实现在安卓系统中进行应用程序修复时,避免采用下发新的应用程序版本的方式,以节省成本。

本发明的第二个目的在于提出一种应用程序修复装置。

本发明的第三个目的在于提出另一种应用程序修复装置。

本发明的第四个目的在于提出一种非临时性计算机可读存储介质。

本发明的第五个目的在于提出一种计算机程序产品。

本发明的第六个目的在于提出一种应用程序修复系统。

为达上述目的,本发明第一方面实施例提出了一种应用程序修复方法,包括:

启动应用程序,并将资源文件的列表加载至内存中;

在根据所加载的资源文件的列表,对所述资源文件执行预设处理流程时,通过钩子机制截获目标方法;其中,所述目标方法用于对服务器端所指示的待修复资源进行处理;

当所述应用程序执行到所述目标方法时,利用从所述服务器端所获取到的目标资源替换所述待修复资源,以实现对所述应用程序的修复。

本发明实施例的应用程序修复方法,通过启动应用程序,并将资源文件的列表加载至内存中,进而在根据所加载的资源文件的列表,对资源文件执行预设处理流程时,通过钩子机制截获对服务器端所指示的待修复资源进行处理的目标方法,当应用程序执行到目标方法时,利用从服务器端所获取到的目标资源替换该待修复资源,以实现对应用程序的修复。可见,在修复过程中精确到方法级别进行修复,同时,无需采用新的应用程序版本,解决了现有技术中应用程序修复成本较高的技术问题。

为达上述目的,本发明第二方面实施例提出了一种应用程序修复装置,包括:

加载模块,用于启动应用程序,并将资源文件的列表加载至内存中;

截获模块,用于在根据所加载的资源文件的列表,对所述资源文件执行预设处理流程时,通过钩子机制截获目标方法;其中,所述目标方法用于对服务器端所指示的待修复资源进行处理;

替换模块,用于当所述应用程序执行到所述目标方法时,利用从所述服务器端所获取到的目标资源替换所述待修复资源,以实现对所述应用程序的修复。

本发明实施例的应用程序修复装置,通过加载模块在将资源文件的列表加载至内存中之后,进而在根据所加载的资源文件的列表,对资源文件执行预设处理流程时,截获模块通过钩子机制截获对服务器端所指示的待修复资源进行处理的目标方法,当应用程序执行到目标方法时,替换模块利用从服务器端所获取到的目标资源替换该待修复资源,以实现对应用程序的修复。可见,在修复过程中精确到方法级别进行修复,同时,无需采用新的应用程序版本,解决了现有技术中应用程序修复成本较高的技术问题。

为达上述目的,本发明第三方面实施例提出了另一种装置,包括:处理器;用于存储所述处理器可执行指令的存储器;其中,所述处理器被配置为:启动应用程序,并将资源文件的列表加载至内存中;在根据所加载的资源文件的列表,对所述资源文件执行预设处理流程时,通过钩子机制截获对服务器端所指示的待修复资源进行处理的目标方法;当所述应用程序执行到所述目标方法时,利用从所述服务器端所获取到的目标资源替换所述待修复资源,以实现对所述应用程序的修复。

为了实现上述目的,本发明第四方面实施例提出了一种非临时性计算机可读存储介质,当所述存储介质中的指令由终端的处理器被执行时,使得终端能够执行一种应用程序修复方法,所述方法包括:启动应用程序,并将资源文件的列表加载至内存中;在根据所加载的资源文件的列表,对所述资源文件执行预设处理流程时,通过钩子机制截获对服务器端所指示的待修复资源进行处理的目标方法;当所述应用程序执行到所述目标方法时,利用从所述服务器端所获取到的目标资源替换所述待修复资源,以实现对所述应用程序的修复。

为了实现上述目的,本发明第五方面实施例提出了一种计算机程序产品,当所述计算机程序产品中的指令处理器执行时,执行一种应用程序修复方法,所述方法包括:启动应用程序,并将资源文件的列表加载至内存中;在根据所加载的资源文件的列表,对所述资源文件执行预设处理流程时,通过钩子机制截获对服务器端所指示的待修复资源进行处理的目标方法;当所述应用程序执行到所述目标方法时,利用从所述服务器端所获取到的目标资源替换所述待修复资源,以实现对所述应用程序的修复。

为了实现上述目的,本发明第六方面实施例提出了一种应用程序修复系统,包括:服务器端和运行有应用程序的终端;

所述服务器端,用于推送修复信息,所述修复信息包括待修复资源的标识和目标资源;

所述终端,用于启动所述应用程序,并将资源文件的列表加载至内存中;在根据所加载的资源文件的列表,对所述资源文件执行预设处理流程时,通过钩子机制截获对所述服务器端所指示的待修复资源进行处理的目标方法;当所述应用程序执行到所述目标方法时,利用从所述服务器端所获取到的目标资源替换所述待修复资源,以实现对所述应用程序的修复。

本发明附加的方面和优点将在下面的描述中部分给出,部分将从下面的描述中变得明显,或通过本发明的实践了解到。

附图说明

本发明上述的和/或附加的方面和优点从下面结合附图对实施例的描述中将变得明显和容易理解,其中:

图1为本发明实施例所提供的一种应用程序修复方法的流程示意图;

图2为应用程序修复系统的结构示意图;

图3为终端22执行应用程序修复方法的流程示意图;

图4为本发明实施例提供的一种应用程序修复装置的结构示意图;以及

图5为本发明实施例所提供的又一种应用程序修复装置的流程示意图。

具体实施方式

下面详细描述本发明的实施例,所述实施例的示例在附图中示出,其中自始至终相同或类似的标号表示相同或类似的元件或具有相同或类似功能的元件。下面通过参考附图描述的实施例是示例性的,旨在用于解释本发明,而不能理解为对本发明的限制。

下面参考附图描述本发明实施例的应用程序修复方法、装置和系统。

图1为本发明实施例所提供的一种应用程序修复方法的流程示意图。

目前基于安卓系统的机型越来越丰富,使得安卓机型体现出了严重的碎片化。对于在移动终端上所安装的应用程序来说,由于这种机型的碎片化,需要提供更多样化的能够与机型适配的应用程序版本,但这种多样化极易导致应用程序运行中出现文案、图片上的错误。在对这种错误进行修改时,往往采用下发补丁包或者是下发新版本的方式,但这些方式在针对文案、图片这类错误来说,相对成本较高。

针对这一问题,本发明实施例提供了一种应用程序修复方法,以实现在应用程序不间断运行时,进需要对应用程序推送较少的信息,便可以实现对应用程序的修复,不会对应用程序使用者的使用过程造成影响,从而在节省了应用程序修复成本的同时提高了应用程序使用者的体验,如图1所示,该应用程序修复方法包括以下步骤:

步骤101,启动应用程序,并将资源文件的列表加载至内存中。

具体地,当应用程序中存在文案或者图片的资源配置上的不恰当或者需要进行改动时,服务器端在查询到需要进行修复的待修复资源的标识之后,配备修复后的目标资源,生成修复信息。进而通过推送(Push)的方式将修复信息下发至终端的应用程序。从而终端在启动应用程序之后,可以通过服务器端与终端之间接口获取到该修复信息,若确定运行所述应用程序的终端未存储有所述目标资源,则在所述目标资源通过校验后存储于所述终端的内存中。其中,修复信息包括待修复资源的标识和目标资源。

终端启动应用程序之后,通过反射获取到终端本地的R.string,R.drawable等资源文件列表,并将获取到的资源文件列表加载到内存中。

步骤102,在根据所加载的资源文件的列表,对资源文件执行预设处理流程时,通过钩子机制截获目标方法。

其中,所述目标方法用于对服务器端所指示的待修复资源进行处理;预设处理流程可以包括对资源文件进行设置和/或获取。

通过钩子(hooker)截获对待修复资源进行处理的目标类的目标方法,将所截获的目标类的目标方法传入钩子对象。具体地,可以通过Dexposed框架下,DexposedBridge类的findAndHookMethod方法作为钩子截获目标类的目标方法,这里所截获的目标方法可以是某个类的单一函数,也可以是系统函数。将函数传入钩子对象,钩子对象可以通过XC_MethodHook或者XC_MethodReplacement构造。对于单一函数或系统函数而言,有三个注入点可供选择:函数执行前注入(before),函数执行后注入(after)以及替换函数执行的代码段(replace)。这三个注入点分别对应于抽象类XC_MethodHook及其子类XC_MethodReplacement中的函数。

步骤103,当应用程序执行到目标方法时,利用从服务器端所获取到的目标资源替换待修复资源,以实现对应用程序的修复。

具体地,当所述应用程序执行到所述目标类的目标方法时,根据所述服务器端所指示的注入点,对传入所述钩子对象的目标类的目标方法注入所述目标资源。在具体利用目标资源进行替换时,若通过钩子机制所截获的目标方法为单一函数,利用目标资源替换单一函数所处理的待修复资源;若通过钩子机制所截获的目标方法为系统函数,例如:TypedArray类的getText()和getString(),则需要遍历资源文件R.sring中的字符串查询待修复资源,利用目标资源替换所查询到的待修复资源。并在替换完成后,释放掉不相关的资源索引。

本实施例中,通过启动应用程序,并将资源文件的列表加载至内存中,进而在根据所加载的资源文件的列表,对资源文件执行预设处理流程时,通过钩子机制截获对服务器端所指示的待修复资源进行处理的目标方法,当应用程序执行到目标方法时,利用从服务器端所获取到的目标资源替换该待修复资源,以实现对应用程序的修复。可见,在修复过程中精确到方法级别进行修复,同时,无需采用新的应用程序版本,解决了现有技术中应用程序修复成本较高的技术问题。

为了清楚说明上一实施例,本实施例提供了一种应用程序修复系统,图2为应用程序修复系统的结构示意图,如图2所示,包括服务器端21和运行有应用程序的终端22。

服务器端21,用于推送修复信息,所述修复信息包括待修复资源的标识和目标资源。

具体地,当应用程序中存在文案或者图片的资源配置上的不恰当或者需要进行改动时,服务器端21在查询到需要进行修复的待修复资源的标识之后,配备修复后的目标资源,生成修复信息。进而通过推送的方式将修复信息下发至终端22的应用程序。从而终端在启动应用程序之后,可以通过服务器端21与终端22之间接口获取到该修复信息,若确定运行所述应用程序的终端22未存储有所述目标资源,则在所述目标资源通过校验后存储于所述终端的内存中。其中,修复信息包括待修复资源的标识和目标资源。

为了清楚说明终端22的执行过程,图3为终端22执行应用程序修复方法的流程示意图,如图3所示,方法包括:

步骤301,终端22启动应用程序(App),并将资源文件的列表加载至内存中。

步骤302,对资源文件执行包括资源设置或获取方法在内的预设处理流程过程中,根据资源修复列表,通过钩子机制截获需要加载待修复资源的目标方法。

其中,资源修复列表中记录有服务器端21所指示的待修复资源。

步骤303,判断所截获的目标方法是否需要进行修复,若是执行步骤304,否则执行步骤305。

当应用程序执行到目标方法时,判断所截获的目标方法是否需要进行修复,若待修复资源影响了目标方法的实现则一般情况下需要进行修复,利用从服务器端21所获取到的目标资源替换待修复资源。

步骤304,加载目标资源。

步骤305,加载该目标方法原有的资源。

本实施例中,通过启动应用程序,并将资源文件的列表加载至内存中,进而在根据所加载的资源文件的列表,对资源文件执行预设处理流程时,通过钩子机制截获对服务器端所指示的待修复资源进行处理的目标方法,当应用程序执行到目标方法时,利用从服务器端所获取到的目标资源替换该待修复资源,以实现对应用程序的修复。可见,在修复过程中精确到方法级别进行修复,同时,无需采用新的应用程序版本,解决了现有技术中应用程序修复成本较高的技术问题。

在本实施例中,应用程序集成了Dexposed框架,Dexposed框架是一种无侵入运行期面向切面编程(Aspect Oriented Programming,AOP)框架,可以实现AOP编程、插桩、热补丁、软件开发工具包(software development kit,SDK)钩子等功能。由于Dexposed的AOP实现是完全非侵入式的,没有使用任何注解处理器,编织器或者字节码重写器,从而应用程序集成Dexposed框架很简单,只需要在应用程序的初始化阶段加载一个很小的JNI库就可以,这个加载操作已经封装在DexposedBridge函数库里面的canDexposed函数中。本实施例中的应用程序集成了Dexposed框架之后,钩子机制可以实现方法级粒度的截获,因此,在进行修复时,也相应可以实现方法级粒度的修复,相较于其他现有技术中的方案,无需补丁包或新版本,更加轻量简单。

为了实现上述实施例,本发明还提出一种应用程序修复装置。

图4为本发明实施例提供的一种应用程序修复装置的结构示意图。

如图4所示,该应用程序修复装置包括:加载模块41、截获模块42和替换模块43。

加载模块41,用于启动应用程序,并将资源文件的列表加载至内存中。

具体地,加载模块41,具体用于启动所述应用程序时,通过反射方式获取到运行所述应用程序的终端所存储资源文件的列表;将所获取到的资源文件的列表加载至内存中。

截获模块42,用于在根据所加载的资源文件的列表,对所述资源文件执行预设处理流程时,通过钩子机制截获目标方法。

其中,目标方法用于对服务器端所指示的待修复资源进行处理。

替换模块43,用于当所述应用程序执行到所述目标方法时,利用从所述服务器端所获取到的目标资源替换所述待修复资源,以实现对所述应用程序的修复。

进一步地,在本发明实施例的一种可能的实现方式中,截获模块42,具体用于通过钩子截获对所述待修复资源进行处理的目标类的目标方法;将所截获的目标类的目标方法传入钩子对象。

基于此,替换模块43,具体用于当所述应用程序执行到所述目标类的目标方法时,根据所述服务器端所指示的注入点,对传入所述钩子对象的目标类的目标方法注入所述目标资源。

其中,注入点包括:函数执行前注入、函数执行后注入和替换函数执行的代码段中的一个。

需要说明的是,前述对应用程序修复方法实施例的解释说明也适用于该实施例的应用程序修复装置,此处不再赘述。

基于上述实施例,本发明实施例还提供了又一种应用程序修复装置的可能的实现方式,图5为本发明实施例所提供的又一种应用程序修复装置的流程示意图,在上一实施例的基础上,应用程序修复装置还包括:接收模块44。

接收模块44,用于在所述应用程序启动时,通过接口获取所述服务器端推送的修复信息;所述修复信息包括所述待修复资源的标识和所述目标资源;若确定运行所述应用程序的终端未存储有所述目标资源,则在所述目标资源通过校验后存储于所述终端的内存中。

进一步地,在本发明实施例的一种可能的实现方式中,替换模块43,包括:第一替换单元431和第二替换单元432。

第一替换单元431,用于若通过钩子机制所截获的目标方法为单一函数,利用所述目标资源替换所述单一函数所处理的待修复资源。

第二替换单元432,用于若通过钩子机制所截获的目标方法为系统函数,遍历资源文件中的字符串查询所述待修复资源,利用所述目标资源替换所查询到的待修复资源。

本发明实施例中,通过启动应用程序,并将资源文件的列表加载至内存中,进而在根据所加载的资源文件的列表,对资源文件执行预设处理流程时,通过钩子机制截获对服务器端所指示的待修复资源进行处理的目标方法,当应用程序执行到目标方法时,利用从服务器端所获取到的目标资源替换该待修复资源,以实现对应用程序的修复。可见,在修复过程中精确到方法级别进行修复,同时,无需采用新的应用程序版本,解决了现有技术中应用程序修复成本较高的技术问题。

为了实现上述实施例,本发明还提出另一种应用程序修复装置,包括:处理器,以及用于存储所述处理器可执行指令的存储器。

其中,处理器被配置为:启动应用程序,并将资源文件的列表加载至内存中;在根据所加载的资源文件的列表,对所述资源文件执行预设处理流程时,通过钩子机制截获对服务器端所指示的待修复资源进行处理的目标方法;当所述应用程序执行到所述目标方法时,利用从所述服务器端所获取到的目标资源替换所述待修复资源,以实现对所述应用程序的修复。

为了实现上述实施例,本发明还提出一种非临时性计算机可读存储介质,当所述存储介质中的指令由终端的处理器被执行时,使得终端能够执行一种方法,所述方法包括:启动应用程序,并将资源文件的列表加载至内存中;在根据所加载的资源文件的列表,对所述资源文件执行预设处理流程时,通过钩子机制截获对服务器端所指示的待修复资源进行处理的目标方法;当所述应用程序执行到所述目标方法时,利用从所述服务器端所获取到的目标资源替换所述待修复资源,以实现对所述应用程序的修复。

为了实现上述实施例,本发明还提出一种计算机程序产品,当所述计算机程序产品中的指令处理器执行时,执行一种应用程序修复方法,所述方法包括:启动应用程序,并将资源文件的列表加载至内存中;在根据所加载的资源文件的列表,对所述资源文件执行预设处理流程时,通过钩子机制截获对服务器端所指示的待修复资源进行处理的目标方法;当所述应用程序执行到所述目标方法时,利用从所述服务器端所获取到的目标资源替换所述待修复资源,以实现对所述应用程序的修复。

在本说明书的描述中,参考术语“一个实施例”、“一些实施例”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本发明的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不必须针对的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任一个或多个实施例或示例中以合适的方式结合。此外,在不相互矛盾的情况下,本领域的技术人员可以将本说明书中描述的不同实施例或示例以及不同实施例或示例的特征进行结合和组合。

此外,术语“第一”、“第二”仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括至少一个该特征。在本发明的描述中,“多个”的含义是至少两个,例如两个,三个等,除非另有明确具体的限定。

流程图中或在此以其他方式描述的任何过程或方法描述可以被理解为,表示包括一个或更多个用于实现定制逻辑功能或过程的步骤的可执行指令的代码的模块、片段或部分,并且本发明的优选实施方式的范围包括另外的实现,其中可以不按所示出或讨论的顺序,包括根据所涉及的功能按基本同时的方式或按相反的顺序,来执行功能,这应被本发明的实施例所属技术领域的技术人员所理解。

在流程图中表示或在此以其他方式描述的逻辑和/或步骤,例如,可以被认为是用于实现逻辑功能的可执行指令的定序列表,可以具体实现在任何计算机可读介质中,以供指令执行系统、装置或设备(如基于计算机的系统、包括处理器的系统或其他可以从指令执行系统、装置或设备取指令并执行指令的系统)使用,或结合这些指令执行系统、装置或设备而使用。就本说明书而言,"计算机可读介质"可以是任何可以包含、存储、通信、传播或传输程序以供指令执行系统、装置或设备或结合这些指令执行系统、装置或设备而使用的装置。计算机可读介质的更具体的示例(非穷尽性列表)包括以下:具有一个或多个布线的电连接部(电子装置),便携式计算机盘盒(磁装置),随机存取存储器(RAM),只读存储器(ROM),可擦除可编辑只读存储器(EPROM或闪速存储器),光纤装置,以及便携式光盘只读存储器(CDROM)。另外,计算机可读介质甚至可以是可在其上打印所述程序的纸或其他合适的介质,因为可以例如通过对纸或其他介质进行光学扫描,接着进行编辑、解译或必要时以其他合适方式进行处理来以电子方式获得所述程序,然后将其存储在计算机存储器中。

应当理解,本发明的各部分可以用硬件、软件、固件或它们的组合来实现。在上述实施方式中,多个步骤或方法可以用存储在存储器中且由合适的指令执行系统执行的软件或固件来实现。如,如果用硬件来实现和在另一实施方式中一样,可用本领域公知的下列技术中的任一项或他们的组合来实现:具有用于对数据信号实现逻辑功能的逻辑门电路的离散逻辑电路,具有合适的组合逻辑门电路的专用集成电路,可编程门阵列(PGA),现场可编程门阵列(FPGA)等。

本技术领域的普通技术人员可以理解实现上述实施例方法携带的全部或部分步骤是可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,该程序在执行时,包括方法实施例的步骤之一或其组合。

此外,在本发明各个实施例中的各功能单元可以集成在一个处理模块中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。所述集成的模块如果以软件功能模块的形式实现并作为独立的产品销售或使用时,也可以存储在一个计算机可读取存储介质中。

上述提到的存储介质可以是只读存储器,磁盘或光盘等。尽管上面已经示出和描述了本发明的实施例,可以理解的是,上述实施例是示例性的,不能理解为对本发明的限制,本领域的普通技术人员在本发明的范围内可以对上述实施例进行变化、修改、替换和变型。

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