CN110333893A - 应用程序的修复方法、装置、设备和存储介质 - Google Patents
应用程序的修复方法、装置、设备和存储介质 Download PDFInfo
- Publication number
- CN110333893A CN110333893A CN201910580443.5A CN201910580443A CN110333893A CN 110333893 A CN110333893 A CN 110333893A CN 201910580443 A CN201910580443 A CN 201910580443A CN 110333893 A CN110333893 A CN 110333893A
- Authority
- CN
- China
- Prior art keywords
- application program
- initial
- patch
- building
- executing
- 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.)
- Granted
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/60—Software deployment
- G06F8/65—Updates
- G06F8/658—Incremental updates; Differential updates
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Security & Cryptography (AREA)
- Stored Programmes (AREA)
Abstract
本申请提供一种应用程序的修复方法、装置、设备和存储介质,其中,该方法,包括:在执行应用程序中的第一初始化方法时,执行应用程序中的第一初始化方法的构造方法;在执行构造方法的过程中,调用并执行与应用程序对应的补丁中的第二初始化方法,以对应用程序进行修复,其中,第二初始化方法为对第一初始化方法进行了升级的方法。由于不在补丁的初始化方法中设置构造方法,依然在应用程序中的第一初始化方法中执行构造方法,从而构造方法的执行过程是符合虚拟机的规范的;从而,可以成功的加载补丁,成功的根据补丁对应用程序进行修复。
Description
技术领域
本申请实施例涉及计算机技术领域,尤其涉及一种应用程序的修复方法、装置、设备和存储介质。
背景技术
随着计算机技术的发展,各类电子设备中都需要安装应用程序。在使用应用程序的过程中,常常需要对应用程序进行修复;从而云端服务器需要生成应用程序的补丁,并将补丁发送到电子设备中;电子设备根据补丁对应用程序进行修复。目前,对应用程序的修复,常常采用热修复技术。可以采用插桩的热修复技术,生成补丁。在采用补丁对应用程序进行修复的时候,采用虚拟机,执行应用程序的代码程序,在执行到补丁的逻辑的时候,执行补丁中的代码程序,在不需要执行补丁的逻辑的时候,执行应用程序的原始逻辑。
现有技术中,在补丁中的类的初始化方法中会被设置构造方法;然后,可以采用补丁,对应用程序进行修复;补丁中的各个方法会对应用程序中的各个方法进行修复,进而对应用程序进行修复。
然而现有技术中,由于补丁中的类的初始化方法中会被设置构造方法,在采用插桩的方式对应用程序进行修复的时候,由于虚拟机的规范的限制,无法补丁中调用构造方法,从而导致补丁加载失败;进而,导致无法根据补丁对应用程序进行修复,导致应用程序的修复的失败。
发明内容
本申请实施例提供一种应用程序的修复方法、装置、设备和存储介质,用于解决现有技术中的问题。
本申请第一方面提供一种应用程序的修复方法,所述应用程序的修复方法,包括:
在执行所述应用程序中的第一初始化方法时,执行所述应用程序中的第一初始化方法的构造方法;
在执行所述构造方法的过程中,调用并执行与所述应用程序对应的补丁中的第二初始化方法,以对所述应用程序进行修复,其中,所述第二初始化方法为对所述第一初始化方法进行了升级的方法。
进一步地,在执行所述构造方法的过程中,调用并执行与所述应用程序对应的补丁中的第二初始化方法,包括:
在执行所述构造方法之前,根据所述第一初始化方法中的第一调用函数,执行与所述应用程序对应的补丁中的第二初始化方法的第一方法;
其中,所述第一初始化方法中包括所述第一调用函数和所述构造方法,所述第一调用函数位于所述构造方法之前。
进一步地,所述第一初始化方法中还包括第二调用函数,所述第二调用函数位于所述构造方法之后,所述应用程序的修复方法,还包括:
在执行所述构造方法之后,根据所述第一初始化方法中的所述第二调用函数,执行所述补丁中的所述第二初始化方法的第二方法。
进一步地,在执行与所述应用程序对应的补丁中的第二初始化方法的第一方法之前,还包括:
获取所述第一初始化方法的第一参数;
在执行与所述应用程序对应的补丁中的第二初始化方法的第一方法,包括:
根据所述第一参数,执行所述第一方法,得到第二参数,并将所述第二参数保存至预设的参数对象中。
进一步地,执行所述应用程序中的第一初始化方法的构造方法,包括:
从所述参数对象中,获取所述第二参数;
根据所述第二参数,执行所述应用程序中的第一初始化方法的所述构造方法。
进一步地,执行所述补丁中的所述第二初始化方法的第二方法,包括:
从所述参数对象中,获取所述第二参数;
根据所述第二参数,执行所述第二方法。
进一步地,在根据所述第一初始化方法中的第一调用函数,执行与所述应用程序对应的补丁中的第二初始化方法的第一方法之前,还包括:
判断是否具有与所述应用程序对应的补丁;
若确定具有,则执行根据所述第一初始化方法中的第一调用函数,执行与所述应用程序对应的补丁中的第二初始化方法的第一方法的步骤。
进一步地,在根据所述第一初始化方法中的第一调用函数,执行与所述应用程序对应的补丁中的第二初始化方法的第一方法之前,还包括:
将预设的原始初始化方法,作为第一子方法,其中,所述原始初始化方法为与所述第一初始化方法对应的原始的方法;
根据所述第一调用函数、所述构造方法和所述第二调用函数,构成第二子方法;
根据所述第一子方法和所述第二子方法,构成所述第一初始化方法。
进一步地,在执行所述应用程序中的第一初始化方法时,执行所述应用程序中的第一初始化方法的构造方法之前,还包括:
将所述应用程序和所述应用程序所对应的更新包进行比较,在确定所述应用程序中被修改时,创建不具有构造方法的所述第二初始化方法,以得到所述补丁。
进一步地,所述构造方法为父类构造方法,或者,所述构造方法为重载构造方法。
本申请第二方面提供一种应用程序的修复装置,所述应用程序的修复装置,包括:
第一执行单元,用于在执行所述应用程序中的第一初始化方法时,执行所述应用程序中的第一初始化方法的构造方法;
第二执行单元,用于在执行所述构造方法的过程中,调用并执行与所述应用程序对应的补丁中的第二初始化方法,以对所述应用程序进行修复,其中,所述第二初始化方法为对所述第一初始化方法进行了修复的方法。
进一步地,所述第二执行单元,包括:
第一执行模块,用于在所述第一执行单元执行所述构造方法之前,根据所述第一初始化方法中的第一调用函数,执行与所述应用程序对应的补丁中的第二初始化方法的第一方法;
其中,所述第一初始化方法中包括所述第一调用函数和所述构造方法,所述第一调用函数位于所述构造方法之前。
进一步地,所述第一初始化方法中还包括第二调用函数,所述第二调用函数位于所述构造方法之后,所述第二执行单元,还包括:
第二执行模块,用于在所述第一执行模块执行所述构造方法之后,根据所述第一初始化方法中的所述第二调用函数,执行所述补丁中的所述第二初始化方法的第二方法。
进一步地,所述第一执行模块,包括:
第一获取子模块,用于在所述第一执行单元执行所述构造方法之前,根据所述第一初始化方法中的第一调用函数,获取所述第一初始化方法的第一参数;
第一执行子模块,用于根据所述第一参数,执行所述第一方法,得到第二参数,并将所述第二参数保存至预设的参数对象中。
进一步地,所述第一执行单元,包括:
第一获取模块,用于从所述参数对象中,获取所述第二参数;
第三执行模块,用于根据所述第二参数,执行所述应用程序中的第一初始化方法的所述构造方法。
进一步地,所述第二执行模块,包括:
第二获取子模块,用于从所述参数对象中,获取所述第二参数;
第二执行子模块,用于根据所述第二参数,执行所述第二方法。
进一步地,所述应用程序的修复装置,还包括:
第三执行单元,用于在所述第一执行单元在执行所述应用程序中的第一初始化方法时,执行所述应用程序中的第一初始化方法的构造方法之前,判断是否具有与所述应用程序对应的补丁;若确定具有,则执行所述第一执行单元。
进一步地,所述应用程序的修复装置,还包括:
第一创建单元,用于在所述第一执行模块根据所述第一初始化方法中的第一调用函数,执行与所述应用程序对应的补丁中的第二初始化方法的第一方法之前,将预设的原始初始化方法,作为第一子方法,其中,所述原始初始化方法为与所述第一初始化方法对应的原始的方法;根据所述第一调用函数、所述构造方法和所述第二调用函数,构成第二子方法;根据所述第一子方法和所述第二子方法,构成所述第一初始化方法。
进一步地,所述应用程序的修复装置,还包括:
第二创建单元,用于在所述第一执行单元在执行所述应用程序中的第一初始化方法时,执行所述应用程序中的第一初始化方法的构造方法之前,将所述应用程序和所述应用程序所对应的更新包进行比较,在确定所述应用程序中被修改时,创建不具有构造方法的所述第二初始化方法,以得到所述补丁。
进一步地,所述构造方法为父类构造方法,或者,所述构造方法为重载构造方法。
本申请第三方面提供一种电子设备,包括:发送器、接收器、存储器和处理器;
所述存储器用于存储计算机指令;所述处理器用于运行所述存储器存储的所述计算机指令实现第一方面任一实现方式提供的应用程序的修复方法。
本申请第四方面提供一种存储介质,包括:可读存储介质和计算机指令,所述计算机指令存储在所述可读存储介质中;所述计算机指令用于实现第一方面任一实现方式提供的应用程序的修复方法。
本申请实施例提供的应用程序的修复方法、装置、设备和存储介质,通过在执行应用程序中的第一初始化方法时,执行应用程序中的第一初始化方法的构造方法;在执行构造方法的过程中,调用并执行与应用程序对应的补丁中的第二初始化方法,以对应用程序进行修复,其中,第二初始化方法为对第一初始化方法进行了升级的方法。通过在应用程序中的初始化方法中保留构造方法,在补丁中初始化方法中不设置构造方法;在采用本申请对应用程序进行修复的时候,执行应用程序中的第一初始化方法的构造方法;调用并执行与应用程序对应的补丁中的第二初始化方法;从而完成对应用程序的修复。通过以上方式,由于不在补丁的初始化方法中设置构造方法,依然在应用程序中的第一初始化方法中执行构造方法,从而构造方法的执行过程是符合虚拟机的规范的;从而,可以成功的加载补丁,成功的根据补丁对应用程序进行修复。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其它的附图。
图1为本申请实施例提供的一种应用程序的修复方法的流程图;
图2为本申请实施例提供的另一种应用程序的修复方法的流程图;
图3为本申请实施例提供的又一种应用程序的修复方法的流程图;
图4为本申请实施例提供的一种应用程序的修复装置的结构示意图;
图5为本申请实施例提供的另一种应用程序的修复装置的结构示意图;
图6为本申请实施例提供的一种电子设备的结构示意图。
具体实施方式
为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其它实施例,都属于本申请保护的范围。
随着计算机技术的发展,各类电子设备中都需要安装应用程序。在使用应用程序的过程中,常常需要对应用程序进行修复;从而云端服务器需要生成应用程序的补丁,并将补丁发送到电子设备中;电子设备根据补丁对应用程序进行修复。目前,对应用程序的修复,常常采用热修复技术。
常用的热修复技术,包括以下几种。
第一种热修复技术:在加载补丁的时候,采用Native层替换掉应用程序的ArtMethod层;其中,Native是一个计算机函数,一个Native层就是一个JAVA调用非JAVA代码的接口。JAVA是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念。
第二种热修复技术:云端服务器将全量的Dex放到应用程序中,从而,云端服务器下发全量的Dex;进而全量的Dex,对应用程序实现修复,进而完成补丁的加载。
第三种热修复技术:对原始的应用程序中的类进行插桩,电子设备安装应用程序;云端服务器向电子设备发送补丁(Patch);电子设备执行应用程序的代码,在确定应用程序的类中有对应补丁的代码的时候,执行补丁的逻辑,在确定应用程序的类中没有对应补丁的代码的时候,执行应用程序的代码的逻辑。其中,插桩是一种轻量的热修复方案。
在上述第三种热修复技术中,在生成补丁的时候,将旧的应用程序与新的应用程序对比,将被修改的方法中的指令,复制到补丁中;在这一过程中,应用程序中的初始化方法(<init>方法)中会具有构造方法,在将被修改的方法中的指令复制到补丁中的时候,也会把初始化方法中的构造方法,复制到补丁中;其中,构造方法用于对应用程序中的实例进行初始化操作,包括对变量赋初始化值、执行一些初始化逻辑。然后,在采用补丁对应用程序进行修复的时候,在虚拟机下,例如在JAVA虚拟机下,在补丁中的初始化方法中,需要调用构造方法;但是,由于虚拟机的规范的限制,在补丁中是无法调用构造方法的,从而就无法对构造函数进行修复,那就意味着无法对变量的初始值进行修改,当初始化逻辑出现问题时也难以及时得到修复;从而导致补丁加载失败;进而,导致无法根据补丁对应用程序进行修复,导致应用程序的修复的失败。
为了解决上述问题,提供了以下几种方式。
第一种方式、在生成补丁的时候,在具有初始化方法的类的其它方法中,添加修复逻辑;将修复逻辑替代构造方法中的初始化逻辑,从而生成补丁。在采用补丁对应用程序进行修复的时候,可以执行布丁中的修复逻辑,以实现补丁的加载,完成对应用程序的修复。
上述第一种方式,可以不需要修改原始的应用程序的代码,即避免在生成原始的应用程序的时候,不需要调整原始的应用程序的代码的结构。但是上述第一种方式,需要针对应用程序中的各个具有初始化方法的方法,检查是否存在构造方法,并且针对构造方式,指定专门的修复方案,以生成修复逻辑;进而,开发人员在生成补丁的时候,开发量较大。并且,需要开发人员对热修复技术、以及应用程序的架构非常了解,需要较多的人力资源,开发补丁和修复应用程序的成本较高。
第二种方式、在生成补丁的时候,直接开发新的代码和逻辑,以替换掉旧的应用程序的整个类,该类中具有初始化方法,进而生成补丁;在采用补丁对应用程序进行修复的时候,可以直接可以执行布丁中的修复逻辑,以实现补丁的加载,完成对应用程序的修复。
但是上述第二种方式中,应用程序的代码中采用类的地方很多,开发人员需要开发出大量的类,以替换掉旧的应用程序的类,进而,开发人员的工作量较高,人工成本和时间成本都较高;并且,由于采用每一个整个的类替换掉旧的应用程序的每一个整个的类,所生成的补丁的占用空间较大。并且,在替换类的时候,需要修改类的名称,会出现类的名称混淆,类的替换失败的情况;整个时候,采用补丁对应用程序进行修复的时候,也会导致补丁加载失败;进而,导致无法根据补丁对应用程序进行修复,导致应用程序的修复的失败。并且,在安卓(Android)系统,由于安卓系统自身的显示,上述第二种方式,并不能在安卓的Activity组件、Service组件和Receiver组件中进行修复和实现。
本申请提供一种应用程序的修复方法、装置、设备和存储介质,由于不在补丁的初始化方法中设置构造方法,依然在应用程序中的第一初始化方法中执行构造方法,从而构造方法的执行过程是符合虚拟机的规范的;并且,补丁中的第一方法可以对构造方法之前的各指令进行修复,补丁中的第二方法可以对构造方法之后的各指令进行修复;从而,可以成功的加载补丁,成功的根据补丁对应用程序进行修复。并且,本实施例提供的方案,不需要对应用程序和补丁进行大量的开发工作,可以降低人力和时间成本,提升补丁的生成和加载效率。
图1为本申请实施例提供的一种应用程序的修复方法的流程图,如图1所示,该应用程序的修复方法,包括:
S101、在执行应用程序中的第一初始化方法时,执行应用程序中的第一初始化方法的构造方法。
可选的,构造方法为父类构造方法,或者,构造方法为重载构造方法。
在本步骤中,本实施例以执行主体可以是电子设备、或者终端设备、或者其他可以执行本实施例的应用程序的修复装置或设备。
构造方法例如是父类构造方法,父类构造方法例如有super.<init>,父类构造方法也可以称为父类构造函数;构造方法例如是重载构造方法,重载构造方法例如有this.<init>,重载构造方法也可以称为重载构造函数。
在现有的插桩的热修复方案中,举例来说,在采用补丁对应用程序进行修复的时候,在虚拟机下,构造方法在编译后,在<init>方法中,需要调用到super.<init>方法或者this.<init>方法,但由于虚拟机的规范的限制,在补丁中是无法调用super.<init>方法或者this.<init>方法的,从而导致在将<init>方法复制到补丁中之后,在加载补丁时,会出现指令校验失败,导致无法加载补丁,进而无法根据补丁对应用程序进行修复,导致应用程序的修复的失败。
在本实施例中,未经过本实施例的方案进行处理的应用程序的每一个初始化方法中包括了构造方法,未经过本实施例的方案进行处理的应用程序的每一个初始化方法中还可以包括其他指令;
其中,本申请的初始化方法为<init>方法。构造方法为super.<init>方法或者this.<init>方法。其中,<init>方法、super.<init>方法、this.<init>方法都是构造函数中的一种。并且,<init>方法还称为初始化方法。为了便于区分,在本申请中,将<init>方法称为了初始化方法,super.<init>方法或者this.<init>方法称为构造方法。即,第一初始化方法为<init>方法,第二初始化方法为<init>方法。
然后在对应用程序经过了处理之后,电子设备所安装应用程序的每一个具有初始化方法的类中,已经进行了插桩处理。
并且,为应用程序设置了调取补丁的方式。具体的,为了便于与补丁中的初始化方法进行区分,将应用程序中的初始化方法称为第一初始化方法,将补丁中的初始化方法称为第二初始化方法。将新应用程序与旧应用程序进行比对,得到补丁,补丁中具有上述第二初始化方法,第二初始化方法是对第一初始化方法的升级;升级,指的是应用程序或者初始化方法的改进、修正、等等。
在执行应用程序中的第一初始化方法时,可以直接执行应用程序中的第一初始化方法的构造方法。
S102、在执行构造方法的过程中,调用并执行与应用程序对应的补丁中的第二初始化方法,以对应用程序进行修复,其中,第二初始化方法为对第一初始化方法进行了升级的方法。
在本步骤中,在步骤S101的执行过程中,由于与应用程序对应的补丁中具有第二初始化方法,第二初始化方法为对第一初始化方法进行了升级的方法,从而,可以调用并执行与应用程序对应的补丁中的第二初始化方法。
从而,在采用本申请对应用程序进行修复的时候,执行应用程序中的第一初始化方法的构造方法;调用并执行与应用程序对应的补丁中的第二初始化方法;从而完成对应用程序的修复。
本实施例,通过在执行应用程序中的第一初始化方法时,执行应用程序中的第一初始化方法的构造方法;在执行构造方法的过程中,调用并执行与应用程序对应的补丁中的第二初始化方法,以对应用程序进行修复,其中,第二初始化方法为对第一初始化方法进行了升级的方法。通过在应用程序中的初始化方法中保留构造方法,在补丁中初始化方法中不设置构造方法;在采用本申请对应用程序进行修复的时候,执行应用程序中的第一初始化方法的构造方法;调用并执行与应用程序对应的补丁中的第二初始化方法;从而完成对应用程序的修复。通过以上方式,由于不在补丁的初始化方法中设置构造方法,依然在应用程序中的第一初始化方法中执行构造方法,从而构造方法的执行过程是符合虚拟机的规范的;从而,可以成功的加载补丁,成功的根据补丁对应用程序进行修复。
图2为本申请实施例提供的另一种应用程序的修复方法的流程图,如图2所示,该应用程序的修复方法,包括:
S201、在执行应用程序中的第一初始化方法时,根据第一初始化方法中的第一调用函数,执行与应用程序对应的补丁中的第二初始化方法的第一方法,其中,第二初始化方法为对第一初始化方法进行了修复的方法,第一初始化方法中包括第一调用函数、构造方法和第二调用函数,第一调用函数位于构造方法之前,第二调用函数位于构造方法之后。
可选的,第一调用函数与至少一个第一指令相对应,第二调用函数与至少一个第二指令相对应,第一方法中包括至少一个第三指令,至少一个第三指令为对至少一个第一指令进行了修复的指令。
在本步骤中,本实施例以执行主体可以是电子设备、或者终端设备、或者其他可以执行本实施例的应用程序的修复装置或设备。
在本实施例中,未经过本实施例的方案进行处理的应用程序的每一个初始化方法中包括至少一个第一指令、构造方法、以及至少一个第二指令,其中,至少一个第一指令位于构造方法之前,至少一个第二指令位于构造方法之后。即,在执行应用程序的每一个初始化方法的时候,首先执行上述至少一个第一指令,然后执行构造方法,其中,构造方法用于对应用程序中的实例进行初始化操作,构造方法例如是重载构造方法this.<init>,然后执行上述至少一个第二指令。
然后在对应用程序经过了处理之后,电子设备所安装应用程序的每一个具有初始化方法的类中,已经进行了插桩处理。
并且,为应用程序设置调取补丁的方式。具体的,为了便于与补丁中的初始化方法进行区分,将应用程序中的初始化方法称为第一初始化方法,将补丁中的初始化方法称为第二初始化方法;此时,对于应用程序中的每一个第一初始化方法,第一初始化方法中包括第一调用函数、构造方法和第二调用函数,其中,第一调用函数位于构造方法之前,第二调用函数位于构造方法之后。云端服务器将旧的应用程序与新的应用程序进行比对,生成补丁;对于类的初始化方法来说,补丁中的初始化方法中不包括构造方法。对于补丁中的每一个第二初始化方法,第二初始化方法中包括第一方法和第二方法,其中,第一方法中包括至少一个第三指令,第二方法中包括至少一个第四指令;其中,上述至少一个第三指令是对上述至少一个第一指令进行了修复的指令,这里的修复指的是,至少一个第三指令与至少一个指令之间相同或不同;上述至少一个第四指令是对上述至少一个第二指令进行了修复的指令,这里的修复指的是,至少一个第四指令与至少一个第二指令之间相同或不同。从而,可知,第二初始化方法为对第一初始化方法进行了修复的方法。
并且,第一调用函数与上述至少一个第一指令相对应,这里“相对应”指的是,第一调用函数用于指示调用补丁中的第一方法,同时,第一方法中包括至少一个第三指令,而至少一个第三指令是对至少一个第一指令进行了修复的指令,从而,第一调用函数与上述至少一个第一指令相对应。第二调用函数与上述至少一个第二指令相对应,这里“相对应”指的是,第二调用函数用于指示调用补丁中的第二方法,同时,第二方法中包括至少一个第四指令,而至少一个第四指令是对至少一个第二指令进行了修复的指令,从而,第二调用函数与上述至少一个第二指令相对应。
在本实施例中,对于应用程序中的每一个第一初始化方法,在执行应用程序中的第一初始化方法的时候,在需要调用补丁时,首先根据第一初始化方法中的第一调用函数,调用补丁中的第二初始化方法中的第一方法,然后,执行补丁中的第二初始化方法中的第一方法。
可知,在本步骤中,执行的是补丁中的与上述至少一个第一指令对应的各第三指令,执行的是补丁中的逻辑;此时,是在依据补丁中的指令,对应用程序进行修复。
S202、在执行应用程序中的第一初始化方法时,执行应用程序中的第一初始化方法的构造方法。
在本步骤中,本步骤可以参见图1所示的步骤S101。并且,对于应用程序中的每一个第一初始化方法,在步骤S201之后,继续执行应用程序的第一初始化方法中的逻辑,此时,执行第一初始化方法中的构造方法。
可知,在本步骤中,构造方法依然是在应用程序中的第一初始化方法中执行的,而不是在补丁中进行的;在本步骤中,由于构造方法依然是在应用程序中的第一初始化方法中执行的,从而,是符合虚拟机的规范的,是可以正常执行构造方法的。
S203、根据第一初始化方法中的第二调用函数,执行补丁中的第二初始化方法的第二方法。
可选的,第二方法中包括至少一个第四指令,至少一个第四指令为对至少一个第二指令进行了修复的指令。
在本步骤中,对于应用程序中的每一个第一初始化方法,在步骤S201之后,继续执行应用程序的第一初始化方法中的逻辑,此时,根据第一初始化方法中的第二调用函数,调用补丁中的第二初始化方法的第二方法,执行补丁中的第二初始化方法的第二方法。
可知,在本步骤中,执行的是补丁中的与上述至少一个第二指令对应的各第四指令,执行的是补丁中的逻辑;此时,是在依据补丁中的指令,对应用程序进行修复。
举例来说,未经过本实施例处理的应用程序中的第一初始化方法包括了以下内容{int a=0;int b=3;super();int c=a+b;},int a=0和int b=3为第一指令,super()是构造方法,int c=a+b是第二指令。对于本实施例提供的方法,在执行应用程序中的第一初始化方法的时候,在需要调用补丁时,在第一初始化方法中包括了以下内容{patch.preInit();super();patch.initBody();},其中,patch.preInit()为第一调用函数,super()为构造方法,patch.initBody()为第二调用函数。在补丁中包括了第二初始化方法,第二初始化方法中包括了第一方法和第二方法,其中,第一方法中包括了以下内容{int a=0;int b=4;},int a=0和int b=4是第三指令,第二方法中包括了以下内容{int c=a+b;},int c=a+b是第四指令。
从而,在执行应用程序中的第一初始化方法的时候,在需要调用补丁时,首先根据第一初始方法中的第一调用函数patch.preInit(),执行补丁中第二初始化方法中的第一方法{int a=0;int b=4;};然后,执行第一初始化方法中的构造方法super();然后,根据第一初始方法中的第二调用函数patch.initBody(),执行补丁中第二初始化方法中的第二方法{int c=a+b;}。
本实施例,通过在执行应用程序中的第一初始化方法时,根据第一初始化方法中的第一调用函数,执行与应用程序对应的补丁中的第二初始化方法的第一方法,其中,第二初始化方法为对第一初始化方法进行了修复的方法,第一初始化方法中包括第一调用函数、构造方法和第二调用函数,第一调用函数位于构造方法之前,第二调用函数位于构造方法之后;执行应用程序中的第一初始化方法的构造方法;根据第一初始化方法中的第二调用函数,执行补丁中的第二初始化方法的第二方法。从而,对于应用程序中的每一个第一初始化方法,在执行应用程序中的第一初始化方法的时候,在需要调用补丁时,首先根据第一初始化方法中的第一调用函数,执行补丁中的第二初始化方法中的第一方法,执行的是补丁中的逻辑;此时,是在依据补丁中的指令,对应用程序进行修复;然后,执行应用程序中的第一初始化方法的构造方法;由于构造方法依然是在应用程序中的第一初始化方法中执行的,从而,是符合虚拟机的规范的,是可以正常执行构造方法的;然后,继续根据第一初始化方法中的第二调用函数执行补丁中的第二初始化方法的第二方法,从而依据补丁中的指令对应用程序进行修复。通过以上方式,由于不在补丁的初始化方法中设置构造方法,依然在应用程序中的第一初始化方法中执行构造方法,从而构造方法的执行过程是符合虚拟机的规范的;并且,补丁中的第一方法可以对构造方法之前的各指令进行修复,补丁中的第二方法可以对构造方法之后的各指令进行修复;从而,可以成功的加载补丁,成功的根据补丁对应用程序进行修复。并且,本实施例提供的方案,不需要对应用程序和补丁进行大量的开发工作,可以降低人力和时间成本,提升补丁的生成和加载效率。
图3为本申请实施例提供的又一种应用程序的修复方法的流程图,如图3所示,该应用程序的修复方法,包括:
S301、将应用程序和应用程序所对应的更新包进行比较,在确定应用程序被修改时,创建第一方法和第二方法,以得到补丁。
在本步骤中,本实施例以执行主体可以是电子设备、或者终端设备、或者其他可以执行本实施例的应用程序的修复装置或设备。
首先需要生成补丁,此时,需要获取应用程序和应用程序的更新包,此时,应用程序没有经过插桩处理,更新包也没有经过插桩处理,更新包是新的应用程序。
将应用程序的代码与更新包的代码进行比较,以确定应用程序是否被修改,即,确定应用程序中是否被修改。
在确定应用程序被修改的时候,创建每一个第二初始化方法,每一个第二初始化方法中包括第一方法和第二方法,其中,第一方法中包括了至少一个第三指令,第二方法中包括了至少一个第四指令。进而得到应用程序所对应的补丁。
对于第一方法、第二方法,第三指令和第四指令,可以参见图2所示的步骤S201的介绍不再赘述。
S302、将预设的原始初始化方法,作为第一子方法,其中,原始初始化方法为与第一初始化方法对应的原始的方法;根据第一调用函数、构造方法和第二调用函数,构成第二子方法;根据第一子方法和第二子方法,构成第一初始化方法。
在本步骤中,需要对应用程序进行插桩处理,本实施例所涉及的插桩处理包括了以下过程。
首先,对于应用程序的每一个原始初始化方法,将原始初始化方法作为第一子方法;其中,原始初始化方法中包括了至少一个第一指令、构造方法和至少一个第二指令,至少一个第一指令位于构造方法之前,至少一个第二指令位于构造方法之后。即,在执行应用程序的原始初始化方法的时候,首先执行上述至少一个第一指令,然后执行构造方法,然后执行上述至少一个第二指令。
从而,将原始初始化方法作为第一子方法,即,将原始初始化方法作为了第一初始化方法的一部分。其中,原始初始化方法为与第一初始化方法对应的原始的方法。
然后,需要为第一初始化方法,插入判断逻辑;判断逻辑用于判断是否存在与应用程序对应的补丁,即用于判断是否存在与第一初始化方法对应的第二初始化方法。
然后,根据第一调用函数、原始的上述构造方法和第二调用函数,构成第二子方法。其中,第一调用函数位于构造方法之前,第二调用函数位于构造方法之后。第一调用函数用于指示调用补丁中的第一方法;第二调用函数用于指示调用补丁中的第二方法。
进而,将根据第一子方法和第二子方法,构成第一初始化方法;并且,第一初始化方法中具有判断逻辑。
其中,步骤S301与步骤S302的执行次序不做限定。
举例来说,未经过本实施例处理的应用程序中的第一初始化方法包括了以下内容{int a=0;int b=3;super();int c=a+b;},int a=0和int b=3为第一指令,super()是构造方法,int c=a+b是第二指令。
然后,未经过本实施例处理的应用程序中的第一初始化方法,包括了以下内容:
其中,if(patch==null)和else为上述判断逻辑,判断是否存在补丁,即,判断是否存在与第一初始化方法对应的第二初始化方法。int a=0和int b=3为第一指令,int c=a+b为第二指令;patch.preInit()为第一调用函数,super()为构造方法,patch.initBody()为第二调用函数。
S303、在执行应用程序中的第一初始化方法时,判断是否具有与应用程序对应的补丁。
在本步骤中,对于应用程序中的每一个第一初始化方法,在执行应用程序中的第一初始化方法的时候,首先需要判断是否存在补丁,即,判断是否存在与第一初始化方法对应的第二初始化方法。
S304、若确定具有与应用程序对应的补丁,则执行步骤S305。
在本步骤中,在步骤S303时候,若确定存在补丁,即,确定存在与第一初始化方法对应的第二初始化方法,则可以执行步骤S305。
S305、根据第一初始化方法中的第一调用函数,获取第一初始化方法的第一参数,并根据第一参数,执行与应用程序对应的补丁中的第二初始化方法的第一方法,得到第二参数,并将第二参数保存至预设的参数对象中。
其中,第二初始化方法为对第一初始化方法进行了修复的方法,第一初始化方法中包括第一调用函数、构造方法和第二调用函数,第一调用函数位于构造方法之前,第二调用函数位于构造方法之后,第一调用函数与至少一个第一指令相对应,第二调用函数与至少一个第二指令相对应,第一方法中包括至少一个第三指令,至少一个第三指令为对至少一个第一指令进行了修复的指令。
在本实施例中,本步骤可以参见图2所示的步骤S201。
并且,在本实施例中,在根据第一初始化方法中的第一调用函数,调用补丁中的第二初始化方法的第一方法时,首先需要将应用程序的第一初始化方法中的第一参数全部传入进来;即,在应用程序的第一初始化方法中的第一参数被存储如到一个参数寄存器中,需要将参数寄存器中的第一参数,全部获取到,然后,将参数寄存器中的第一参数,传入到第二初始化方法的第一方法中。
然后,就可以根据第一参数,执行与应用程序对应的补丁中的第二初始化方法的第一方法,进而,得到第二参数。
然后,将第二参数,保存到一个预设的参数对象中。可知,参数对象用于保存第一方法被调用之后的所有的有效寄存器数据。
S306、从参数对象中,获取第二参数。
在本步骤中,对于应用程序中的每一个第一初始化方法,需要从步骤S305的参数对象中获取第二参数。
S307、根据第二参数,执行应用程序中的第一初始化方法的构造方法。
在本实施例中,本步骤可以参见图2所示的步骤S202。
并且,在本实施例中,需要根据补丁中的第二初始化方法的第一方法所产生的第二参数,执行应用程序中的第一初始化方法的构造方法。
可知,在本步骤中,构造方法依然是在应用程序中的第一初始化方法中执行的,而不是在补丁中进行的;在本步骤中,由于构造方法依然是在应用程序中的第一初始化方法中执行的,从而,是符合虚拟机的规范的,是可以正常执行构造方法的。
S308、根据第一初始化方法中的第二调用函数,根据第二参数,执行补丁中的第二初始化方法的第二方法,其中,第二方法中包括至少一个第四指令,至少一个第四指令为对至少一个第二指令进行了修复的指令。
在本实施例中,本步骤可以参见图2所示的步骤S203。
并且,在本步骤中,需要根据补丁中的第二初始化方法的第一方法所产生的第二参数,执行补丁中的第二初始化方法的第二方法。此时,可以直接依据步骤S306所获取的第二参数,执行补丁中的第二初始化方法的第二方法;或者,也可以再次从参数对象中获取第二参数,然后依据此时所获取的第二参数,执行补丁中的第二初始化方法的第二方法。
本实施例,通过对于应用程序中的每一个第一初始化方法,在执行应用程序中的第一初始化方法的时候,在需要调用补丁时,首先根据第一初始化方法中的第一调用函数,执行补丁中的第二初始化方法中的第一方法,执行的是补丁中的逻辑;此时,是在依据补丁中的指令,对应用程序进行修复;然后,执行应用程序中的第一初始化方法的构造方法;由于构造方法依然是在应用程序中的第一初始化方法中执行的,从而,是符合虚拟机的规范的,是可以正常执行构造方法的;然后,继续根据第一初始化方法中的第二调用函数执行补丁中的第二初始化方法的第二方法,从而依据补丁中的指令对应用程序进行修复。通过以上方式,由于不在补丁的初始化方法中设置构造方法,依然在应用程序中的第一初始化方法中执行构造方法,从而构造方法的执行过程是符合虚拟机的规范的;并且,补丁中的第一方法可以对构造方法之前的各指令进行修复,补丁中的第二方法可以对构造方法之后的各指令进行修复;从而,可以成功的加载补丁,成功的根据补丁对应用程序进行修复。并且,本实施例提供的方案,不需要对应用程序和补丁进行大量的开发工作,可以降低人力和时间成本,提升补丁的生成和加载效率。并且,可以生成不具有构造方法的补丁,以避免在补丁中无法执行构造方法。并且,依据补丁中的第一方法所产生的参数,执行应用程序的构造函数,执行补丁中的第二方法;在补丁中的第一方法中的第三指令与原始的第一指令不同的时候,依然采用应用程序所产生的参数,会产生错误,从而,采用补丁中的第一方法所产生的参数,保证可以正确执行应用程序的第一初始化方法的构造方法,以及可以正确执行补丁中的第二初始化方法的第二方法。
图4为本申请实施例提供的一种应用程序的修复装置的结构示意图,如图4所示,该应用程序的修复装置,包括:
第一执行单元31,用于在执行应用程序中的第一初始化方法时,执行应用程序中的第一初始化方法的构造方法;
第二执行单元32,用于在执行构造方法的过程中,调用并执行与应用程序对应的补丁中的第二初始化方法,以对应用程序进行修复,其中,第二初始化方法为对第一初始化方法进行了修复的方法。
本实施例提供的应用程序的修复装置,同于实现前述任一实施例提供的应用程序的修复方法中的技术方案,其实现原理和技术效果类似,不再赘述。
图5为本申请实施例提供的另一种应用程序的修复装置的结构示意图,在图4所示实施例的基础上,如图5所示,该应用程序的修复装置中,第二执行单元32,包括:
第一执行模块321,用于在第一执行单元执行构造方法之前,根据第一初始化方法中的第一调用函数,执行与应用程序对应的补丁中的第二初始化方法的第一方法;
其中,第一初始化方法中包括第一调用函数和构造方法,第一调用函数位于构造方法之前。
第一初始化方法中还包括第二调用函数,第二调用函数位于构造方法之后,第二执行单元32,还包括:
第二执行模块322,用于在第一执行模块321执行构造方法之后,根据第一初始化方法中的第二调用函数,执行补丁中的第二初始化方法的第二方法。
第一执行模块321,包括:
第一获取子模块3211,用于在第一执行单元执行构造方法之前,根据第一初始化方法中的第一调用函数,获取第一初始化方法的第一参数。
第一执行子模块3212,用于根据第一参数,执行第一方法,得到第二参数,并将第二参数保存至预设的参数对象中。
第一执行单元31,包括:
第一获取模块311,用于从参数对象中,获取第二参数。
第三执行模块312,用于根据第二参数,执行应用程序中的第一初始化方法的构造方法。
第二执行模块322,包括:
第二获取子模块3221,用于从参数对象中,获取第二参数;
第二执行子模块3222,用于根据第二参数,执行第二方法。
本实施例提供的应用程序的修复装置,还包括:
第三执行单元41,用于在第一执行单元31在执行应用程序中的第一初始化方法时,执行应用程序中的第一初始化方法的构造方法之前,判断是否具有与应用程序对应的补丁;若确定具有,则执行第一执行单元31。
本实施例提供的应用程序的修复装置,还包括:
第一创建单元42,用于在第一执行模块321根据第一初始化方法中的第一调用函数,执行与应用程序对应的补丁中的第二初始化方法的第一方法之前,将预设的原始初始化方法,作为第一子方法,其中,原始初始化方法为与第一初始化方法对应的原始的方法;根据第一调用函数、构造方法和第二调用函数,构成第二子方法;根据第一子方法和第二子方法,构成第一初始化方法。
本实施例提供的应用程序的修复装置,还包括:
第二创建单元43,用于在第一执行单元31在执行应用程序中的第一初始化方法时,执行应用程序中的第一初始化方法的构造方法之前,将应用程序和应用程序所对应的更新包进行比较,在确定应用程序中被修改时,创建不具有构造方法的第二初始化方法,以得到补丁。
构造方法为父类构造方法,或者,构造方法为重载构造方法。
本实施例提供的应用程序的修复装置,同于实现前述任一实施例提供的应用程序的修复方法中的技术方案,其实现原理和技术效果类似,不再赘述。
图6为本申请实施例提供的一种电子设备的结构示意图,如图6所示,该电子设备,包括:发送器71、接收器72、存储器73和处理器74;
存储器73用于存储计算机指令;处理器74用于运行存储器73存储的计算机指令实现前述实施例提供任一实现方式的应用程序的修复方法的技术方案。
本申请还提供一种存储介质,包括:可读存储介质和计算机指令,计算机指令存储在可读存储介质中;计算机指令用于实现前述例提供的任一实现方式的应用程序的修复方法的技术方案。
在上述电子设备的具体实现中,应理解,处理器74可以是中央处理单元(英文:Central Processing Unit,简称:CPU),还可以是其他通用处理器、数字信号处理器(英文:Digital Signal Processor,简称:DSP)、专用集成电路(英文:Application SpecificIntegrated Circuit,简称:ASIC)等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。结合本申请实施例所公开的方法的步骤可以直接体现为硬件处理器执行完成,或者用处理器中的硬件及软件模块组合执行完成。
本领域普通技术人员可以理解:实现上述各方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成。前述的程序可以存储于一计算机可读取存储介质中。该程序在执行时,执行包括上述各方法实施例的步骤;而前述的存储介质包括:只读存储器(英文:read-only memory,缩写:ROM)、RAM、快闪存储器、硬盘、固态硬盘、磁带(英文:magnetictape)、软盘(英文:floppy disk)、光盘(英文:optical disc)及其任意组合。
最后应说明的是:以上各实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述各实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的范围。
Claims (13)
1.一种应用程序的修复方法,其特征在于,所述应用程序的修复方法,包括:
在执行所述应用程序中的第一初始化方法时,执行所述应用程序中的第一初始化方法的构造方法;
在执行所述构造方法的过程中,调用并执行与所述应用程序对应的补丁中的第二初始化方法,以对所述应用程序进行修复,其中,所述第二初始化方法为对所述第一初始化方法进行了升级的方法。
2.根据权利要求1所述的应用程序的修复方法,其特征在于,在执行所述构造方法的过程中,调用并执行与所述应用程序对应的补丁中的第二初始化方法,包括:
在执行所述构造方法之前,根据所述第一初始化方法中的第一调用函数,执行与所述应用程序对应的补丁中的第二初始化方法的第一方法;
其中,所述第一初始化方法中包括所述第一调用函数和所述构造方法,所述第一调用函数位于所述构造方法之前。
3.根据权利要求2所述的应用程序的修复方法,其特征在于,所述第一初始化方法中还包括第二调用函数,所述第二调用函数位于所述构造方法之后,所述应用程序的修复方法,还包括:
在执行所述构造方法之后,根据所述第一初始化方法中的所述第二调用函数,执行所述补丁中的所述第二初始化方法的第二方法。
4.根据权利要求3所述的应用程序的修复方法,其特征在于,在执行与所述应用程序对应的补丁中的第二初始化方法的第一方法之前,还包括:
获取所述第一初始化方法的第一参数;
在执行与所述应用程序对应的补丁中的第二初始化方法的第一方法,包括:
根据所述第一参数,执行所述第一方法,得到第二参数,并将所述第二参数保存至预设的参数对象中。
5.根据权利要求4所述的应用程序的修复方法,其特征在于,执行所述应用程序中的第一初始化方法的构造方法,包括:
从所述参数对象中,获取所述第二参数;
根据所述第二参数,执行所述应用程序中的第一初始化方法的所述构造方法。
6.根据权利要求4所述的应用程序的修复方法,其特征在于,执行所述补丁中的所述第二初始化方法的第二方法,包括:
从所述参数对象中,获取所述第二参数;
根据所述第二参数,执行所述第二方法。
7.根据权利要求3所述的应用程序的修复方法,其特征在于,在根据所述第一初始化方法中的第一调用函数,执行与所述应用程序对应的补丁中的第二初始化方法的第一方法之前,还包括:
判断是否具有与所述应用程序对应的补丁;
若确定具有,则执行根据所述第一初始化方法中的第一调用函数,执行与所述应用程序对应的补丁中的第二初始化方法的第一方法的步骤。
8.根据权利要求3所述的应用程序的修复方法,其特征在于,在根据所述第一初始化方法中的第一调用函数,执行与所述应用程序对应的补丁中的第二初始化方法的第一方法之前,还包括:
将预设的原始初始化方法,作为第一子方法,其中,所述原始初始化方法为与所述第一初始化方法对应的原始的方法;
根据所述第一调用函数、所述构造方法和所述第二调用函数,构成第二子方法;
根据所述第一子方法和所述第二子方法,构成所述第一初始化方法。
9.根据权利要求1-8任一项所述的应用程序的修复方法,其特征在于,在执行所述应用程序中的第一初始化方法时,执行所述应用程序中的第一初始化方法的构造方法之前,还包括:
将所述应用程序和所述应用程序所对应的更新包进行比较,在确定所述应用程序中被修改时,创建不具有构造方法的所述第二初始化方法,以得到所述补丁。
10.根据权利要求1-8任一项所述的应用程序的修复方法,其特征在于,所述构造方法为父类构造方法,或者,所述构造方法为重载构造方法。
11.一种应用程序的修复装置,其特征在于,所述应用程序的修复装置,包括:
第一执行单元,用于在执行所述应用程序中的第一初始化方法时,执行所述应用程序中的第一初始化方法的构造方法;
第二执行单元,用于在执行所述构造方法的过程中,调用并执行与所述应用程序对应的补丁中的第二初始化方法,以对所述应用程序进行修复,其中,所述第二初始化方法为对所述第一初始化方法进行了修复的方法。
12.一种电子设备,其特征在于,包括:发送器、接收器、存储器和处理器;
所述存储器用于存储计算机指令;所述处理器用于运行所述存储器存储的所述计算机指令实现权利要求1-10任一项所述的应用程序的修复方法。
13.一种存储介质,其特征在于,包括:可读存储介质和计算机指令,所述计算机指令存储在所述可读存储介质中;所述计算机指令用于实现权利要求1-10任一项所述的应用程序的修复方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910580443.5A CN110333893B (zh) | 2019-06-28 | 2019-06-28 | 应用程序的修复方法、装置、设备和存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910580443.5A CN110333893B (zh) | 2019-06-28 | 2019-06-28 | 应用程序的修复方法、装置、设备和存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110333893A true CN110333893A (zh) | 2019-10-15 |
CN110333893B CN110333893B (zh) | 2023-04-18 |
Family
ID=68143722
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910580443.5A Active CN110333893B (zh) | 2019-06-28 | 2019-06-28 | 应用程序的修复方法、装置、设备和存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110333893B (zh) |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2005215830A (ja) * | 2004-01-28 | 2005-08-11 | Internatl Business Mach Corp <Ibm> | コンパイラ、コンパイル方法、コンパイルプログラム、及び記録媒体 |
US20050273841A1 (en) * | 2004-06-07 | 2005-12-08 | Check Point Software Technologies, Inc. | System and Methodology for Protecting New Computers by Applying a Preconfigured Security Update Policy |
CN102725730A (zh) * | 2009-12-18 | 2012-10-10 | 赛丹思科大学 | 用于静态键入的基于类的面向对象的软件的非阻挡动态更新的方法、计算机程序产品和系统 |
US20170344361A1 (en) * | 2016-05-24 | 2017-11-30 | Baidu Online Network Technology (Beijing) Co., Ltd | Kernel repair method and apparatus |
CN108027722A (zh) * | 2015-11-20 | 2018-05-11 | 谷歌有限责任公司 | 在编译和部署中动态更新应用 |
US10146515B1 (en) * | 2015-03-10 | 2018-12-04 | Twitter, Inc. | Live code updates |
-
2019
- 2019-06-28 CN CN201910580443.5A patent/CN110333893B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2005215830A (ja) * | 2004-01-28 | 2005-08-11 | Internatl Business Mach Corp <Ibm> | コンパイラ、コンパイル方法、コンパイルプログラム、及び記録媒体 |
US20050273841A1 (en) * | 2004-06-07 | 2005-12-08 | Check Point Software Technologies, Inc. | System and Methodology for Protecting New Computers by Applying a Preconfigured Security Update Policy |
CN102725730A (zh) * | 2009-12-18 | 2012-10-10 | 赛丹思科大学 | 用于静态键入的基于类的面向对象的软件的非阻挡动态更新的方法、计算机程序产品和系统 |
US10146515B1 (en) * | 2015-03-10 | 2018-12-04 | Twitter, Inc. | Live code updates |
CN108027722A (zh) * | 2015-11-20 | 2018-05-11 | 谷歌有限责任公司 | 在编译和部署中动态更新应用 |
US20170344361A1 (en) * | 2016-05-24 | 2017-11-30 | Baidu Online Network Technology (Beijing) Co., Ltd | Kernel repair method and apparatus |
Non-Patent Citations (5)
Title |
---|
GITLQR: ""热修复——深入浅出原理与实现"", 《HTTPS://JUEJIN.CN/POST/6844903511243620366》 * |
KAMIL JEZEK等: ""How Java APIs break – An empirical study"", 《INFORMATION AND SOFTWARE TECHNOLOGY》 * |
MATHIAS SCHMITT等: ""Dynamic Reconfiguration of Intelligent Field Devices by using Modular Software Applications"", 《IFAC-PAPERSONLINE》 * |
梁力图: ""移动应用性能管理解决方案的研究与实现"", 《中国优秀硕士学位论文全文数据库 信息科技辑》 * |
熊建芬: ""Android App功能插件化机制的研究与实现"", 《中国优秀硕士学位论文全文数据库 信息科技辑》 * |
Also Published As
Publication number | Publication date |
---|---|
CN110333893B (zh) | 2023-04-18 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN100489778C (zh) | Java程序可动态更新化实现方法 | |
CN102147747B (zh) | 增强的升级路径的系统和方法 | |
US8499289B2 (en) | Method, device and system for realizing kernel online patching | |
CN104834555A (zh) | 调用功能模块的方法、相关装置及装置修复方法 | |
US10466998B2 (en) | Model based upgrade campaign generation | |
WO2020237798A1 (zh) | 一种升级方法及装置 | |
CN106919398A (zh) | 一种软件发布方法及装置 | |
US8965746B2 (en) | System and method for validating an electrical network model | |
US11327738B2 (en) | Software and firmware updates in a combined single pane of glass interface | |
CN104978253A (zh) | 一种目标文件校验的方法和装置 | |
CN107301070A (zh) | 一种升级方法及终端 | |
US20060123040A1 (en) | Algorithm for automated enterprise deployments | |
CN109885612B (zh) | 区块链智能合约的同步生效方法及装置 | |
CN106020882A (zh) | 一种应用升级方法、智能终端及升级系统 | |
CN109213570A (zh) | 一种虚拟机迁移方法、装置、设备及可读存储介质 | |
CN107239313A (zh) | Spring应用服务的升级方法和存储介质 | |
CN104111843A (zh) | 一种基于沙箱的脚本更新方法及系统 | |
CN110297655B (zh) | 生成补丁包的方法、装置、设备及存储介质 | |
CN111625317A (zh) | 一种业务系统的容器云构建方法及相关装置 | |
CN103677845B (zh) | 一种网站应用部署方法 | |
CN107168719A (zh) | 应用程序运行方法、装置、终端及计算机可读存储介质 | |
CN111949292B (zh) | 一种热补丁装载方法、装置、电子设备及存储介质 | |
CN109104292B (zh) | 更新部署处理方法、相关设备和计算机可读存储介质 | |
CN110333893A (zh) | 应用程序的修复方法、装置、设备和存储介质 | |
US20230342181A1 (en) | Validation of combined software/firmware updates |
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 |